You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by kf...@apache.org on 2024/10/22 17:28:42 UTC

(druid-website) 01/01: Update website for Druid 31.0.0 release

This is an automated email from the ASF dual-hosted git repository.

kfaraz pushed a commit to branch 31.0.0-release
in repository https://gitbox.apache.org/repos/asf/druid-website.git

commit 8e7a1ce23818cb6ceba59a94462398a07d400b79
Author: Kashif Faraz <ka...@gmail.com>
AuthorDate: Tue Oct 22 22:58:22 2024 +0530

    Update website for Druid 31.0.0 release
---
 404.html                                           |  10 +-
 ...chitecture-a2d14e8be60d586632471e97383e406c.svg |  19 +++
 ...l-theta-03-d396351338383bf3cbd248be97a7c9ae.png | Bin 0 -> 164755 bytes
 ...l-theta-04-7c498583c84f25374a035507a41592da.png | Bin 0 -> 141568 bytes
 ...l-theta-05-210059e731382527a704510b94d370d4.png | Bin 0 -> 88165 bytes
 ...l-theta-06-4b588f7737377421937ed369bfe9a94e.png | Bin 0 -> 105328 bytes
 ...l-theta-07-8c74460cb2ed72066ca3b0b3470657e0.png | Bin 0 -> 105225 bytes
 ...l-theta-08-8d2ab89aef3d1661329ad060467e2f9b.png | Bin 0 -> 104913 bytes
 assets/js/0126da28.77c840d5.js                     |   1 +
 assets/js/0132476f.fcd5b735.js                     |   1 +
 assets/js/0224d2b5.f312b39f.js                     |   1 +
 assets/js/046c719a.2241b764.js                     |   1 +
 assets/js/0476ae88.57b8aa20.js                     |   1 +
 assets/js/0537dde9.f389766f.js                     |   1 +
 assets/js/054fb2b1.9249b326.js                     |   1 +
 assets/js/05cdf9b1.50eede2c.js                     |   1 +
 assets/js/06571176.520218ec.js                     |   1 +
 assets/js/069c0206.30652343.js                     |   1 +
 assets/js/06d4d1e0.280a5035.js                     |   1 +
 assets/js/09c4e8dd.fe3b8cee.js                     |   1 +
 assets/js/0a756300.6cb48902.js                     |   1 +
 assets/js/0a9a80dd.f42d309f.js                     |   1 +
 assets/js/0a9bed85.52786743.js                     |   1 +
 assets/js/0ae1c18e.a53ef94a.js                     |   1 +
 assets/js/0b33a7a0.2ef986ff.js                     |   1 +
 assets/js/0d3a0eb0.73da5a50.js                     |   1 +
 assets/js/0d5d7249.c37b2805.js                     |   1 +
 assets/js/0fd352a7.817431a5.js                     |   1 +
 assets/js/10e90abd.4cf6281f.js                     |   1 +
 assets/js/12ffe3d2.a824e1a4.js                     |   1 +
 assets/js/13d6eb58.3e2d430a.js                     |   1 +
 assets/js/13ebb7f9.766f108c.js                     |   1 +
 assets/js/1901288f.3533458c.js                     |   1 +
 assets/js/190295b3.3a8aea83.js                     |   1 +
 assets/js/198a5291.98f2509a.js                     |   1 +
 assets/js/1a4f3326.62322393.js                     |   1 +
 assets/js/1b34ab8c.47caabb5.js                     |   1 +
 assets/js/1cc92077.9b54717f.js                     |   1 +
 assets/js/1eb94bc7.e5dd32d4.js                     |   1 +
 assets/js/1ed64048.35ac1b7f.js                     |   1 +
 assets/js/1f9334a1.8c7ad34c.js                     |   1 +
 assets/js/1fd605f7.f47044b2.js                     |   1 +
 assets/js/206062c1.e5d09aec.js                     |   1 +
 assets/js/2078bf5c.e283fce4.js                     |   1 +
 assets/js/21c3723d.8771fff5.js                     |   1 +
 assets/js/21ebf0b0.2fea056e.js                     |   1 +
 assets/js/24723d88.e5702ff3.js                     |   1 +
 assets/js/2483f1a4.38359184.js                     |   1 +
 assets/js/248dc532.81bb069d.js                     |   1 +
 assets/js/25b781f9.fe55bbda.js                     |   1 +
 assets/js/25ecea31.463b2925.js                     |   1 +
 assets/js/280f7273.de559405.js                     |   1 +
 assets/js/28dc2723.7c0c90eb.js                     |   1 +
 assets/js/28ed6393.8e0c98be.js                     |   1 +
 assets/js/28f1939a.bcab3d56.js                     |   1 +
 assets/js/290e857d.3ad269fb.js                     |   1 +
 assets/js/2950959e.13272ee2.js                     |   1 +
 assets/js/29bae509.4cb6d085.js                     |   1 +
 assets/js/2a38fc41.bec276a0.js                     |   1 +
 assets/js/2a42e4ee.439fc8ab.js                     |   1 +
 assets/js/2b40a5e4.6014b0aa.js                     |   1 +
 assets/js/2be65167.3e56ea52.js                     |   1 +
 assets/js/2c6c7527.fcbe02f3.js                     |   1 +
 assets/js/2d28cc78.0c613cd2.js                     |   1 +
 assets/js/2eebbc74.272f3255.js                     |   1 +
 assets/js/3033821a.d0df5dc2.js                     |   1 +
 assets/js/320332b3.66e82562.js                     |   1 +
 assets/js/3332ec60.a106eed0.js                     |   1 +
 assets/js/33585a1a.f07e8248.js                     |   1 +
 assets/js/344d8d50.3eca4ce7.js                     |   1 +
 assets/js/34b2a980.bef13fe4.js                     |   1 +
 assets/js/351a67d3.3323ad53.js                     |   1 +
 assets/js/37f69834.4b59af64.js                     |   1 +
 assets/js/3970644f.7b6516cd.js                     |   1 +
 assets/js/3b745e6a.d2a8b4da.js                     |   1 +
 assets/js/3c456dd9.ed0e605e.js                     |   1 +
 assets/js/3ff67914.7fd2a559.js                     |   1 +
 assets/js/418ca9e4.8f5b0b40.js                     |   1 +
 assets/js/42622719.6df39528.js                     |   1 +
 assets/js/42e0f233.dcf5859c.js                     |   1 +
 assets/js/432e53c1.52138141.js                     |   1 +
 assets/js/4351236e.40ed4825.js                     |   1 +
 assets/js/439c7825.52327bc0.js                     |   1 +
 assets/js/43bd2df9.1c6a8bbc.js                     |   1 +
 assets/js/441583bd.2983c8f4.js                     |   1 +
 assets/js/44cddcd5.c7b01201.js                     |   1 +
 assets/js/45c6b677.886054e6.js                     |   1 +
 assets/js/467bdf77.8efbc434.js                     |   1 +
 assets/js/497407da.dec91f7c.js                     |   1 +
 assets/js/49a4d130.1d3bd5a6.js                     |   1 +
 assets/js/4ac46171.fefc4694.js                     |   1 +
 assets/js/4b566a62.0515e8cb.js                     |   1 +
 assets/js/4ca66415.a3e23b3e.js                     |   1 +
 assets/js/4cd43d5a.e6603390.js                     |   1 +
 assets/js/4ea278cc.a582a20a.js                     |   1 +
 assets/js/4ec2b9ab.ed40cfa3.js                     |   1 +
 assets/js/4ee453ab.f6e4ff1e.js                     |   1 +
 assets/js/4eef587c.6b16eb7c.js                     |   1 +
 assets/js/515e4638.387ff843.js                     |   1 +
 assets/js/538ed93a.0126f518.js                     |   1 +
 assets/js/541ad25b.d688974e.js                     |   1 +
 assets/js/54b9cc5c.84d37c3d.js                     |   1 +
 assets/js/564c1fad.83b0aad6.js                     |   1 +
 assets/js/5666aa6c.f5ff14d5.js                     |   1 +
 assets/js/56727f7d.a21e19ad.js                     |   1 +
 assets/js/56765d65.5a090492.js                     |   1 +
 assets/js/5775dce0.e187a2b7.js                     |   1 +
 assets/js/5925c818.b4f4535a.js                     |   1 +
 assets/js/5a3faebd.6470a74b.js                     |   1 +
 assets/js/5b55a31e.8703a718.js                     |   1 +
 assets/js/5bc876c1.84978686.js                     |   1 +
 assets/js/5bcd0a3f.684cafca.js                     |   1 +
 assets/js/5d06d220.b5734ef7.js                     |   1 +
 assets/js/5e1f1f82.5e3e36f1.js                     |   1 +
 assets/js/5e719299.692b8ee0.js                     |   1 +
 assets/js/6062.37a11f44.js                         |   2 +
 assets/js/6062.37a11f44.js.LICENSE.txt             |   9 ++
 assets/js/60972e40.86544abb.js                     |   1 +
 assets/js/614de8bb.83dec42c.js                     |   1 +
 assets/js/62b4e539.ec1aa628.js                     |   1 +
 assets/js/63bb84bc.f3761fb3.js                     |   1 +
 assets/js/644780f0.b860810f.js                     |   1 +
 assets/js/64e9eba0.1aaabae3.js                     |   1 +
 assets/js/65a4e06a.853074ed.js                     |   1 +
 assets/js/665301ab.9fbded24.js                     |   1 +
 assets/js/66a7be61.ed4b8b3b.js                     |   1 +
 assets/js/66c5cf64.d5704900.js                     |   1 +
 assets/js/66f9cb8d.19381efe.js                     |   1 +
 assets/js/682d83b2.c249d4c1.js                     |   1 +
 assets/js/68df3730.c83f715c.js                     |   1 +
 assets/js/69e39989.9ce5fb84.js                     |   1 +
 assets/js/69eeee49.6c4f06e3.js                     |   1 +
 assets/js/6bb07e9b.05c2df86.js                     |   1 +
 assets/js/6bf94788.4c652acb.js                     |   1 +
 assets/js/6cac1ea5.2d201188.js                     |   1 +
 assets/js/6dcb683d.ec5a2790.js                     |   1 +
 assets/js/6dd29f52.58ec158c.js                     |   1 +
 assets/js/7051c27f.e01a6a78.js                     |   1 +
 assets/js/7086ce60.5ae4e217.js                     |   1 +
 assets/js/715dc3e9.5d6f2160.js                     |   1 +
 assets/js/718556eb.c400cae3.js                     |   1 +
 assets/js/71ef02f6.559cd38f.js                     |   1 +
 assets/js/72995293.2031dca1.js                     |   1 +
 assets/js/72ea40d5.84eee236.js                     |   1 +
 assets/js/744b9652.4921942d.js                     |   1 +
 assets/js/746c1c24.37481a2e.js                     |   1 +
 assets/js/75a92c0e.37cf5411.js                     |   1 +
 assets/js/769b330b.288cb7b0.js                     |   1 +
 assets/js/779b8f0d.e0cfacc4.js                     |   1 +
 assets/js/78ba5bac.c5df94b5.js                     |   1 +
 assets/js/7a0f2acd.8191d413.js                     |   1 +
 assets/js/7a794a65.b5f60004.js                     |   1 +
 assets/js/7a7d23e6.1807d09d.js                     |   1 +
 assets/js/7d7765dc.32d928de.js                     |   1 +
 assets/js/7fa11fd4.fa11883d.js                     |   1 +
 assets/js/7fd15237.0881b1c2.js                     |   1 +
 assets/js/81d5f8af.fc5d6cbc.js                     |   1 +
 assets/js/82cea77e.ebbd7e09.js                     |   1 +
 assets/js/8374b51c.4c488d39.js                     |   1 +
 assets/js/870b135e.686c968d.js                     |   1 +
 assets/js/88b265f2.df8ae23d.js                     |   1 +
 assets/js/895b9791.5c441336.js                     |   1 +
 assets/js/8a0de0d1.c6a03e79.js                     |   1 +
 assets/js/8a0fda3a.7973bec5.js                     |   1 +
 assets/js/8c79d4ad.5c945760.js                     |   1 +
 assets/js/8db1ddfb.24c916a1.js                     |   1 +
 assets/js/8e101272.4301da80.js                     |   1 +
 assets/js/8ff86064.225988f1.js                     |   1 +
 assets/js/91e11e1a.3248ac60.js                     |   1 +
 assets/js/935f2afb.4fdcd012.js                     |   1 +
 assets/js/9535633b.b954e841.js                     |   1 +
 assets/js/95bd9a60.c7e4f5a0.js                     |   1 +
 assets/js/96f9f5eb.82c9d2e9.js                     |   1 +
 assets/js/971bc6a3.e2aa07a2.js                     |   1 +
 assets/js/9979c633.cf5d5171.js                     |   1 +
 assets/js/99c0feaa.e5b18e7f.js                     |   1 +
 assets/js/9b0eeea6.7c71101e.js                     |   1 +
 assets/js/9d131ba7.d63e50c8.js                     |   1 +
 assets/js/9d8a2b80.4e3185f6.js                     |   1 +
 assets/js/9f3a9cd1.c7edbd8b.js                     |   1 +
 assets/js/9fe1491d.145653fe.js                     |   1 +
 assets/js/a059b30c.8504c696.js                     |   1 +
 assets/js/a0de97c3.fcee7895.js                     |   1 +
 assets/js/a108b7b4.981df4cc.js                     |   1 +
 assets/js/a136cf5a.108f2336.js                     |   1 +
 assets/js/a16a64b6.a0273fe9.js                     |   1 +
 assets/js/a2dc6acc.a72e453c.js                     |   1 +
 assets/js/a34364b0.0caa52b2.js                     |   1 +
 assets/js/a345ae17.c68292ea.js                     |   1 +
 assets/js/a488a371.83179722.js                     |   1 +
 assets/js/a5111ec8.57954ee3.js                     |   1 +
 assets/js/a61022db.67a0e4c7.js                     |   1 +
 assets/js/a6204a76.069a3504.js                     |   1 +
 assets/js/a62f1867.cd0b2e91.js                     |   1 +
 assets/js/a73624b1.3ec86b05.js                     |   1 +
 assets/js/a8d74ae1.de747302.js                     |   1 +
 assets/js/aa2627ad.6e0ad994.js                     |   1 +
 assets/js/ab674c21.0fc04354.js                     |   1 +
 assets/js/ac71c729.3f5c49ce.js                     |   1 +
 assets/js/ad4c9a14.4904ab4e.js                     |   1 +
 assets/js/ad86ca04.871f7e1a.js                     |   1 +
 assets/js/b1bc8f33.352b6762.js                     |   1 +
 assets/js/b2a3b7fe.936ea947.js                     |   1 +
 assets/js/b48c8f19.13064628.js                     |   1 +
 assets/js/b54011f2.255ecc30.js                     |   1 +
 assets/js/b611302f.4abc76ff.js                     |   1 +
 assets/js/b6d922f1.20fc691f.js                     |   1 +
 assets/js/b6f1e671.ff813869.js                     |   1 +
 assets/js/b75fd672.22833b8c.js                     |   1 +
 assets/js/b878c673.14a7a07e.js                     |   1 +
 assets/js/b981ce2d.9824d4d1.js                     |   1 +
 assets/js/baa62cdd.1ffdb220.js                     |   1 +
 assets/js/bd4428ea.9e27cb51.js                     |   1 +
 assets/js/bea53a9b.9d24bcc3.js                     |   1 +
 assets/js/bf90b8c3.f916de57.js                     |   1 +
 assets/js/c2d6aa20.e4effa38.js                     |   1 +
 assets/js/c3252e00.758b9d74.js                     |   1 +
 assets/js/c37ef478.bb8bad8f.js                     |   1 +
 assets/js/c3a20bcc.c03dd25f.js                     |   1 +
 assets/js/c3d7f96c.c9ca42a6.js                     |   1 +
 assets/js/c4eb85b5.cb8c9929.js                     |   1 +
 assets/js/c4f5d8e4.73a568e8.js                     |   1 +
 assets/js/c4f8acce.d323d3af.js                     |   1 +
 assets/js/c6892b7a.68ebb370.js                     |   1 +
 assets/js/c6da23bd.824680c4.js                     |   1 +
 assets/js/c7796201.137930b8.js                     |   1 +
 assets/js/c784051f.d0544eea.js                     |   1 +
 assets/js/cdd5be1e.b2d169ed.js                     |   1 +
 assets/js/ce1d1cee.4b2551ac.js                     |   1 +
 assets/js/ce216a89.b6d8ab1c.js                     |   1 +
 assets/js/cea033fc.994ddf9d.js                     |   1 +
 assets/js/cfd3ae53.47d89de6.js                     |   1 +
 assets/js/d0cd4320.168a1ce6.js                     |   1 +
 assets/js/d0ec54cc.6be93b90.js                     |   1 +
 assets/js/d2174baf.9aa6e801.js                     |   1 +
 assets/js/d29a09b8.b5a56271.js                     |   1 +
 assets/js/d576915d.0779e783.js                     |   1 +
 assets/js/d61dc2c6.e7e1b92a.js                     |   1 +
 assets/js/d6bc9e72.dc95ba03.js                     |   1 +
 assets/js/d6ffcfbd.cb4f1087.js                     |   1 +
 assets/js/d7056626.32e46fd5.js                     |   1 +
 assets/js/d7935e22.44aa0b6c.js                     |   1 +
 assets/js/d7e17a56.656109ee.js                     |   1 +
 assets/js/d97b9da7.bb53bbdd.js                     |   1 +
 assets/js/dc8d8ba6.7a019f91.js                     |   1 +
 assets/js/dd9731d1.d103ee85.js                     |   1 +
 assets/js/ddb752a3.bef0c144.js                     |   1 +
 assets/js/ddb96e42.8f37d466.js                     |   1 +
 assets/js/de16b7c2.cf7844c3.js                     |   1 +
 assets/js/dee7d915.bd344c0d.js                     |   1 +
 assets/js/dff70855.e7cbbc7c.js                     |   1 +
 assets/js/e1ca08a7.6d4df2e6.js                     |   1 +
 assets/js/e2a0ac16.2a468822.js                     |   1 +
 assets/js/e46c7298.82cc1eaa.js                     |   1 +
 assets/js/e4c6fc8c.fbea42f8.js                     |   1 +
 assets/js/e74930cd.039072b6.js                     |   1 +
 assets/js/e7d531e5.8c254eb0.js                     |   1 +
 assets/js/e809b713.189d8d07.js                     |   1 +
 assets/js/e833ccc9.efeb5313.js                     |   1 +
 assets/js/e9483372.82f5beb2.js                     |   1 +
 assets/js/ea3ac311.94d1a0c8.js                     |   1 +
 assets/js/ea4f8461.259349d1.js                     |   1 +
 assets/js/ea722b71.294c85ab.js                     |   1 +
 assets/js/eab95d94.72457d23.js                     |   1 +
 assets/js/eaffe8b7.4e05d7a4.js                     |   1 +
 assets/js/eb03316f.dc72f90e.js                     |   1 +
 assets/js/ed039623.d2377aa7.js                     |   1 +
 assets/js/ed72e2ec.48abb3aa.js                     |   1 +
 assets/js/ed751b3e.b1858380.js                     |   1 +
 assets/js/ed878c12.af276c76.js                     |   1 +
 assets/js/ee2b3e4d.23f86832.js                     |   1 +
 assets/js/ef65e1d4.e5c2d979.js                     |   1 +
 assets/js/efa71475.c88fc633.js                     |   1 +
 assets/js/f014cc84.861a100d.js                     |   1 +
 assets/js/f17e53f0.da3d5cc2.js                     |   1 +
 assets/js/f5deb524.db8655bf.js                     |   1 +
 assets/js/f654de79.505a4a63.js                     |   1 +
 assets/js/f6dae52e.e4da3e5c.js                     |   1 +
 assets/js/f6e3d9aa.a33209f4.js                     |   1 +
 assets/js/f771a59e.67dfd83d.js                     |   1 +
 assets/js/f925887b.278aad3f.js                     |   1 +
 assets/js/fa34eaa0.33fc40b8.js                     |   1 +
 assets/js/fa730293.8cae300a.js                     |   1 +
 assets/js/fb356df6.c42ef2c8.js                     |   1 +
 assets/js/main.f9c13e33.js                         |   2 +
 assets/js/main.f9c13e33.js.LICENSE.txt             |  70 +++++++++
 assets/js/runtime~main.7d8e1a79.js                 |   1 +
 blog/index.html                                    |  10 +-
 community/cla/index.html                           |  10 +-
 community/index.html                               |  12 +-
 community/join-slack/index.html                    |  10 +-
 docs/31.0.0/api-reference.html/index.html          |  11 ++
 .../automatic-compaction-api.html/index.html       |  11 ++
 .../automatic-compaction-api/index.html            |  26 ++++
 .../data-management-api.html/index.html            |  11 ++
 .../api-reference/data-management-api/index.html   |  45 ++++++
 .../dynamic-configuration-api.html/index.html      |  11 ++
 .../dynamic-configuration-api/index.html           |  35 +++++
 docs/31.0.0/api-reference/index.html               |  26 ++++
 .../json-querying-api.html/index.html              |  11 ++
 .../api-reference/json-querying-api/index.html     |  26 ++++
 .../legacy-metadata-api.html/index.html            |  11 ++
 .../api-reference/legacy-metadata-api/index.html   |  55 ++++++++
 .../api-reference/lookups-api.html/index.html      |  11 ++
 docs/31.0.0/api-reference/lookups-api/index.html   |  32 +++++
 .../retention-rules-api.html/index.html            |  11 ++
 .../api-reference/retention-rules-api/index.html   |  27 ++++
 .../service-status-api.html/index.html             |  11 ++
 .../api-reference/service-status-api/index.html    |  31 ++++
 docs/31.0.0/api-reference/sql-api.html/index.html  |  11 ++
 docs/31.0.0/api-reference/sql-api/index.html       |  42 ++++++
 .../sql-ingestion-api.html/index.html              |  11 ++
 .../api-reference/sql-ingestion-api/index.html     |  33 +++++
 docs/31.0.0/api-reference/sql-jdbc.html/index.html |  11 ++
 docs/31.0.0/api-reference/sql-jdbc/index.html      |  38 +++++
 .../api-reference/supervisor-api.html/index.html   |  11 ++
 .../31.0.0/api-reference/supervisor-api/index.html |  34 +++++
 .../31.0.0/api-reference/tasks-api.html/index.html |  11 ++
 docs/31.0.0/api-reference/tasks-api/index.html     |  30 ++++
 .../druid-vs-elasticsearch.html/index.html         |  11 ++
 .../comparisons/druid-vs-elasticsearch}/index.html |  21 ++-
 .../comparisons/druid-vs-key-value.html/index.html |  11 ++
 .../comparisons/druid-vs-key-value}/index.html     |  26 ++--
 .../comparisons/druid-vs-kudu.html/index.html      |  11 ++
 .../31.0.0/comparisons/druid-vs-kudu}/index.html   |  26 ++--
 .../comparisons/druid-vs-redshift.html/index.html  |  11 ++
 .../comparisons/druid-vs-redshift/index.html       |  26 ++++
 .../comparisons/druid-vs-spark.html/index.html     |  11 ++
 .../31.0.0/comparisons/druid-vs-spark/index.html   |  22 ++-
 .../druid-vs-sql-on-hadoop.html/index.html         |  11 ++
 .../comparisons/druid-vs-sql-on-hadoop/index.html  |  44 ++++++
 docs/31.0.0/configuration.html/index.html          |  11 ++
 docs/31.0.0/configuration/auth.html/index.html     |  11 ++
 docs/31.0.0/configuration/broker.html/index.html   |  11 ++
 docs/31.0.0/configuration/caching.html/index.html  |  11 ++
 .../configuration/coordinator.html/index.html      |  11 ++
 .../configuration/extensions.html/index.html       |  11 ++
 docs/31.0.0/configuration/extensions/index.html    |  46 ++++++
 docs/31.0.0/configuration/hadoop.html/index.html   |  11 ++
 .../configuration/historical.html/index.html       |  11 ++
 .../human-readable-byte.html/index.html            |  11 ++
 .../configuration/human-readable-byte/index.html   |  27 ++++
 docs/31.0.0/configuration/index.html               | 134 ++++++++++++++++++
 .../configuration/indexing-service.html/index.html |  11 ++
 docs/31.0.0/configuration/logging.html/index.html  |  11 ++
 docs/31.0.0/configuration/logging/index.html       |  45 ++++++
 .../production-cluster.html/index.html             |  11 ++
 docs/31.0.0/configuration/realtime.html/index.html |  11 ++
 .../configuration/simple-cluster.html/index.html   |  11 ++
 .../31.0.0/configuration/zookeeper.html/index.html |  11 ++
 docs/31.0.0/data-management.html/index.html        |  11 ++
 .../automatic-compaction.html/index.html           |  11 ++
 .../automatic-compaction/index.html                |  46 ++++++
 .../data-management/compaction.html/index.html     |  11 ++
 docs/31.0.0/data-management/compaction/index.html  |  30 ++++
 docs/31.0.0/data-management/delete.html/index.html |  11 ++
 docs/31.0.0/data-management/delete/index.html      |  51 +++++++
 docs/31.0.0/data-management/index.html             |  29 ++++
 .../manual-compaction.html/index.html              |  11 ++
 .../data-management/manual-compaction/index.html   |  27 ++++
 .../data-management/schema-changes.html/index.html |  11 ++
 .../data-management/schema-changes/index.html      |  33 +++++
 docs/31.0.0/data-management/update.html/index.html |  11 ++
 docs/31.0.0/data-management/update/index.html      |  46 ++++++
 .../cassandra-deep-storage.html/index.html         |  11 ++
 docs/31.0.0/dependencies/zookeeper.html/index.html |  11 ++
 docs/31.0.0/design.html/index.html                 |  11 ++
 docs/31.0.0/design/architecture.html/index.html    |  11 ++
 docs/31.0.0/design/architecture/index.html         |  38 +++++
 docs/31.0.0/design/auth.html/index.html            |  11 ++
 docs/31.0.0/design/broker.html/index.html          |  11 ++
 docs/31.0.0/design/broker/index.html               |  27 ++++
 .../concepts-and-terminology.html/index.html       |  11 ++
 docs/31.0.0/design/coordinator.html/index.html     |  11 ++
 docs/31.0.0/design/coordinator/index.html          |  59 ++++++++
 docs/31.0.0/design/deep-storage.html/index.html    |  11 ++
 docs/31.0.0/design/deep-storage/index.html         |  30 ++++
 docs/31.0.0/design/design.html/index.html          |  11 ++
 .../extensions-contrib/dropwizard.html/index.html  |  11 ++
 .../extensions-contrib/dropwizard/index.html       |  33 +++++
 docs/31.0.0/design/historical.html/index.html      |  11 ++
 docs/31.0.0/design/historical/index.html           |  29 ++++
 docs/31.0.0/design/index.html                      |  44 ++++++
 docs/31.0.0/design/indexer.html/index.html         |  11 ++
 docs/31.0.0/design/indexer/index.html              |  28 ++++
 .../31.0.0/design/indexing-service.html/index.html |  11 ++
 docs/31.0.0/design/indexing-service/index.html     |  27 ++++
 .../31.0.0/design/metadata-storage.html/index.html |  11 ++
 docs/31.0.0/design/metadata-storage/index.html     |  50 +++++++
 docs/31.0.0/design/middlemanager.html/index.html   |  11 ++
 docs/31.0.0/design/middlemanager/index.html        |  27 ++++
 docs/31.0.0/design/overlord.html/index.html        |  11 ++
 docs/31.0.0/design/overlord/index.html             |  29 ++++
 docs/31.0.0/design/peons.html/index.html           |  11 ++
 docs/31.0.0/design/peons/index.html                |  28 ++++
 docs/31.0.0/design/plumber.html/index.html         |  11 ++
 docs/31.0.0/design/processes.html/index.html       |  11 ++
 docs/31.0.0/design/realtime.html/index.html        |  11 ++
 docs/31.0.0/design/router.html/index.html          |  11 ++
 docs/31.0.0/design/router/index.html               |  43 ++++++
 docs/31.0.0/design/segments.html/index.html        |  11 ++
 docs/31.0.0/design/segments/index.html             |  42 ++++++
 docs/31.0.0/design/storage.html/index.html         |  11 ++
 docs/31.0.0/design/storage/index.html              |  36 +++++
 docs/31.0.0/design/zookeeper.html/index.html       |  11 ++
 docs/31.0.0/design/zookeeper/index.html            |  27 ++++
 .../approximate-histograms.html/index.html         |  11 ++
 docs/31.0.0/development/build.html/index.html      |  11 ++
 docs/31.0.0/development/build/index.html           |  30 ++++
 .../community-extensions/azure.html/index.html     |  11 ++
 .../community-extensions/cassandra.html/index.html |  11 ++
 .../cloudfiles.html/index.html                     |  11 ++
 .../community-extensions/graphite.html/index.html  |  11 ++
 .../kafka-simple.html/index.html                   |  11 ++
 .../community-extensions/rabbitmq.html/index.html  |  11 ++
 .../development/contribute-to-docs.html/index.html |  11 ++
 .../development/contribute-to-docs/index.html      |  31 ++++
 .../development/experimental.html/index.html       |  11 ++
 docs/31.0.0/development/experimental/index.html    |  29 ++++
 .../extensions-contrib/aliyun-oss.html/index.html  |  11 ++
 .../extensions-contrib/aliyun-oss/index.html       |  30 ++++
 .../ambari-metrics-emitter.html/index.html         |  11 ++
 .../ambari-metrics-emitter/index.html              |  35 +++++
 .../extensions-contrib/cassandra.html/index.html   |  11 ++
 .../extensions-contrib/cassandra}/index.html       |  16 ++-
 .../extensions-contrib/cloudfiles.html/index.html  |  11 ++
 .../extensions-contrib/cloudfiles/index.html       |  26 ++++
 .../compressed-big-decimal.html/index.html         |  11 ++
 .../compressed-big-decimal/index.html              |  26 ++++
 .../ddsketch-quantiles.html/index.html             |  11 ++
 .../ddsketch-quantiles/index.html                  |  26 ++++
 .../extensions-contrib/delta-lake.html/index.html  |  11 ++
 .../extensions-contrib/delta-lake/index.html       |  32 +++++
 .../distinctcount.html/index.html                  |  11 ++
 .../extensions-contrib/distinctcount/index.html    |  26 ++++
 .../gce-extensions.html/index.html                 |  11 ++
 .../extensions-contrib/gce-extensions/index.html   |  38 +++++
 .../extensions-contrib/google.html/index.html      |  11 ++
 .../extensions-contrib/graphite.html/index.html    |  11 ++
 .../extensions-contrib/graphite/index.html         |  41 ++++++
 .../extensions-contrib/iceberg.html/index.html     |  11 ++
 .../extensions-contrib/iceberg/index.html          |  36 +++++
 .../extensions-contrib/influx.html/index.html      |  11 ++
 .../extensions-contrib/influx/index.html           |  26 ++++
 .../influxdb-emitter.html/index.html               |  11 ++
 .../extensions-contrib/influxdb-emitter/index.html |  30 ++++
 .../extensions-contrib/k8s-jobs.html/index.html    |  11 ++
 .../extensions-contrib/k8s-jobs/index.html         |  52 +++++++
 .../kafka-emitter.html/index.html                  |  11 ++
 .../extensions-contrib/kafka-emitter/index.html    |  29 ++++
 .../kafka-simple.html/index.html                   |  11 ++
 .../materialized-view.html/index.html              |  11 ++
 .../materialized-view/index.html                   |  27 ++++
 .../momentsketch-quantiles.html/index.html         |  11 ++
 .../momentsketch-quantiles/index.html              |  27 ++++
 .../moving-average-query.html/index.html           |  11 ++
 .../moving-average-query/index.html                |  31 ++++
 .../opentsdb-emitter.html/index.html               |  11 ++
 .../extensions-contrib/opentsdb-emitter/index.html |  29 ++++
 .../extensions-contrib/orc.html/index.html         |  11 ++
 .../extensions-contrib/parquet.html/index.html     |  11 ++
 .../extensions-contrib/prometheus.html/index.html  |  11 ++
 .../extensions-contrib/prometheus/index.html       |  32 +++++
 .../rabbit-super-stream-injestion.html/index.html  |  11 ++
 .../rabbit-super-stream-injestion/index.html       |  30 ++++
 .../extensions-contrib/rabbitmq.html/index.html    |  11 ++
 .../extensions-contrib/redis-cache.html/index.html |  11 ++
 .../extensions-contrib/redis-cache/index.html      |  26 ++++
 .../extensions-contrib/rocketmq.html/index.html    |  11 ++
 .../extensions-contrib/scan-query.html/index.html  |  11 ++
 .../spectator-histogram.html/index.html            |  11 ++
 .../spectator-histogram/index.html                 |  93 ++++++++++++
 .../extensions-contrib/sqlserver.html/index.html   |  11 ++
 .../extensions-contrib/sqlserver/index.html        |  27 ++++
 .../extensions-contrib/statsd.html/index.html      |  11 ++
 .../extensions-contrib/statsd/index.html           |  41 ++++++
 .../tdigestsketch-quantiles.html/index.html        |  11 ++
 .../tdigestsketch-quantiles/index.html             |  35 +++++
 .../extensions-contrib/thrift.html/index.html      |  11 ++
 .../extensions-contrib/thrift/index.html           |  26 ++++
 .../time-min-max.html/index.html                   |  11 ++
 .../extensions-contrib/time-min-max/index.html     |  28 ++++
 .../approximate-histograms.html/index.html         |  11 ++
 .../approximate-histograms/index.html              |  52 +++++++
 .../extensions-core/avro.html/index.html           |  11 ++
 .../development/extensions-core/avro/index.html    |  26 ++++
 .../extensions-core/azure.html/index.html          |  11 ++
 .../development/extensions-core/azure/index.html   |  26 ++++
 .../extensions-core/bloom-filter.html/index.html   |  11 ++
 .../extensions-core/bloom-filter/index.html        |  41 ++++++
 .../extensions-core/caffeine-cache.html/index.html |  11 ++
 .../datasketches-extension.html/index.html         |  11 ++
 .../datasketches-extension/index.html              |  26 ++++
 .../datasketches-hll.html/index.html               |  11 ++
 .../extensions-core/datasketches-hll/index.html    |  32 +++++
 .../datasketches-kll.html/index.html               |  11 ++
 .../extensions-core/datasketches-kll/index.html    |  26 ++++
 .../datasketches-quantiles.html/index.html         |  11 ++
 .../datasketches-quantiles/index.html              |  26 ++++
 .../datasketches-theta.html/index.html             |  11 ++
 .../extensions-core/datasketches-theta/index.html  |  28 ++++
 .../datasketches-tuple.html/index.html             |  11 ++
 .../extensions-core/datasketches-tuple/index.html  |  26 ++++
 .../extensions-core/druid-aws-rds.html/index.html  |  11 ++
 .../extensions-core/druid-aws-rds/index.html       |  27 ++++
 .../druid-basic-security.html/index.html           |  11 ++
 .../druid-basic-security/index.html                | 156 +++++++++++++++++++++
 .../extensions-core/druid-kerberos.html/index.html |  11 ++
 .../extensions-core/druid-kerberos/index.html      |  34 +++++
 .../extensions-core/druid-lookups.html/index.html  |  11 ++
 .../extensions-core/druid-lookups/index.html       |  41 ++++++
 .../extensions-core/druid-pac4j.html/index.html    |  11 ++
 .../extensions-core/druid-pac4j/index.html         |  28 ++++
 .../druid-ranger-security.html/index.html          |  11 ++
 .../druid-ranger-security/index.html               |  26 ++++
 .../extensions-core/examples.html/index.html       |  11 ++
 .../extensions-core/examples}/index.html           |  14 +-
 .../extensions-core/google.html/index.html         |  11 ++
 .../development/extensions-core/google/index.html  |  28 ++++
 .../extensions-core/hdfs.html/index.html           |  11 ++
 .../development/extensions-core/hdfs/index.html    |  48 +++++++
 .../kafka-eight-firehose.html/index.html           |  11 ++
 .../kafka-extraction-namespace/index.html          |  11 ++
 .../kafka-ingestion.html/index.html                |  11 ++
 .../extensions-core/kafka-ingestion/index.html     |  11 ++
 .../kafka-supervisor-operations.html/index.html    |  11 ++
 .../kafka-supervisor-operations/index.html         |  11 ++
 .../kafka-supervisor-reference.html/index.html     |  11 ++
 .../kafka-supervisor-reference/index.html          |  11 ++
 .../kinesis-ingestion.html/index.html              |  11 ++
 .../extensions-core/kinesis-ingestion/index.html   |  11 ++
 .../extensions-core/kubernetes.html/index.html     |  11 ++
 .../extensions-core/kubernetes/index.html          |  29 ++++
 .../lookups-cached-global/index.html               |  11 ++
 .../extensions-core/mysql.html/index.html          |  11 ++
 .../development/extensions-core/mysql/index.html   |  31 ++++
 .../namespaced-lookup.html/index.html              |  11 ++
 .../extensions-core/orc.html/index.html            |  11 ++
 .../development/extensions-core/orc/index.html     |  38 +++++
 .../extensions-core/parquet.html/index.html        |  11 ++
 .../extensions-core/parquet}/index.html            |  20 ++-
 .../extensions-core/postgresql.html/index.html     |  11 ++
 .../extensions-core/postgresql/index.html          |  30 ++++
 .../extensions-core/protobuf.html/index.html       |  11 ++
 .../extensions-core/protobuf/index.html            |  28 ++++
 .../development/extensions-core/s3.html/index.html |  11 ++
 .../development/extensions-core/s3/index.html      |  28 ++++
 .../simple-client-sslcontext.html/index.html       |  11 ++
 .../simple-client-sslcontext/index.html            |  29 ++++
 .../extensions-core/stats.html/index.html          |  11 ++
 .../development/extensions-core/stats/index.html   |  36 +++++
 .../extensions-core/test-stats.html/index.html     |  11 ++
 .../extensions-core/test-stats/index.html          |  27 ++++
 docs/31.0.0/development/extensions/index.html      |  11 ++
 docs/31.0.0/development/indexer.html/index.html    |  11 ++
 .../index.html                                     |  11 ++
 docs/31.0.0/development/javascript.html/index.html |  11 ++
 docs/31.0.0/development/javascript/index.html      |  38 +++++
 .../kafka-simple-consumer-firehose.html/index.html |  11 ++
 docs/31.0.0/development/modules.html/index.html    |  11 ++
 docs/31.0.0/development/modules/index.html         |  52 +++++++
 docs/31.0.0/development/overview.html/index.html   |  11 ++
 docs/31.0.0/development/overview/index.html        |  40 ++++++
 docs/31.0.0/development/router.html/index.html     |  11 ++
 .../development/select-query.html/index.html       |  11 ++
 docs/31.0.0/development/versioning.html/index.html |  11 ++
 docs/31.0.0/development/versioning/index.html      |  26 ++++
 docs/31.0.0/index.html                             |  11 ++
 docs/31.0.0/ingestion.html/index.html              |  11 ++
 .../ingestion/automatic-compaction.html/index.html |  11 ++
 .../ingestion/batch-ingestion.html/index.html      |  11 ++
 .../command-line-hadoop-indexer.html/index.html    |  11 ++
 docs/31.0.0/ingestion/compaction.html/index.html   |  11 ++
 .../concurrent-append-replace.html/index.html      |  11 ++
 .../ingestion/concurrent-append-replace/index.html |  27 ++++
 docs/31.0.0/ingestion/data-formats.html/index.html |  11 ++
 docs/31.0.0/ingestion/data-formats/index.html      | 115 +++++++++++++++
 .../ingestion/data-management.html/index.html      |  11 ++
 docs/31.0.0/ingestion/delete-data.html/index.html  |  11 ++
 docs/31.0.0/ingestion/faq.html/index.html          |  11 ++
 docs/31.0.0/ingestion/faq/index.html               |  32 +++++
 docs/31.0.0/ingestion/firehose.html/index.html     |  11 ++
 docs/31.0.0/ingestion/flatten-json.html/index.html |  11 ++
 .../hadoop-vs-native-batch.html/index.html         |  11 ++
 docs/31.0.0/ingestion/hadoop.html/index.html       |  11 ++
 docs/31.0.0/ingestion/hadoop/index.html            |  73 ++++++++++
 docs/31.0.0/ingestion/index.html                   |  35 +++++
 .../ingestion/ingestion-spec.html/index.html       |  11 ++
 docs/31.0.0/ingestion/ingestion-spec/index.html    |  85 +++++++++++
 docs/31.0.0/ingestion/ingestion.html/index.html    |  11 ++
 .../31.0.0/ingestion/input-sources.html/index.html |  11 ++
 docs/31.0.0/ingestion/input-sources/index.html     |  75 ++++++++++
 .../ingestion/kafka-ingestion.html/index.html      |  11 ++
 docs/31.0.0/ingestion/kafka-ingestion/index.html   |  39 ++++++
 .../ingestion/kinesis-ingestion.html/index.html    |  11 ++
 docs/31.0.0/ingestion/kinesis-ingestion/index.html |  48 +++++++
 .../ingestion/locking-and-priority.html/index.html |  11 ++
 .../ingestion/migrate-from-firehose/index.html     |  11 ++
 docs/31.0.0/ingestion/misc-tasks.html/index.html   |  11 ++
 .../native-batch-firehose.html/index.html          |  11 ++
 .../ingestion/native-batch-firehose}/index.html    |  14 +-
 .../native-batch-input-sources.html/index.html     |  11 ++
 .../native-batch-simple-task.html/index.html       |  11 ++
 .../ingestion/native-batch-simple-task/index.html  |  35 +++++
 docs/31.0.0/ingestion/native-batch.html/index.html |  11 ++
 docs/31.0.0/ingestion/native-batch/index.html      | 101 +++++++++++++
 docs/31.0.0/ingestion/native_tasks.html/index.html |  11 ++
 docs/31.0.0/ingestion/overview.html/index.html     |  11 ++
 docs/31.0.0/ingestion/partitioning.html/index.html |  11 ++
 docs/31.0.0/ingestion/partitioning/index.html      |  37 +++++
 .../ingestion/realtime-ingestion.html/index.html   |  11 ++
 docs/31.0.0/ingestion/reports.html/index.html      |  11 ++
 docs/31.0.0/ingestion/rollup.html/index.html       |  11 ++
 docs/31.0.0/ingestion/rollup/index.html            |  28 ++++
 .../ingestion/schema-changes.html/index.html       |  11 ++
 .../31.0.0/ingestion/schema-design.html/index.html |  11 ++
 docs/31.0.0/ingestion/schema-design/index.html     | 110 +++++++++++++++
 docs/31.0.0/ingestion/schema-model.html/index.html |  11 ++
 docs/31.0.0/ingestion/schema-model/index.html      |  31 ++++
 .../ingestion/standalone-realtime.html/index.html  |  11 ++
 .../ingestion/standalone-realtime/index.html       |  33 +++++
 .../ingestion/stream-ingestion.html/index.html     |  11 ++
 docs/31.0.0/ingestion/stream-pull.html/index.html  |  11 ++
 docs/31.0.0/ingestion/stream-push.html/index.html  |  11 ++
 docs/31.0.0/ingestion/streaming.html/index.html    |  11 ++
 docs/31.0.0/ingestion/streaming/index.html         |  29 ++++
 docs/31.0.0/ingestion/supervisor.html/index.html   |  11 ++
 docs/31.0.0/ingestion/supervisor/index.html        |  52 +++++++
 docs/31.0.0/ingestion/tasks.html/index.html        |  11 ++
 docs/31.0.0/ingestion/tasks/index.html             |  78 +++++++++++
 docs/31.0.0/ingestion/tranquility.html/index.html  |  11 ++
 .../31.0.0/ingestion/tranquility}/index.html       |  17 ++-
 .../ingestion/transform-spec.html/index.html       |  11 ++
 .../ingestion/update-existing-data.html/index.html |  11 ++
 docs/31.0.0/misc/cluster-setup.html/index.html     |  11 ++
 docs/31.0.0/misc/evaluate.html/index.html          |  11 ++
 docs/31.0.0/misc/math-expr.html/index.html         |  11 ++
 docs/31.0.0/misc/papers-and-talks.html/index.html  |  11 ++
 docs/31.0.0/misc/papers-and-talks/index.html       |  26 ++++
 docs/31.0.0/misc/tasks.html/index.html             |  11 ++
 docs/31.0.0/multi-stage-query.html/index.html      |  11 ++
 docs/31.0.0/multi-stage-query/api.html/index.html  |  11 ++
 .../multi-stage-query/concepts.html/index.html     |  11 ++
 docs/31.0.0/multi-stage-query/concepts/index.html  | 122 ++++++++++++++++
 .../multi-stage-query/examples.html/index.html     |  11 ++
 docs/31.0.0/multi-stage-query/examples/index.html  |  28 ++++
 docs/31.0.0/multi-stage-query/index.html           |  44 ++++++
 .../multi-stage-query/known-issues.html/index.html |  11 ++
 .../multi-stage-query/known-issues/index.html      |  37 +++++
 .../multi-stage-query/reference.html/index.html    |  11 ++
 docs/31.0.0/multi-stage-query/reference/index.html |  87 ++++++++++++
 .../multi-stage-query/security.html/index.html     |  11 ++
 docs/31.0.0/multi-stage-query/security/index.html  |  37 +++++
 docs/31.0.0/operations/alerts.html/index.html      |  11 ++
 docs/31.0.0/operations/alerts/index.html           |  26 ++++
 .../operations/api-reference.html/index.html       |  11 ++
 docs/31.0.0/operations/api-reference/index.html    |  11 ++
 docs/31.0.0/operations/auth-ldap.html/index.html   |  11 ++
 docs/31.0.0/operations/auth-ldap/index.html        |  27 ++++
 docs/31.0.0/operations/auth.html/index.html        |  11 ++
 docs/31.0.0/operations/auth/index.html             |  27 ++++
 .../basic-cluster-tuning.html/index.html           |  11 ++
 .../operations/basic-cluster-tuning/index.html     |  29 ++++
 .../clean-metadata-store.html/index.html           |  11 ++
 .../operations/clean-metadata-store/index.html     |  39 ++++++
 .../deep-storage-migration.html/index.html         |  11 ++
 .../operations/deep-storage-migration/index.html   |  29 ++++
 .../operations/druid-console.html/index.html       |  11 ++
 .../31.0.0/operations/dump-segment.html/index.html |  11 ++
 docs/31.0.0/operations/dump-segment/index.html     |  41 ++++++
 .../operations/durable-storage.html/index.html     |  11 ++
 docs/31.0.0/operations/durable-storage/index.html  |  31 ++++
 .../dynamic-config-provider.html/index.html        |  11 ++
 .../operations/dynamic-config-provider/index.html  |  26 ++++
 .../operations/export-metadata.html/index.html     |  11 ++
 docs/31.0.0/operations/export-metadata/index.html  |  27 ++++
 docs/31.0.0/operations/getting-started/index.html  |  11 ++
 .../operations/high-availability.html/index.html   |  11 ++
 .../31.0.0/operations/high-availability/index.html |  33 +++++
 .../operations/http-compression.html/index.html    |  11 ++
 docs/31.0.0/operations/http-compression/index.html |  26 ++++
 .../including-extensions.html/index.html           |  11 ++
 .../insert-segment-to-db.html/index.html           |  11 ++
 .../operations/insert-segment-to-db/index.html     |  38 +++++
 docs/31.0.0/operations/java.html/index.html        |  11 ++
 docs/31.0.0/operations/java/index.html             |  46 ++++++
 docs/31.0.0/operations/kubernetes.html/index.html  |  11 ++
 .../31.0.0/operations/kubernetes}/index.html       |  14 +-
 .../operations/management-uis.html/index.html      |  11 ++
 .../operations/metadata-migration.html/index.html  |  11 ++
 .../operations/metadata-migration/index.html       |  30 ++++
 docs/31.0.0/operations/metrics.html/index.html     |  11 ++
 docs/31.0.0/operations/metrics/index.html          |  33 +++++
 .../migrate-from-firehose.html/index.html          |  11 ++
 .../operations/migrate-from-firehose/index.html    |  27 ++++
 .../operations/mixed-workloads.html/index.html     |  11 ++
 docs/31.0.0/operations/mixed-workloads/index.html  |  51 +++++++
 .../31.0.0/operations/multitenancy.html/index.html |  11 ++
 .../31.0.0/operations/other-hadoop.html/index.html |  11 ++
 docs/31.0.0/operations/other-hadoop/index.html     |  53 +++++++
 .../operations/password-provider.html/index.html   |  11 ++
 .../31.0.0/operations/password-provider/index.html |  26 ++++
 .../operations/performance-faq.html/index.html     |  11 ++
 docs/31.0.0/operations/pull-deps.html/index.html   |  11 ++
 docs/31.0.0/operations/pull-deps/index.html        |  26 ++++
 .../operations/recommendations.html/index.html     |  11 ++
 .../operations/request-logging.html/index.html     |  11 ++
 docs/31.0.0/operations/request-logging/index.html  |  36 +++++
 .../operations/reset-cluster.html/index.html       |  11 ++
 docs/31.0.0/operations/reset-cluster/index.html    |  30 ++++
 .../operations/rolling-updates.html/index.html     |  11 ++
 docs/31.0.0/operations/rolling-updates/index.html  |  48 +++++++
 .../operations/rule-configuration.html/index.html  |  11 ++
 .../operations/rule-configuration/index.html       |  28 ++++
 .../operations/security-overview.html/index.html   |  11 ++
 .../31.0.0/operations/security-overview/index.html |  32 +++++
 .../operations/security-user-auth.html/index.html  |  11 ++
 .../operations/security-user-auth/index.html       |  33 +++++
 .../segment-optimization.html/index.html           |  11 ++
 .../operations/segment-optimization/index.html     |  59 ++++++++
 .../operations/single-server.html/index.html       |  11 ++
 docs/31.0.0/operations/single-server/index.html    |  29 ++++
 docs/31.0.0/operations/tls-support.html/index.html |  11 ++
 docs/31.0.0/operations/tls-support/index.html      |  41 ++++++
 .../use_sbt_to_build_fat_jar.html/index.html       |  11 ++
 .../operations/use_sbt_to_build_fat_jar/index.html |  26 ++++
 docs/31.0.0/operations/web-console.html/index.html |  11 ++
 docs/31.0.0/operations/web-console/index.html      |  52 +++++++
 docs/31.0.0/querying.html/index.html               |  11 ++
 docs/31.0.0/querying/aggregations.html/index.html  |  11 ++
 docs/31.0.0/querying/aggregations/index.html       |  43 ++++++
 docs/31.0.0/querying/arrays.html/index.html        |  11 ++
 docs/31.0.0/querying/arrays/index.html             |  38 +++++
 docs/31.0.0/querying/caching.html/index.html       |  11 ++
 docs/31.0.0/querying/caching/index.html            |  26 ++++
 docs/31.0.0/querying/datasource.html/index.html    |  11 ++
 docs/31.0.0/querying/datasource/index.html         |  92 ++++++++++++
 .../datasourcemetadataquery.html/index.html        |  11 ++
 .../querying/datasourcemetadataquery/index.html    |  28 ++++
 .../31.0.0/querying/dimensionspecs.html/index.html |  11 ++
 docs/31.0.0/querying/dimensionspecs/index.html     |  78 +++++++++++
 docs/31.0.0/querying/filters.html/index.html       |  11 ++
 docs/31.0.0/querying/filters/index.html            |  47 +++++++
 docs/31.0.0/querying/geo.html/index.html           |  11 ++
 docs/31.0.0/querying/geo/index.html                |  33 +++++
 docs/31.0.0/querying/granularities.html/index.html |  11 ++
 docs/31.0.0/querying/granularities/index.html      |  37 +++++
 docs/31.0.0/querying/groupbyquery.html/index.html  |  11 ++
 docs/31.0.0/querying/groupbyquery/index.html       |  80 +++++++++++
 docs/31.0.0/querying/having.html/index.html        |  11 ++
 docs/31.0.0/querying/having/index.html             |  35 +++++
 docs/31.0.0/querying/hll-old.html/index.html       |  11 ++
 docs/31.0.0/querying/hll-old/index.html            |  35 +++++
 docs/31.0.0/querying/index.html                    |  40 ++++++
 docs/31.0.0/querying/joins.html/index.html         |  11 ++
 docs/31.0.0/querying/joins/index.html              |  35 +++++
 .../kafka-extraction-namespace.html/index.html     |  11 ++
 .../querying/kafka-extraction-namespace/index.html |  26 ++++
 docs/31.0.0/querying/limitspec.html/index.html     |  11 ++
 docs/31.0.0/querying/limitspec/index.html          |  34 +++++
 .../querying/lookups-cached-global.html/index.html |  11 ++
 .../querying/lookups-cached-global/index.html      |  44 ++++++
 docs/31.0.0/querying/lookups.html/index.html       |  11 ++
 docs/31.0.0/querying/lookups/index.html            |  75 ++++++++++
 docs/31.0.0/querying/math-expr.html/index.html     |  11 ++
 docs/31.0.0/querying/math-expr/index.html          |  33 +++++
 .../multi-value-dimensions.html/index.html         |  11 ++
 .../querying/multi-value-dimensions/index.html     |  47 +++++++
 docs/31.0.0/querying/multitenancy.html/index.html  |  11 ++
 docs/31.0.0/querying/multitenancy/index.html       |  49 +++++++
 .../31.0.0/querying/nested-columns.html/index.html |  11 ++
 docs/31.0.0/querying/nested-columns/index.html     |  26 ++++
 docs/31.0.0/querying/optimizations.html/index.html |  11 ++
 .../querying/post-aggregations.html/index.html     |  11 ++
 docs/31.0.0/querying/post-aggregations/index.html  |  35 +++++
 docs/31.0.0/querying/query-context.html/index.html |  11 ++
 docs/31.0.0/querying/query-context/index.html      |  37 +++++
 .../querying/query-deep-storage.html/index.html    |  11 ++
 docs/31.0.0/querying/query-deep-storage/index.html |  26 ++++
 .../querying/query-execution.html/index.html       |  11 ++
 docs/31.0.0/querying/query-execution/index.html    |  66 +++++++++
 .../querying/query-processing.html/index.html      |  11 ++
 docs/31.0.0/querying/query-processing/index.html   |  26 ++++
 docs/31.0.0/querying/scan-query.html/index.html    |  11 ++
 docs/31.0.0/querying/scan-query/index.html         |  51 +++++++
 docs/31.0.0/querying/searchquery.html/index.html   |  11 ++
 docs/31.0.0/querying/searchquery/index.html        |  38 +++++
 .../querying/searchqueryspec.html/index.html       |  11 ++
 .../querying/segmentmetadataquery.html/index.html  |  11 ++
 .../querying/segmentmetadataquery/index.html       |  46 ++++++
 docs/31.0.0/querying/select-query.html/index.html  |  11 ++
 .../31.0.0/querying/select-query}/index.html       |  14 +-
 .../31.0.0/querying/sorting-orders.html/index.html |  11 ++
 docs/31.0.0/querying/sorting-orders/index.html     |  29 ++++
 .../querying/sql-aggregations.html/index.html      |  11 ++
 docs/31.0.0/querying/sql-aggregations/index.html   |  35 +++++
 docs/31.0.0/querying/sql-api.html/index.html       |  11 ++
 .../querying/sql-array-functions.html/index.html   |  11 ++
 .../31.0.0/querying/sql-array-functions/index.html |  31 ++++
 .../31.0.0/querying/sql-data-types.html/index.html |  11 ++
 docs/31.0.0/querying/sql-data-types/index.html     |  57 ++++++++
 docs/31.0.0/querying/sql-functions.html/index.html |  11 ++
 docs/31.0.0/querying/sql-functions/index.html      |  30 ++++
 docs/31.0.0/querying/sql-jdbc.html/index.html      |  11 ++
 .../querying/sql-json-functions.html/index.html    |  11 ++
 docs/31.0.0/querying/sql-json-functions/index.html |  26 ++++
 .../querying/sql-metadata-tables.html/index.html   |  11 ++
 .../31.0.0/querying/sql-metadata-tables/index.html |  37 +++++
 .../index.html                                     |  11 ++
 .../sql-multivalue-string-functions/index.html     |  33 +++++
 docs/31.0.0/querying/sql-operators.html/index.html |  11 ++
 docs/31.0.0/querying/sql-operators/index.html      |  30 ++++
 .../querying/sql-query-context.html/index.html     |  11 ++
 docs/31.0.0/querying/sql-query-context/index.html  |  29 ++++
 docs/31.0.0/querying/sql-scalar.html/index.html    |  11 ++
 docs/31.0.0/querying/sql-scalar/index.html         |  53 +++++++
 .../querying/sql-translation.html/index.html       |  11 ++
 docs/31.0.0/querying/sql-translation/index.html    |  88 ++++++++++++
 .../querying/sql-window-functions.html/index.html  |  11 ++
 .../querying/sql-window-functions/index.html       |  28 ++++
 docs/31.0.0/querying/sql.html/index.html           |  11 ++
 docs/31.0.0/querying/sql/index.html                |  81 +++++++++++
 .../querying/timeboundaryquery.html/index.html     |  11 ++
 docs/31.0.0/querying/timeboundaryquery/index.html  |  28 ++++
 .../querying/timeseriesquery.html/index.html       |  11 ++
 docs/31.0.0/querying/timeseriesquery/index.html    |  36 +++++
 .../querying/tips-good-queries.html/index.html     |  11 ++
 docs/31.0.0/querying/tips-good-queries/index.html  |  28 ++++
 .../31.0.0/querying/topnmetricspec.html/index.html |  11 ++
 docs/31.0.0/querying/topnmetricspec/index.html     |  28 ++++
 docs/31.0.0/querying/topnquery.html/index.html     |  11 ++
 docs/31.0.0/querying/topnquery/index.html          |  35 +++++
 .../querying/troubleshooting.html/index.html       |  11 ++
 docs/31.0.0/querying/troubleshooting/index.html    |  34 +++++
 docs/31.0.0/querying/using-caching.html/index.html |  11 ++
 docs/31.0.0/querying/using-caching/index.html      |  26 ++++
 .../querying/virtual-columns.html/index.html       |  11 ++
 docs/31.0.0/querying/virtual-columns/index.html    |  37 +++++
 .../migr-ansi-sql-null.html/index.html             |  11 ++
 .../release-info/migr-ansi-sql-null/index.html     |  46 ++++++
 .../migr-front-coded-dict.html/index.html          |  11 ++
 .../release-info/migr-front-coded-dict/index.html  |  35 +++++
 .../release-info/migr-mvd-array.html/index.html    |  11 ++
 docs/31.0.0/release-info/migr-mvd-array/index.html |  47 +++++++
 .../migr-subquery-limit.html/index.html            |  11 ++
 .../release-info/migr-subquery-limit/index.html    |  33 +++++
 .../release-info/migration-guide.html/index.html   |  11 ++
 .../31.0.0/release-info/migration-guide/index.html |  27 ++++
 .../release-info/release-notes.html/index.html     |  11 ++
 docs/31.0.0/release-info/release-notes/index.html  |  27 ++++
 .../release-info/upgrade-notes.html/index.html     |  11 ++
 docs/31.0.0/release-info/upgrade-notes/index.html  |  55 ++++++++
 docs/31.0.0/tutorials.html/index.html              |  11 ++
 .../booting-a-production-cluster.html/index.html   |  11 ++
 docs/31.0.0/tutorials/cluster.html/index.html      |  11 ++
 docs/31.0.0/tutorials/cluster/index.html           |  56 ++++++++
 docs/31.0.0/tutorials/docker.html/index.html       |  11 ++
 docs/31.0.0/tutorials/docker/index.html            |  28 ++++
 docs/31.0.0/tutorials/examples.html/index.html     |  11 ++
 docs/31.0.0/tutorials/firewall.html/index.html     |  11 ++
 docs/31.0.0/tutorials/index.html                   |  38 +++++
 .../tutorials/ingestion-streams.html/index.html    |  11 ++
 docs/31.0.0/tutorials/ingestion.html/index.html    |  11 ++
 docs/31.0.0/tutorials/quickstart.html/index.html   |  11 ++
 .../tutorial-a-first-look-at-druid.html/index.html |  11 ++
 .../tutorial-all-about-queries.html/index.html     |  11 ++
 .../tutorials/tutorial-append-data.html/index.html |  11 ++
 .../tutorials/tutorial-append-data/index.html      |  30 ++++
 .../tutorial-batch-hadoop.html/index.html          |  11 ++
 .../tutorials/tutorial-batch-hadoop/index.html     |  29 ++++
 .../tutorial-batch-native.html/index.html          |  11 ++
 .../tutorials/tutorial-batch-native/index.html     |  43 ++++++
 .../tutorials/tutorial-batch.html/index.html       |  11 ++
 docs/31.0.0/tutorials/tutorial-batch/index.html    |  30 ++++
 .../tutorials/tutorial-compaction.html/index.html  |  11 ++
 .../tutorials/tutorial-compaction/index.html       |  34 +++++
 .../tutorials/tutorial-delete-data.html/index.html |  11 ++
 .../tutorials/tutorial-delete-data/index.html      |  30 ++++
 .../tutorial-ingestion-spec.html/index.html        |  11 ++
 .../tutorials/tutorial-ingestion-spec/index.html   |  27 ++++
 .../31.0.0/tutorials/tutorial-jdbc.html/index.html |  11 ++
 docs/31.0.0/tutorials/tutorial-jdbc/index.html     |  26 ++++
 .../tutorials/tutorial-kafka.html/index.html       |  11 ++
 docs/31.0.0/tutorials/tutorial-kafka/index.html    |  27 ++++
 .../tutorial-kerberos-hadoop.html/index.html       |  11 ++
 .../tutorials/tutorial-kerberos-hadoop/index.html  |  30 ++++
 .../tutorials/tutorial-latest-by.html/index.html   |  11 ++
 .../31.0.0/tutorials/tutorial-latest-by/index.html |  26 ++++
 .../tutorial-loading-batch-data.html/index.html    |  11 ++
 .../index.html                                     |  11 ++
 .../tutorial-msq-convert-spec.html/index.html      |  11 ++
 .../tutorials/tutorial-msq-convert-spec/index.html |  29 ++++
 .../tutorials/tutorial-msq-extern.html/index.html  |  11 ++
 .../tutorials/tutorial-msq-extern/index.html       |  31 ++++
 .../tutorial-query-deep-storage.html/index.html    |  11 ++
 .../tutorial-query-deep-storage/index.html         |  26 ++++
 .../tutorials/tutorial-query.html/index.html       |  11 ++
 docs/31.0.0/tutorials/tutorial-query/index.html    |  47 +++++++
 .../tutorials/tutorial-retention.html/index.html   |  11 ++
 .../31.0.0/tutorials/tutorial-retention/index.html |  28 ++++
 .../tutorials/tutorial-rollup.html/index.html      |  11 ++
 docs/31.0.0/tutorials/tutorial-rollup/index.html   |  27 ++++
 .../tutorial-sketches-theta.html/index.html        |  11 ++
 .../tutorials/tutorial-sketches-theta/index.html   |  34 +++++
 .../tutorials/tutorial-sql-null.html/index.html    |  11 ++
 docs/31.0.0/tutorials/tutorial-sql-null/index.html |  30 ++++
 .../tutorial-sql-query-view.html/index.html        |  11 ++
 .../tutorials/tutorial-sql-query-view/index.html   |  26 ++++
 .../tutorial-the-druid-cluster.html/index.html     |  11 ++
 .../tutorials/tutorial-tranquility.html/index.html |  11 ++
 .../tutorials/tutorial-transform-spec/index.html   |  11 ++
 .../tutorials/tutorial-transform.html/index.html   |  11 ++
 .../31.0.0/tutorials/tutorial-transform/index.html |  26 ++++
 .../tutorial-unnest-arrays.html/index.html         |  11 ++
 .../tutorials/tutorial-unnest-arrays/index.html    |  26 ++++
 .../tutorials/tutorial-update-data.html/index.html |  11 ++
 .../tutorials/tutorial-update-data/index.html      |  34 +++++
 downloads/index.html                               |  12 +-
 druid-powered/index.html                           |  14 +-
 faq/index.html                                     |  10 +-
 index.html                                         |  10 +-
 js/FeaturedContent.js                              |  14 ++
 js/version.js                                      |   8 +-
 libraries/index.html                               |  10 +-
 licensing/index.html                               |  10 +-
 lunr-index-1729617601389.json                      |   1 +
 lunr-index.json                                    |   2 +-
 search-doc-1729617601389.json                      |   1 +
 search-doc.json                                    |   2 +-
 sitemap.xml                                        |   2 +-
 technology/index.html                              |  10 +-
 use-cases/index.html                               |  10 +-
 932 files changed, 14198 insertions(+), 155 deletions(-)

diff --git a/404.html b/404.html
index 483f820fc..a39c5f1f8 100644
--- a/404.html
+++ b/404.html
@@ -14,13 +14,13 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/images/druid-architecture-a2d14e8be60d586632471e97383e406c.svg b/assets/images/druid-architecture-a2d14e8be60d586632471e97383e406c.svg
new file mode 100644
index 000000000..9d0e67188
--- /dev/null
+++ b/assets/images/druid-architecture-a2d14e8be60d586632471e97383e406c.svg
@@ -0,0 +1,19 @@
+<!--
+  ~ 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.
+  -->
+  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="1967.24" height="872.83"><g transform="translate(5341 -19.5)" lucid:page-tab-id="0_0"><path d="M-5320 166a6 6 0 0 1 6-6h508a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6h-508a6 6 0 0 1-6-6zM-4640 166a6 6 0 0 1 6-6h508a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6h-508a6 6 0 0 1-6-6zM-3960 166a6 6 0 0 1 6-6h508a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6h-508a6 6 0 0 1-6-6z" stroke="#cfe4ff" stroke-width="2" fill="#cf [...]
\ No newline at end of file
diff --git a/assets/images/tutorial-theta-03-d396351338383bf3cbd248be97a7c9ae.png b/assets/images/tutorial-theta-03-d396351338383bf3cbd248be97a7c9ae.png
new file mode 100644
index 000000000..316bf7f0b
Binary files /dev/null and b/assets/images/tutorial-theta-03-d396351338383bf3cbd248be97a7c9ae.png differ
diff --git a/assets/images/tutorial-theta-04-7c498583c84f25374a035507a41592da.png b/assets/images/tutorial-theta-04-7c498583c84f25374a035507a41592da.png
new file mode 100644
index 000000000..21f383af6
Binary files /dev/null and b/assets/images/tutorial-theta-04-7c498583c84f25374a035507a41592da.png differ
diff --git a/assets/images/tutorial-theta-05-210059e731382527a704510b94d370d4.png b/assets/images/tutorial-theta-05-210059e731382527a704510b94d370d4.png
new file mode 100644
index 000000000..ec2c8df6d
Binary files /dev/null and b/assets/images/tutorial-theta-05-210059e731382527a704510b94d370d4.png differ
diff --git a/assets/images/tutorial-theta-06-4b588f7737377421937ed369bfe9a94e.png b/assets/images/tutorial-theta-06-4b588f7737377421937ed369bfe9a94e.png
new file mode 100644
index 000000000..4048aa238
Binary files /dev/null and b/assets/images/tutorial-theta-06-4b588f7737377421937ed369bfe9a94e.png differ
diff --git a/assets/images/tutorial-theta-07-8c74460cb2ed72066ca3b0b3470657e0.png b/assets/images/tutorial-theta-07-8c74460cb2ed72066ca3b0b3470657e0.png
new file mode 100644
index 000000000..369b5914a
Binary files /dev/null and b/assets/images/tutorial-theta-07-8c74460cb2ed72066ca3b0b3470657e0.png differ
diff --git a/assets/images/tutorial-theta-08-8d2ab89aef3d1661329ad060467e2f9b.png b/assets/images/tutorial-theta-08-8d2ab89aef3d1661329ad060467e2f9b.png
new file mode 100644
index 000000000..59a6bc051
Binary files /dev/null and b/assets/images/tutorial-theta-08-8d2ab89aef3d1661329ad060467e2f9b.png differ
diff --git a/assets/js/0126da28.77c840d5.js b/assets/js/0126da28.77c840d5.js
new file mode 100644
index 000000000..8e03ed93f
--- /dev/null
+++ b/assets/js/0126da28.77c840d5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7992],{14137:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0132476f.fcd5b735.js b/assets/js/0132476f.fcd5b735.js
new file mode 100644
index 000000000..66458fa17
--- /dev/null
+++ b/assets/js/0132476f.fcd5b735.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6641],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0224d2b5.f312b39f.js b/assets/js/0224d2b5.f312b39f.js
new file mode 100644
index 000000000..67ff36fb1
--- /dev/null
+++ b/assets/js/0224d2b5.f312b39f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6087],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>N});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/046c719a.2241b764.js b/assets/js/046c719a.2241b764.js
new file mode 100644
index 000000000..3ca2fa85b
--- /dev/null
+++ b/assets/js/046c719a.2241b764.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2511],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0476ae88.57b8aa20.js b/assets/js/0476ae88.57b8aa20.js
new file mode 100644
index 000000000..f7e4dd9a0
--- /dev/null
+++ b/assets/js/0476ae88.57b8aa20.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5903],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0537dde9.f389766f.js b/assets/js/0537dde9.f389766f.js
new file mode 100644
index 000000000..beda9b42a
--- /dev/null
+++ b/assets/js/0537dde9.f389766f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4341],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>y});var a=t(67294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/054fb2b1.9249b326.js b/assets/js/054fb2b1.9249b326.js
new file mode 100644
index 000000000..1ac8f53ea
--- /dev/null
+++ b/assets/js/054fb2b1.9249b326.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1683],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/05cdf9b1.50eede2c.js b/assets/js/05cdf9b1.50eede2c.js
new file mode 100644
index 000000000..d21eaae29
--- /dev/null
+++ b/assets/js/05cdf9b1.50eede2c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2115],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/06571176.520218ec.js b/assets/js/06571176.520218ec.js
new file mode 100644
index 000000000..afa0d7616
--- /dev/null
+++ b/assets/js/06571176.520218ec.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5617],{14137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>g});var o=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/069c0206.30652343.js b/assets/js/069c0206.30652343.js
new file mode 100644
index 000000000..a0207856c
--- /dev/null
+++ b/assets/js/069c0206.30652343.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6607],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var o=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function n(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/06d4d1e0.280a5035.js b/assets/js/06d4d1e0.280a5035.js
new file mode 100644
index 000000000..8b026c0d3
--- /dev/null
+++ b/assets/js/06d4d1e0.280a5035.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1671],{14137:(e,a,o)=>{o.d(a,{Zo:()=>u,kt:()=>f});var n=o(67294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function s(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var a [...]
\ No newline at end of file
diff --git a/assets/js/09c4e8dd.fe3b8cee.js b/assets/js/09c4e8dd.fe3b8cee.js
new file mode 100644
index 000000000..3aff2d5ef
--- /dev/null
+++ b/assets/js/09c4e8dd.fe3b8cee.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9293],{14137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0a756300.6cb48902.js b/assets/js/0a756300.6cb48902.js
new file mode 100644
index 000000000..45709605f
--- /dev/null
+++ b/assets/js/0a756300.6cb48902.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6738],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0a9a80dd.f42d309f.js b/assets/js/0a9a80dd.f42d309f.js
new file mode 100644
index 000000000..c3f2e4563
--- /dev/null
+++ b/assets/js/0a9a80dd.f42d309f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5339],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0a9bed85.52786743.js b/assets/js/0a9bed85.52786743.js
new file mode 100644
index 000000000..7413ccced
--- /dev/null
+++ b/assets/js/0a9bed85.52786743.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9750],{14137:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>f});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/0ae1c18e.a53ef94a.js b/assets/js/0ae1c18e.a53ef94a.js
new file mode 100644
index 000000000..bdd0735ef
--- /dev/null
+++ b/assets/js/0ae1c18e.a53ef94a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3660],{14137:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>N});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/0b33a7a0.2ef986ff.js b/assets/js/0b33a7a0.2ef986ff.js
new file mode 100644
index 000000000..03c8c0f22
--- /dev/null
+++ b/assets/js/0b33a7a0.2ef986ff.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5790],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0d3a0eb0.73da5a50.js b/assets/js/0d3a0eb0.73da5a50.js
new file mode 100644
index 000000000..22b6518dd
--- /dev/null
+++ b/assets/js/0d3a0eb0.73da5a50.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1274],{14137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/0d5d7249.c37b2805.js b/assets/js/0d5d7249.c37b2805.js
new file mode 100644
index 000000000..b058289b7
--- /dev/null
+++ b/assets/js/0d5d7249.c37b2805.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9411],{14137:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>h});var n=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/0fd352a7.817431a5.js b/assets/js/0fd352a7.817431a5.js
new file mode 100644
index 000000000..ae07b990d
--- /dev/null
+++ b/assets/js/0fd352a7.817431a5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8133],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>y});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/10e90abd.4cf6281f.js b/assets/js/10e90abd.4cf6281f.js
new file mode 100644
index 000000000..d1fd671d7
--- /dev/null
+++ b/assets/js/10e90abd.4cf6281f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9330],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/12ffe3d2.a824e1a4.js b/assets/js/12ffe3d2.a824e1a4.js
new file mode 100644
index 000000000..9ef9a11b8
--- /dev/null
+++ b/assets/js/12ffe3d2.a824e1a4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9971],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/13d6eb58.3e2d430a.js b/assets/js/13d6eb58.3e2d430a.js
new file mode 100644
index 000000000..8a7c0eecd
--- /dev/null
+++ b/assets/js/13d6eb58.3e2d430a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6797],{14137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>y});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/13ebb7f9.766f108c.js b/assets/js/13ebb7f9.766f108c.js
new file mode 100644
index 000000000..6034da175
--- /dev/null
+++ b/assets/js/13ebb7f9.766f108c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8572],{14137:(t,e,n)=>{n.d(e,{Zo:()=>m,kt:()=>g});var a=n(67294);function l(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/1901288f.3533458c.js b/assets/js/1901288f.3533458c.js
new file mode 100644
index 000000000..9ebd71962
--- /dev/null
+++ b/assets/js/1901288f.3533458c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[292],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/190295b3.3a8aea83.js b/assets/js/190295b3.3a8aea83.js
new file mode 100644
index 000000000..da9f1619e
--- /dev/null
+++ b/assets/js/190295b3.3a8aea83.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[879],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/198a5291.98f2509a.js b/assets/js/198a5291.98f2509a.js
new file mode 100644
index 000000000..b8aa80201
--- /dev/null
+++ b/assets/js/198a5291.98f2509a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2074],{14137:(e,r,t)=>{t.d(r,{Zo:()=>m,kt:()=>b});var n=t(67294);function i(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/1a4f3326.62322393.js b/assets/js/1a4f3326.62322393.js
new file mode 100644
index 000000000..927113dcb
--- /dev/null
+++ b/assets/js/1a4f3326.62322393.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1294],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/1b34ab8c.47caabb5.js b/assets/js/1b34ab8c.47caabb5.js
new file mode 100644
index 000000000..bb902ba67
--- /dev/null
+++ b/assets/js/1b34ab8c.47caabb5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5819],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/1cc92077.9b54717f.js b/assets/js/1cc92077.9b54717f.js
new file mode 100644
index 000000000..da425a86c
--- /dev/null
+++ b/assets/js/1cc92077.9b54717f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9415],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var i=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/1eb94bc7.e5dd32d4.js b/assets/js/1eb94bc7.e5dd32d4.js
new file mode 100644
index 000000000..ab32ff066
--- /dev/null
+++ b/assets/js/1eb94bc7.e5dd32d4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6997],{14137:(e,r,t)=>{t.d(r,{Zo:()=>d,kt:()=>p});var i=t(67294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);r&&(i=i.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,i)}return t}function a(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/1ed64048.35ac1b7f.js b/assets/js/1ed64048.35ac1b7f.js
new file mode 100644
index 000000000..af69e66b8
--- /dev/null
+++ b/assets/js/1ed64048.35ac1b7f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5412],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/1f9334a1.8c7ad34c.js b/assets/js/1f9334a1.8c7ad34c.js
new file mode 100644
index 000000000..4cdf67bb1
--- /dev/null
+++ b/assets/js/1f9334a1.8c7ad34c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3164],{14137:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>m});var n=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/1fd605f7.f47044b2.js b/assets/js/1fd605f7.f47044b2.js
new file mode 100644
index 000000000..213d0a5b9
--- /dev/null
+++ b/assets/js/1fd605f7.f47044b2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5803],{14137:(e,t,a)=>{a.d(t,{Zo:()=>l,kt:()=>h});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/206062c1.e5d09aec.js b/assets/js/206062c1.e5d09aec.js
new file mode 100644
index 000000000..2828d0bea
--- /dev/null
+++ b/assets/js/206062c1.e5d09aec.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[938],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>c});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/2078bf5c.e283fce4.js b/assets/js/2078bf5c.e283fce4.js
new file mode 100644
index 000000000..6fb82de62
--- /dev/null
+++ b/assets/js/2078bf5c.e283fce4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4598],{14137:(t,e,a)=>{a.d(e,{Zo:()=>s,kt:()=>c});var r=a(67294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function l(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/21c3723d.8771fff5.js b/assets/js/21c3723d.8771fff5.js
new file mode 100644
index 000000000..4b20026c4
--- /dev/null
+++ b/assets/js/21c3723d.8771fff5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3054],{14137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>u});var i=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/21ebf0b0.2fea056e.js b/assets/js/21ebf0b0.2fea056e.js
new file mode 100644
index 000000000..4e842284b
--- /dev/null
+++ b/assets/js/21ebf0b0.2fea056e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5814],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/24723d88.e5702ff3.js b/assets/js/24723d88.e5702ff3.js
new file mode 100644
index 000000000..27a7883e9
--- /dev/null
+++ b/assets/js/24723d88.e5702ff3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7859],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2483f1a4.38359184.js b/assets/js/2483f1a4.38359184.js
new file mode 100644
index 000000000..00158207c
--- /dev/null
+++ b/assets/js/2483f1a4.38359184.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6963],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>c});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/248dc532.81bb069d.js b/assets/js/248dc532.81bb069d.js
new file mode 100644
index 000000000..de73f2dd9
--- /dev/null
+++ b/assets/js/248dc532.81bb069d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2845],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/25b781f9.fe55bbda.js b/assets/js/25b781f9.fe55bbda.js
new file mode 100644
index 000000000..148401c3a
--- /dev/null
+++ b/assets/js/25b781f9.fe55bbda.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[167],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/25ecea31.463b2925.js b/assets/js/25ecea31.463b2925.js
new file mode 100644
index 000000000..9c92b16ea
--- /dev/null
+++ b/assets/js/25ecea31.463b2925.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1836],{14137:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>c});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function o(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/280f7273.de559405.js b/assets/js/280f7273.de559405.js
new file mode 100644
index 000000000..4b6269881
--- /dev/null
+++ b/assets/js/280f7273.de559405.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6061],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/28dc2723.7c0c90eb.js b/assets/js/28dc2723.7c0c90eb.js
new file mode 100644
index 000000000..118ebd54e
--- /dev/null
+++ b/assets/js/28dc2723.7c0c90eb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1727],{14137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>v});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/28ed6393.8e0c98be.js b/assets/js/28ed6393.8e0c98be.js
new file mode 100644
index 000000000..499f180e4
--- /dev/null
+++ b/assets/js/28ed6393.8e0c98be.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7121],{14137:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>c});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/28f1939a.bcab3d56.js b/assets/js/28f1939a.bcab3d56.js
new file mode 100644
index 000000000..d28b45315
--- /dev/null
+++ b/assets/js/28f1939a.bcab3d56.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8913],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/290e857d.3ad269fb.js b/assets/js/290e857d.3ad269fb.js
new file mode 100644
index 000000000..500f473e5
--- /dev/null
+++ b/assets/js/290e857d.3ad269fb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8755],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2950959e.13272ee2.js b/assets/js/2950959e.13272ee2.js
new file mode 100644
index 000000000..b8b7a34d3
--- /dev/null
+++ b/assets/js/2950959e.13272ee2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1764],{14137:(e,r,t)=>{t.d(r,{Zo:()=>l,kt:()=>h});var o=t(67294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/29bae509.4cb6d085.js b/assets/js/29bae509.4cb6d085.js
new file mode 100644
index 000000000..3b1a10d70
--- /dev/null
+++ b/assets/js/29bae509.4cb6d085.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2251],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2a38fc41.bec276a0.js b/assets/js/2a38fc41.bec276a0.js
new file mode 100644
index 000000000..1c6c6273f
--- /dev/null
+++ b/assets/js/2a38fc41.bec276a0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3338],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2a42e4ee.439fc8ab.js b/assets/js/2a42e4ee.439fc8ab.js
new file mode 100644
index 000000000..4e00aedbc
--- /dev/null
+++ b/assets/js/2a42e4ee.439fc8ab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7004],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>v});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2b40a5e4.6014b0aa.js b/assets/js/2b40a5e4.6014b0aa.js
new file mode 100644
index 000000000..2dac8430a
--- /dev/null
+++ b/assets/js/2b40a5e4.6014b0aa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4791],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2be65167.3e56ea52.js b/assets/js/2be65167.3e56ea52.js
new file mode 100644
index 000000000..1e9739d43
--- /dev/null
+++ b/assets/js/2be65167.3e56ea52.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6481],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2c6c7527.fcbe02f3.js b/assets/js/2c6c7527.fcbe02f3.js
new file mode 100644
index 000000000..3cc26737d
--- /dev/null
+++ b/assets/js/2c6c7527.fcbe02f3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8366],{14137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2d28cc78.0c613cd2.js b/assets/js/2d28cc78.0c613cd2.js
new file mode 100644
index 000000000..9b9dfe504
--- /dev/null
+++ b/assets/js/2d28cc78.0c613cd2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9919],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/2eebbc74.272f3255.js b/assets/js/2eebbc74.272f3255.js
new file mode 100644
index 000000000..75fb8040a
--- /dev/null
+++ b/assets/js/2eebbc74.272f3255.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6714],{14137:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>g});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function d(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/3033821a.d0df5dc2.js b/assets/js/3033821a.d0df5dc2.js
new file mode 100644
index 000000000..33a099724
--- /dev/null
+++ b/assets/js/3033821a.d0df5dc2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4782],{14137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/320332b3.66e82562.js b/assets/js/320332b3.66e82562.js
new file mode 100644
index 000000000..60161d1ff
--- /dev/null
+++ b/assets/js/320332b3.66e82562.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2943],{14137:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>m});var n=o(67294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/3332ec60.a106eed0.js b/assets/js/3332ec60.a106eed0.js
new file mode 100644
index 000000000..373260534
--- /dev/null
+++ b/assets/js/3332ec60.a106eed0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6640],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/33585a1a.f07e8248.js b/assets/js/33585a1a.f07e8248.js
new file mode 100644
index 000000000..791afd5ce
--- /dev/null
+++ b/assets/js/33585a1a.f07e8248.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8629],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/344d8d50.3eca4ce7.js b/assets/js/344d8d50.3eca4ce7.js
new file mode 100644
index 000000000..d02cc3839
--- /dev/null
+++ b/assets/js/344d8d50.3eca4ce7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2566],{14137:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>f});var i=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function a(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/34b2a980.bef13fe4.js b/assets/js/34b2a980.bef13fe4.js
new file mode 100644
index 000000000..4396c6e64
--- /dev/null
+++ b/assets/js/34b2a980.bef13fe4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6155],{14137:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>g});var a=o(67294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function d(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/351a67d3.3323ad53.js b/assets/js/351a67d3.3323ad53.js
new file mode 100644
index 000000000..cd214a954
--- /dev/null
+++ b/assets/js/351a67d3.3323ad53.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9258],{14137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>d});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/37f69834.4b59af64.js b/assets/js/37f69834.4b59af64.js
new file mode 100644
index 000000000..441ada324
--- /dev/null
+++ b/assets/js/37f69834.4b59af64.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8898],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>k});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/3970644f.7b6516cd.js b/assets/js/3970644f.7b6516cd.js
new file mode 100644
index 000000000..b60f7a13d
--- /dev/null
+++ b/assets/js/3970644f.7b6516cd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6226],{14137:(e,r,t)=>{t.d(r,{Zo:()=>l,kt:()=>m});var a=t(67294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/3b745e6a.d2a8b4da.js b/assets/js/3b745e6a.d2a8b4da.js
new file mode 100644
index 000000000..9b273b300
--- /dev/null
+++ b/assets/js/3b745e6a.d2a8b4da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2459],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/3c456dd9.ed0e605e.js b/assets/js/3c456dd9.ed0e605e.js
new file mode 100644
index 000000000..e5ed77f4f
--- /dev/null
+++ b/assets/js/3c456dd9.ed0e605e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7431],{14137:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>N});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/3ff67914.7fd2a559.js b/assets/js/3ff67914.7fd2a559.js
new file mode 100644
index 000000000..d74eccdc7
--- /dev/null
+++ b/assets/js/3ff67914.7fd2a559.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2144],{14137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/418ca9e4.8f5b0b40.js b/assets/js/418ca9e4.8f5b0b40.js
new file mode 100644
index 000000000..1ee1eb730
--- /dev/null
+++ b/assets/js/418ca9e4.8f5b0b40.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1483],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>N});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/42622719.6df39528.js b/assets/js/42622719.6df39528.js
new file mode 100644
index 000000000..2a2ce799a
--- /dev/null
+++ b/assets/js/42622719.6df39528.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5349],{14137:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>h});var a=t(67294);function s(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/42e0f233.dcf5859c.js b/assets/js/42e0f233.dcf5859c.js
new file mode 100644
index 000000000..18a238bd2
--- /dev/null
+++ b/assets/js/42e0f233.dcf5859c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3738],{14137:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>N});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/432e53c1.52138141.js b/assets/js/432e53c1.52138141.js
new file mode 100644
index 000000000..b8bbeb21d
--- /dev/null
+++ b/assets/js/432e53c1.52138141.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8940],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/4351236e.40ed4825.js b/assets/js/4351236e.40ed4825.js
new file mode 100644
index 000000000..dc4ee5369
--- /dev/null
+++ b/assets/js/4351236e.40ed4825.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6662],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/439c7825.52327bc0.js b/assets/js/439c7825.52327bc0.js
new file mode 100644
index 000000000..3f21038dd
--- /dev/null
+++ b/assets/js/439c7825.52327bc0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5529],{14137:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>k});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/43bd2df9.1c6a8bbc.js b/assets/js/43bd2df9.1c6a8bbc.js
new file mode 100644
index 000000000..796e3cc04
--- /dev/null
+++ b/assets/js/43bd2df9.1c6a8bbc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8945],{14137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>h});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/441583bd.2983c8f4.js b/assets/js/441583bd.2983c8f4.js
new file mode 100644
index 000000000..33a2a393f
--- /dev/null
+++ b/assets/js/441583bd.2983c8f4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1424],{14137:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/44cddcd5.c7b01201.js b/assets/js/44cddcd5.c7b01201.js
new file mode 100644
index 000000000..9311d9f46
--- /dev/null
+++ b/assets/js/44cddcd5.c7b01201.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4292],{14137:(e,r,n)=>{n.d(r,{Zo:()=>c,kt:()=>g});var t=n(67294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function a(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/45c6b677.886054e6.js b/assets/js/45c6b677.886054e6.js
new file mode 100644
index 000000000..e864cdd3b
--- /dev/null
+++ b/assets/js/45c6b677.886054e6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[770],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/467bdf77.8efbc434.js b/assets/js/467bdf77.8efbc434.js
new file mode 100644
index 000000000..116522d21
--- /dev/null
+++ b/assets/js/467bdf77.8efbc434.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4541],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/497407da.dec91f7c.js b/assets/js/497407da.dec91f7c.js
new file mode 100644
index 000000000..2bf1321ec
--- /dev/null
+++ b/assets/js/497407da.dec91f7c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8020],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/49a4d130.1d3bd5a6.js b/assets/js/49a4d130.1d3bd5a6.js
new file mode 100644
index 000000000..8f1942a64
--- /dev/null
+++ b/assets/js/49a4d130.1d3bd5a6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7016],{14137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>c});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/4ac46171.fefc4694.js b/assets/js/4ac46171.fefc4694.js
new file mode 100644
index 000000000..1786f1d9f
--- /dev/null
+++ b/assets/js/4ac46171.fefc4694.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5694],{14137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/4b566a62.0515e8cb.js b/assets/js/4b566a62.0515e8cb.js
new file mode 100644
index 000000000..1efa842a1
--- /dev/null
+++ b/assets/js/4b566a62.0515e8cb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[469],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>h});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function p(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/4ca66415.a3e23b3e.js b/assets/js/4ca66415.a3e23b3e.js
new file mode 100644
index 000000000..9a828cda4
--- /dev/null
+++ b/assets/js/4ca66415.a3e23b3e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3620],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/4cd43d5a.e6603390.js b/assets/js/4cd43d5a.e6603390.js
new file mode 100644
index 000000000..15dfa7299
--- /dev/null
+++ b/assets/js/4cd43d5a.e6603390.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3885],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/4ea278cc.a582a20a.js b/assets/js/4ea278cc.a582a20a.js
new file mode 100644
index 000000000..5f020a0ea
--- /dev/null
+++ b/assets/js/4ea278cc.a582a20a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9885],{14137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/4ec2b9ab.ed40cfa3.js b/assets/js/4ec2b9ab.ed40cfa3.js
new file mode 100644
index 000000000..d2815de57
--- /dev/null
+++ b/assets/js/4ec2b9ab.ed40cfa3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5336],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/4ee453ab.f6e4ff1e.js b/assets/js/4ee453ab.f6e4ff1e.js
new file mode 100644
index 000000000..92e5292a7
--- /dev/null
+++ b/assets/js/4ee453ab.f6e4ff1e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2734],{14137:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>g});var a=t(67294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/4eef587c.6b16eb7c.js b/assets/js/4eef587c.6b16eb7c.js
new file mode 100644
index 000000000..6bb27224d
--- /dev/null
+++ b/assets/js/4eef587c.6b16eb7c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6687],{14137:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>g});var n=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/515e4638.387ff843.js b/assets/js/515e4638.387ff843.js
new file mode 100644
index 000000000..08544a8e8
--- /dev/null
+++ b/assets/js/515e4638.387ff843.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9447],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>N});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/538ed93a.0126f518.js b/assets/js/538ed93a.0126f518.js
new file mode 100644
index 000000000..278bb5eaa
--- /dev/null
+++ b/assets/js/538ed93a.0126f518.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6486],{14137:(e,a,n)=>{n.d(a,{Zo:()=>u,kt:()=>y});var r=n(67294);function t(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function l(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var a [...]
\ No newline at end of file
diff --git a/assets/js/541ad25b.d688974e.js b/assets/js/541ad25b.d688974e.js
new file mode 100644
index 000000000..5fb729caf
--- /dev/null
+++ b/assets/js/541ad25b.d688974e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2362],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/54b9cc5c.84d37c3d.js b/assets/js/54b9cc5c.84d37c3d.js
new file mode 100644
index 000000000..5ff680595
--- /dev/null
+++ b/assets/js/54b9cc5c.84d37c3d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3813],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>c});var a=t(67294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/564c1fad.83b0aad6.js b/assets/js/564c1fad.83b0aad6.js
new file mode 100644
index 000000000..dc1de459b
--- /dev/null
+++ b/assets/js/564c1fad.83b0aad6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1250],{14137:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>h});var n=t(67294);function i(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/5666aa6c.f5ff14d5.js b/assets/js/5666aa6c.f5ff14d5.js
new file mode 100644
index 000000000..551865cff
--- /dev/null
+++ b/assets/js/5666aa6c.f5ff14d5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1298],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/56727f7d.a21e19ad.js b/assets/js/56727f7d.a21e19ad.js
new file mode 100644
index 000000000..01f78d247
--- /dev/null
+++ b/assets/js/56727f7d.a21e19ad.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5520],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/56765d65.5a090492.js b/assets/js/56765d65.5a090492.js
new file mode 100644
index 000000000..3a1c954a2
--- /dev/null
+++ b/assets/js/56765d65.5a090492.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3679],{14137:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>y});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/5775dce0.e187a2b7.js b/assets/js/5775dce0.e187a2b7.js
new file mode 100644
index 000000000..8a6b455a9
--- /dev/null
+++ b/assets/js/5775dce0.e187a2b7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4278],{14137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>c});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/5925c818.b4f4535a.js b/assets/js/5925c818.b4f4535a.js
new file mode 100644
index 000000000..4dcf7601a
--- /dev/null
+++ b/assets/js/5925c818.b4f4535a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4980],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var a=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/5a3faebd.6470a74b.js b/assets/js/5a3faebd.6470a74b.js
new file mode 100644
index 000000000..217ff4268
--- /dev/null
+++ b/assets/js/5a3faebd.6470a74b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[230],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/5b55a31e.8703a718.js b/assets/js/5b55a31e.8703a718.js
new file mode 100644
index 000000000..64d411554
--- /dev/null
+++ b/assets/js/5b55a31e.8703a718.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2323],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/5bc876c1.84978686.js b/assets/js/5bc876c1.84978686.js
new file mode 100644
index 000000000..4228643ba
--- /dev/null
+++ b/assets/js/5bc876c1.84978686.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6658],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/5bcd0a3f.684cafca.js b/assets/js/5bcd0a3f.684cafca.js
new file mode 100644
index 000000000..bff9216bd
--- /dev/null
+++ b/assets/js/5bcd0a3f.684cafca.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1431],{14137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/5d06d220.b5734ef7.js b/assets/js/5d06d220.b5734ef7.js
new file mode 100644
index 000000000..997ad1c9c
--- /dev/null
+++ b/assets/js/5d06d220.b5734ef7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[863],{14137:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>g});var a=t(67294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n= [...]
\ No newline at end of file
diff --git a/assets/js/5e1f1f82.5e3e36f1.js b/assets/js/5e1f1f82.5e3e36f1.js
new file mode 100644
index 000000000..d71a41b94
--- /dev/null
+++ b/assets/js/5e1f1f82.5e3e36f1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4526],{14137:(e,a,r)=>{r.d(a,{Zo:()=>p,kt:()=>g});var t=r(67294);function n(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function l(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,t)}return r}function i(e){for(var a [...]
\ No newline at end of file
diff --git a/assets/js/5e719299.692b8ee0.js b/assets/js/5e719299.692b8ee0.js
new file mode 100644
index 000000000..17182129c
--- /dev/null
+++ b/assets/js/5e719299.692b8ee0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3846],{14137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/6062.37a11f44.js b/assets/js/6062.37a11f44.js
new file mode 100644
index 000000000..c8926b310
--- /dev/null
+++ b/assets/js/6062.37a11f44.js
@@ -0,0 +1,2 @@
+/*! For license information please see 6062.37a11f44.js.LICENSE.txt */
+(self.webpackChunk=self.webpackChunk||[]).push([[6062],{17967:(t,e)=>{"use strict";e.Nm=e.Rq=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,i=/&(newline|tab);/gi,a=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,s=/^.+(:|&colon;)/gim,o=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;var c,l=(c=t,c.replace(a,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(i,"").replace(a,"").trim();if(!l)return e.Rq;if(function(t){retu [...]
\ No newline at end of file
diff --git a/assets/js/6062.37a11f44.js.LICENSE.txt b/assets/js/6062.37a11f44.js.LICENSE.txt
new file mode 100644
index 000000000..f253ee25a
--- /dev/null
+++ b/assets/js/6062.37a11f44.js.LICENSE.txt
@@ -0,0 +1,9 @@
+/*!
+   * Wait for document loaded before starting the execution
+   */
+
+/*! @license DOMPurify 2.4.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.3/LICENSE */
+
+/*! Check if previously processed */
+
+/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
diff --git a/assets/js/60972e40.86544abb.js b/assets/js/60972e40.86544abb.js
new file mode 100644
index 000000000..a675398a7
--- /dev/null
+++ b/assets/js/60972e40.86544abb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4310],{14137:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>g});var o=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/614de8bb.83dec42c.js b/assets/js/614de8bb.83dec42c.js
new file mode 100644
index 000000000..c09fc9dba
--- /dev/null
+++ b/assets/js/614de8bb.83dec42c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7967],{14137:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>m});var n=t(67294);function i(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/62b4e539.ec1aa628.js b/assets/js/62b4e539.ec1aa628.js
new file mode 100644
index 000000000..9459e2c8d
--- /dev/null
+++ b/assets/js/62b4e539.ec1aa628.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1784],{14137:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>k});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/63bb84bc.f3761fb3.js b/assets/js/63bb84bc.f3761fb3.js
new file mode 100644
index 000000000..84a6b7fb6
--- /dev/null
+++ b/assets/js/63bb84bc.f3761fb3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9630],{14137:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/644780f0.b860810f.js b/assets/js/644780f0.b860810f.js
new file mode 100644
index 000000000..1050a3683
--- /dev/null
+++ b/assets/js/644780f0.b860810f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6069],{14137:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>f});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/64e9eba0.1aaabae3.js b/assets/js/64e9eba0.1aaabae3.js
new file mode 100644
index 000000000..c34e6be8a
--- /dev/null
+++ b/assets/js/64e9eba0.1aaabae3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6847],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/65a4e06a.853074ed.js b/assets/js/65a4e06a.853074ed.js
new file mode 100644
index 000000000..f88db129f
--- /dev/null
+++ b/assets/js/65a4e06a.853074ed.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6537],{14137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>h});var n=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/665301ab.9fbded24.js b/assets/js/665301ab.9fbded24.js
new file mode 100644
index 000000000..5b762358c
--- /dev/null
+++ b/assets/js/665301ab.9fbded24.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3065],{14137:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>g});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function o(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/66a7be61.ed4b8b3b.js b/assets/js/66a7be61.ed4b8b3b.js
new file mode 100644
index 000000000..a84760c2d
--- /dev/null
+++ b/assets/js/66a7be61.ed4b8b3b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8205],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>c});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/66c5cf64.d5704900.js b/assets/js/66c5cf64.d5704900.js
new file mode 100644
index 000000000..7d2de7c01
--- /dev/null
+++ b/assets/js/66c5cf64.d5704900.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9518],{14137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>m});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/66f9cb8d.19381efe.js b/assets/js/66f9cb8d.19381efe.js
new file mode 100644
index 000000000..cbc4d7c22
--- /dev/null
+++ b/assets/js/66f9cb8d.19381efe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2382],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/682d83b2.c249d4c1.js b/assets/js/682d83b2.c249d4c1.js
new file mode 100644
index 000000000..fde64839c
--- /dev/null
+++ b/assets/js/682d83b2.c249d4c1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5544],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/68df3730.c83f715c.js b/assets/js/68df3730.c83f715c.js
new file mode 100644
index 000000000..e267ddeaf
--- /dev/null
+++ b/assets/js/68df3730.c83f715c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8249],{14137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var a=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/69e39989.9ce5fb84.js b/assets/js/69e39989.9ce5fb84.js
new file mode 100644
index 000000000..d5de003a1
--- /dev/null
+++ b/assets/js/69e39989.9ce5fb84.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1381],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/69eeee49.6c4f06e3.js b/assets/js/69eeee49.6c4f06e3.js
new file mode 100644
index 000000000..2fbc20685
--- /dev/null
+++ b/assets/js/69eeee49.6c4f06e3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5582],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/6bb07e9b.05c2df86.js b/assets/js/6bb07e9b.05c2df86.js
new file mode 100644
index 000000000..f53a9f323
--- /dev/null
+++ b/assets/js/6bb07e9b.05c2df86.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4208],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/6bf94788.4c652acb.js b/assets/js/6bf94788.4c652acb.js
new file mode 100644
index 000000000..6bdc1ebdd
--- /dev/null
+++ b/assets/js/6bf94788.4c652acb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2046],{14137:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>h});var a=t(67294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/6cac1ea5.2d201188.js b/assets/js/6cac1ea5.2d201188.js
new file mode 100644
index 000000000..f5059aea5
--- /dev/null
+++ b/assets/js/6cac1ea5.2d201188.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3672],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/6dcb683d.ec5a2790.js b/assets/js/6dcb683d.ec5a2790.js
new file mode 100644
index 000000000..acc014394
--- /dev/null
+++ b/assets/js/6dcb683d.ec5a2790.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2085],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/6dd29f52.58ec158c.js b/assets/js/6dd29f52.58ec158c.js
new file mode 100644
index 000000000..0b0854c04
--- /dev/null
+++ b/assets/js/6dd29f52.58ec158c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3752],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/7051c27f.e01a6a78.js b/assets/js/7051c27f.e01a6a78.js
new file mode 100644
index 000000000..0da77be47
--- /dev/null
+++ b/assets/js/7051c27f.e01a6a78.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4840],{14137:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>f});var o=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/7086ce60.5ae4e217.js b/assets/js/7086ce60.5ae4e217.js
new file mode 100644
index 000000000..9c0b9f118
--- /dev/null
+++ b/assets/js/7086ce60.5ae4e217.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7837],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/715dc3e9.5d6f2160.js b/assets/js/715dc3e9.5d6f2160.js
new file mode 100644
index 000000000..104794f1f
--- /dev/null
+++ b/assets/js/715dc3e9.5d6f2160.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6944],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var a=n(67294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/718556eb.c400cae3.js b/assets/js/718556eb.c400cae3.js
new file mode 100644
index 000000000..27f2ec4ef
--- /dev/null
+++ b/assets/js/718556eb.c400cae3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7569],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/71ef02f6.559cd38f.js b/assets/js/71ef02f6.559cd38f.js
new file mode 100644
index 000000000..697bc70ab
--- /dev/null
+++ b/assets/js/71ef02f6.559cd38f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7681],{14137:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var i=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/72995293.2031dca1.js b/assets/js/72995293.2031dca1.js
new file mode 100644
index 000000000..ba5caf454
--- /dev/null
+++ b/assets/js/72995293.2031dca1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2879],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/72ea40d5.84eee236.js b/assets/js/72ea40d5.84eee236.js
new file mode 100644
index 000000000..5cc49978d
--- /dev/null
+++ b/assets/js/72ea40d5.84eee236.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3882],{14137:(e,n,a)=>{a.d(n,{Zo:()=>p,kt:()=>d});var r=a(67294);function t(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/744b9652.4921942d.js b/assets/js/744b9652.4921942d.js
new file mode 100644
index 000000000..f5a5f607e
--- /dev/null
+++ b/assets/js/744b9652.4921942d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6374],{14137:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>k});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/746c1c24.37481a2e.js b/assets/js/746c1c24.37481a2e.js
new file mode 100644
index 000000000..5917a8dce
--- /dev/null
+++ b/assets/js/746c1c24.37481a2e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9203],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>v});var r=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/75a92c0e.37cf5411.js b/assets/js/75a92c0e.37cf5411.js
new file mode 100644
index 000000000..bed8ffbb1
--- /dev/null
+++ b/assets/js/75a92c0e.37cf5411.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4500],{14137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>d});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/769b330b.288cb7b0.js b/assets/js/769b330b.288cb7b0.js
new file mode 100644
index 000000000..46c7e6a95
--- /dev/null
+++ b/assets/js/769b330b.288cb7b0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3278],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/779b8f0d.e0cfacc4.js b/assets/js/779b8f0d.e0cfacc4.js
new file mode 100644
index 000000000..b426005f2
--- /dev/null
+++ b/assets/js/779b8f0d.e0cfacc4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1913],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/78ba5bac.c5df94b5.js b/assets/js/78ba5bac.c5df94b5.js
new file mode 100644
index 000000000..3512f8035
--- /dev/null
+++ b/assets/js/78ba5bac.c5df94b5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8579],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/7a0f2acd.8191d413.js b/assets/js/7a0f2acd.8191d413.js
new file mode 100644
index 000000000..0cc5c0663
--- /dev/null
+++ b/assets/js/7a0f2acd.8191d413.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8764],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var a=t(67294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/7a794a65.b5f60004.js b/assets/js/7a794a65.b5f60004.js
new file mode 100644
index 000000000..e4207fae1
--- /dev/null
+++ b/assets/js/7a794a65.b5f60004.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1729],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>N});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/7a7d23e6.1807d09d.js b/assets/js/7a7d23e6.1807d09d.js
new file mode 100644
index 000000000..ea47e70ef
--- /dev/null
+++ b/assets/js/7a7d23e6.1807d09d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6383],{14137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/7d7765dc.32d928de.js b/assets/js/7d7765dc.32d928de.js
new file mode 100644
index 000000000..d0bde9fad
--- /dev/null
+++ b/assets/js/7d7765dc.32d928de.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1031],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var i=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/7fa11fd4.fa11883d.js b/assets/js/7fa11fd4.fa11883d.js
new file mode 100644
index 000000000..d5b2b961e
--- /dev/null
+++ b/assets/js/7fa11fd4.fa11883d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2924],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/7fd15237.0881b1c2.js b/assets/js/7fd15237.0881b1c2.js
new file mode 100644
index 000000000..1435ff02c
--- /dev/null
+++ b/assets/js/7fd15237.0881b1c2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5012],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/81d5f8af.fc5d6cbc.js b/assets/js/81d5f8af.fc5d6cbc.js
new file mode 100644
index 000000000..224dcd4dc
--- /dev/null
+++ b/assets/js/81d5f8af.fc5d6cbc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9738],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/82cea77e.ebbd7e09.js b/assets/js/82cea77e.ebbd7e09.js
new file mode 100644
index 000000000..4e9e11216
--- /dev/null
+++ b/assets/js/82cea77e.ebbd7e09.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4195],{14137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/8374b51c.4c488d39.js b/assets/js/8374b51c.4c488d39.js
new file mode 100644
index 000000000..f598eefd2
--- /dev/null
+++ b/assets/js/8374b51c.4c488d39.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8743],{14137:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>y});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/870b135e.686c968d.js b/assets/js/870b135e.686c968d.js
new file mode 100644
index 000000000..780f614de
--- /dev/null
+++ b/assets/js/870b135e.686c968d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5099],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/88b265f2.df8ae23d.js b/assets/js/88b265f2.df8ae23d.js
new file mode 100644
index 000000000..ec49d4663
--- /dev/null
+++ b/assets/js/88b265f2.df8ae23d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1523],{14137:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>u});var i=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/895b9791.5c441336.js b/assets/js/895b9791.5c441336.js
new file mode 100644
index 000000000..8ae7df93d
--- /dev/null
+++ b/assets/js/895b9791.5c441336.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5876],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/8a0de0d1.c6a03e79.js b/assets/js/8a0de0d1.c6a03e79.js
new file mode 100644
index 000000000..f62e5ba47
--- /dev/null
+++ b/assets/js/8a0de0d1.c6a03e79.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1273],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/8a0fda3a.7973bec5.js b/assets/js/8a0fda3a.7973bec5.js
new file mode 100644
index 000000000..e263cb37c
--- /dev/null
+++ b/assets/js/8a0fda3a.7973bec5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5907],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/8c79d4ad.5c945760.js b/assets/js/8c79d4ad.5c945760.js
new file mode 100644
index 000000000..47d27ca94
--- /dev/null
+++ b/assets/js/8c79d4ad.5c945760.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6392],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/8db1ddfb.24c916a1.js b/assets/js/8db1ddfb.24c916a1.js
new file mode 100644
index 000000000..481b0a21b
--- /dev/null
+++ b/assets/js/8db1ddfb.24c916a1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[695],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/8e101272.4301da80.js b/assets/js/8e101272.4301da80.js
new file mode 100644
index 000000000..64118c3e1
--- /dev/null
+++ b/assets/js/8e101272.4301da80.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6716],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>N});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/8ff86064.225988f1.js b/assets/js/8ff86064.225988f1.js
new file mode 100644
index 000000000..02741a726
--- /dev/null
+++ b/assets/js/8ff86064.225988f1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2091],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/91e11e1a.3248ac60.js b/assets/js/91e11e1a.3248ac60.js
new file mode 100644
index 000000000..161ad4d9a
--- /dev/null
+++ b/assets/js/91e11e1a.3248ac60.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2497],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/935f2afb.4fdcd012.js b/assets/js/935f2afb.4fdcd012.js
new file mode 100644
index 000000000..f820d912d
--- /dev/null
+++ b/assets/js/935f2afb.4fdcd012.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Introduction to Apache Druid","href":"/docs/31.0.0/design/","docId":"design/index"},{"type":"category","label":"Getting started","items":[{"type":"link","label":"Single server deployment","href":" [...]
\ No newline at end of file
diff --git a/assets/js/9535633b.b954e841.js b/assets/js/9535633b.b954e841.js
new file mode 100644
index 000000000..7cd1f0244
--- /dev/null
+++ b/assets/js/9535633b.b954e841.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[988],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>c});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/95bd9a60.c7e4f5a0.js b/assets/js/95bd9a60.c7e4f5a0.js
new file mode 100644
index 000000000..e6646c199
--- /dev/null
+++ b/assets/js/95bd9a60.c7e4f5a0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2246],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>N});var l=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/96f9f5eb.82c9d2e9.js b/assets/js/96f9f5eb.82c9d2e9.js
new file mode 100644
index 000000000..7c759cd33
--- /dev/null
+++ b/assets/js/96f9f5eb.82c9d2e9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8212],{14137:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var r=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/971bc6a3.e2aa07a2.js b/assets/js/971bc6a3.e2aa07a2.js
new file mode 100644
index 000000000..11f713dd3
--- /dev/null
+++ b/assets/js/971bc6a3.e2aa07a2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5418],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>g});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/9979c633.cf5d5171.js b/assets/js/9979c633.cf5d5171.js
new file mode 100644
index 000000000..526f44d44
--- /dev/null
+++ b/assets/js/9979c633.cf5d5171.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6167],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>k});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/99c0feaa.e5b18e7f.js b/assets/js/99c0feaa.e5b18e7f.js
new file mode 100644
index 000000000..377497827
--- /dev/null
+++ b/assets/js/99c0feaa.e5b18e7f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[375],{14137:(e,r,t)=>{t.d(r,{Zo:()=>l,kt:()=>m});var n=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r= [...]
\ No newline at end of file
diff --git a/assets/js/9b0eeea6.7c71101e.js b/assets/js/9b0eeea6.7c71101e.js
new file mode 100644
index 000000000..0ae397346
--- /dev/null
+++ b/assets/js/9b0eeea6.7c71101e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7137],{14137:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>m});var t=r(67294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/9d131ba7.d63e50c8.js b/assets/js/9d131ba7.d63e50c8.js
new file mode 100644
index 000000000..8f48d2af0
--- /dev/null
+++ b/assets/js/9d131ba7.d63e50c8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7612],{14137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/9d8a2b80.4e3185f6.js b/assets/js/9d8a2b80.4e3185f6.js
new file mode 100644
index 000000000..5ba51e78f
--- /dev/null
+++ b/assets/js/9d8a2b80.4e3185f6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3112],{14137:(e,n,a)=>{a.d(n,{Zo:()=>u,kt:()=>v});var t=a(67294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function i(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/9f3a9cd1.c7edbd8b.js b/assets/js/9f3a9cd1.c7edbd8b.js
new file mode 100644
index 000000000..1a97aa576
--- /dev/null
+++ b/assets/js/9f3a9cd1.c7edbd8b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1737],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>k});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/9fe1491d.145653fe.js b/assets/js/9fe1491d.145653fe.js
new file mode 100644
index 000000000..731a2bc7e
--- /dev/null
+++ b/assets/js/9fe1491d.145653fe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8083],{14137:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>h});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a059b30c.8504c696.js b/assets/js/a059b30c.8504c696.js
new file mode 100644
index 000000000..2eba19762
--- /dev/null
+++ b/assets/js/a059b30c.8504c696.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4173],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a0de97c3.fcee7895.js b/assets/js/a0de97c3.fcee7895.js
new file mode 100644
index 000000000..14c773806
--- /dev/null
+++ b/assets/js/a0de97c3.fcee7895.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5808],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a108b7b4.981df4cc.js b/assets/js/a108b7b4.981df4cc.js
new file mode 100644
index 000000000..066a99eda
--- /dev/null
+++ b/assets/js/a108b7b4.981df4cc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3941],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a136cf5a.108f2336.js b/assets/js/a136cf5a.108f2336.js
new file mode 100644
index 000000000..1fd514c48
--- /dev/null
+++ b/assets/js/a136cf5a.108f2336.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4545],{14137:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>N});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/a16a64b6.a0273fe9.js b/assets/js/a16a64b6.a0273fe9.js
new file mode 100644
index 000000000..8f3d43908
--- /dev/null
+++ b/assets/js/a16a64b6.a0273fe9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3559],{14137:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a2dc6acc.a72e453c.js b/assets/js/a2dc6acc.a72e453c.js
new file mode 100644
index 000000000..a053f3d1e
--- /dev/null
+++ b/assets/js/a2dc6acc.a72e453c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1850],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>N});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a34364b0.0caa52b2.js b/assets/js/a34364b0.0caa52b2.js
new file mode 100644
index 000000000..5569ecd1b
--- /dev/null
+++ b/assets/js/a34364b0.0caa52b2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5610],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a345ae17.c68292ea.js b/assets/js/a345ae17.c68292ea.js
new file mode 100644
index 000000000..108161757
--- /dev/null
+++ b/assets/js/a345ae17.c68292ea.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9819],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>k});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a488a371.83179722.js b/assets/js/a488a371.83179722.js
new file mode 100644
index 000000000..fdb82ffe8
--- /dev/null
+++ b/assets/js/a488a371.83179722.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6627],{83769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/a5111ec8.57954ee3.js b/assets/js/a5111ec8.57954ee3.js
new file mode 100644
index 000000000..ff3559030
--- /dev/null
+++ b/assets/js/a5111ec8.57954ee3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5577],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a61022db.67a0e4c7.js b/assets/js/a61022db.67a0e4c7.js
new file mode 100644
index 000000000..92d787f9a
--- /dev/null
+++ b/assets/js/a61022db.67a0e4c7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9804],{14137:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>m});var t=r(67294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function s(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/a6204a76.069a3504.js b/assets/js/a6204a76.069a3504.js
new file mode 100644
index 000000000..4a52afe3f
--- /dev/null
+++ b/assets/js/a6204a76.069a3504.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3775],{14137:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>h});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a62f1867.cd0b2e91.js b/assets/js/a62f1867.cd0b2e91.js
new file mode 100644
index 000000000..bfc15303d
--- /dev/null
+++ b/assets/js/a62f1867.cd0b2e91.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8401],{14137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a73624b1.3ec86b05.js b/assets/js/a73624b1.3ec86b05.js
new file mode 100644
index 000000000..3b5e322a3
--- /dev/null
+++ b/assets/js/a73624b1.3ec86b05.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1446],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/a8d74ae1.de747302.js b/assets/js/a8d74ae1.de747302.js
new file mode 100644
index 000000000..34bfd6ce7
--- /dev/null
+++ b/assets/js/a8d74ae1.de747302.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7726],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>y});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/aa2627ad.6e0ad994.js b/assets/js/aa2627ad.6e0ad994.js
new file mode 100644
index 000000000..21c3ca6c1
--- /dev/null
+++ b/assets/js/aa2627ad.6e0ad994.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7052],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ab674c21.0fc04354.js b/assets/js/ab674c21.0fc04354.js
new file mode 100644
index 000000000..c2147fc0e
--- /dev/null
+++ b/assets/js/ab674c21.0fc04354.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7860],{14137:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ac71c729.3f5c49ce.js b/assets/js/ac71c729.3f5c49ce.js
new file mode 100644
index 000000000..07c444ce9
--- /dev/null
+++ b/assets/js/ac71c729.3f5c49ce.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4828],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>y});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ad4c9a14.4904ab4e.js b/assets/js/ad4c9a14.4904ab4e.js
new file mode 100644
index 000000000..bc75d66fe
--- /dev/null
+++ b/assets/js/ad4c9a14.4904ab4e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[222],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/ad86ca04.871f7e1a.js b/assets/js/ad86ca04.871f7e1a.js
new file mode 100644
index 000000000..c6591c496
--- /dev/null
+++ b/assets/js/ad86ca04.871f7e1a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6058],{14137:(t,e,n)=>{n.d(e,{Zo:()=>u,kt:()=>f});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/b1bc8f33.352b6762.js b/assets/js/b1bc8f33.352b6762.js
new file mode 100644
index 000000000..b1dc10578
--- /dev/null
+++ b/assets/js/b1bc8f33.352b6762.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7030],{14137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>k});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/b2a3b7fe.936ea947.js b/assets/js/b2a3b7fe.936ea947.js
new file mode 100644
index 000000000..11bcf88fe
--- /dev/null
+++ b/assets/js/b2a3b7fe.936ea947.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[942],{14137:(e,r,t)=>{t.d(r,{Zo:()=>d,kt:()=>m});var i=t(67294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);r&&(i=i.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,i)}return t}function a(e){for(var r= [...]
\ No newline at end of file
diff --git a/assets/js/b48c8f19.13064628.js b/assets/js/b48c8f19.13064628.js
new file mode 100644
index 000000000..bf8a221cf
--- /dev/null
+++ b/assets/js/b48c8f19.13064628.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5585],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/b54011f2.255ecc30.js b/assets/js/b54011f2.255ecc30.js
new file mode 100644
index 000000000..6045c60d3
--- /dev/null
+++ b/assets/js/b54011f2.255ecc30.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[925],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/b611302f.4abc76ff.js b/assets/js/b611302f.4abc76ff.js
new file mode 100644
index 000000000..e7f5c3d13
--- /dev/null
+++ b/assets/js/b611302f.4abc76ff.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6044],{14137:(e,t,r)=>{r.d(t,{Zo:()=>f,kt:()=>b});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/b6d922f1.20fc691f.js b/assets/js/b6d922f1.20fc691f.js
new file mode 100644
index 000000000..15d379785
--- /dev/null
+++ b/assets/js/b6d922f1.20fc691f.js
@@ -0,0 +1 @@
+(self.webpackChunk=self.webpackChunk||[]).push([[9076],{14137:(e,t,r)=>{"use strict";r.d(t,{Zo:()=>p,kt:()=>w});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/b6f1e671.ff813869.js b/assets/js/b6f1e671.ff813869.js
new file mode 100644
index 000000000..66687e97d
--- /dev/null
+++ b/assets/js/b6f1e671.ff813869.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8039],{15745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/b75fd672.22833b8c.js b/assets/js/b75fd672.22833b8c.js
new file mode 100644
index 000000000..ea9e18dd7
--- /dev/null
+++ b/assets/js/b75fd672.22833b8c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3486],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/b878c673.14a7a07e.js b/assets/js/b878c673.14a7a07e.js
new file mode 100644
index 000000000..16483b84c
--- /dev/null
+++ b/assets/js/b878c673.14a7a07e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7135],{14137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>c});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/b981ce2d.9824d4d1.js b/assets/js/b981ce2d.9824d4d1.js
new file mode 100644
index 000000000..e47b26814
--- /dev/null
+++ b/assets/js/b981ce2d.9824d4d1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8688],{14137:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>m});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function o(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/baa62cdd.1ffdb220.js b/assets/js/baa62cdd.1ffdb220.js
new file mode 100644
index 000000000..d4e217da6
--- /dev/null
+++ b/assets/js/baa62cdd.1ffdb220.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7243],{14137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/bd4428ea.9e27cb51.js b/assets/js/bd4428ea.9e27cb51.js
new file mode 100644
index 000000000..ad13c46a6
--- /dev/null
+++ b/assets/js/bd4428ea.9e27cb51.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2164],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/bea53a9b.9d24bcc3.js b/assets/js/bea53a9b.9d24bcc3.js
new file mode 100644
index 000000000..28e4c40df
--- /dev/null
+++ b/assets/js/bea53a9b.9d24bcc3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9911],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>c});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/bf90b8c3.f916de57.js b/assets/js/bf90b8c3.f916de57.js
new file mode 100644
index 000000000..b3f6bf393
--- /dev/null
+++ b/assets/js/bf90b8c3.f916de57.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9892],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c2d6aa20.e4effa38.js b/assets/js/c2d6aa20.e4effa38.js
new file mode 100644
index 000000000..6f9904f9c
--- /dev/null
+++ b/assets/js/c2d6aa20.e4effa38.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1346],{14137:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>b});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c3252e00.758b9d74.js b/assets/js/c3252e00.758b9d74.js
new file mode 100644
index 000000000..aef931d03
--- /dev/null
+++ b/assets/js/c3252e00.758b9d74.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3594],{14137:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>k});var a=n(67294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function l(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/c37ef478.bb8bad8f.js b/assets/js/c37ef478.bb8bad8f.js
new file mode 100644
index 000000000..f89cdbb7b
--- /dev/null
+++ b/assets/js/c37ef478.bb8bad8f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6869],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c3a20bcc.c03dd25f.js b/assets/js/c3a20bcc.c03dd25f.js
new file mode 100644
index 000000000..4b25a1403
--- /dev/null
+++ b/assets/js/c3a20bcc.c03dd25f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4207],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c3d7f96c.c9ca42a6.js b/assets/js/c3d7f96c.c9ca42a6.js
new file mode 100644
index 000000000..77d3102ee
--- /dev/null
+++ b/assets/js/c3d7f96c.c9ca42a6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1084],{14137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>c});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c4eb85b5.cb8c9929.js b/assets/js/c4eb85b5.cb8c9929.js
new file mode 100644
index 000000000..d48fddc02
--- /dev/null
+++ b/assets/js/c4eb85b5.cb8c9929.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9899],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c4f5d8e4.73a568e8.js b/assets/js/c4f5d8e4.73a568e8.js
new file mode 100644
index 000000000..ffb76e68d
--- /dev/null
+++ b/assets/js/c4f5d8e4.73a568e8.js
@@ -0,0 +1 @@
+(self.webpackChunk=self.webpackChunk||[]).push([[4193],{99845:(e,a,t)=>{"use strict";t.r(a),t.d(a,{default:()=>f});var n=t(70063),i=t(67294);function l(e){var a=e.data;return i.createElement("div",{className:"druid-feature"},i.createElement("h5",null,a.title),i.createElement("p",null,a.description))}function r(e){var a=e.jsonData;return i.createElement("div",{className:"druid-feature-container"},a.map((function(e){return i.createElement(l,{key:e.id,data:e})})))}var s=[{title:"Interactive [...]
\ No newline at end of file
diff --git a/assets/js/c4f8acce.d323d3af.js b/assets/js/c4f8acce.d323d3af.js
new file mode 100644
index 000000000..7f8e00baf
--- /dev/null
+++ b/assets/js/c4f8acce.d323d3af.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2222],{14137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c6892b7a.68ebb370.js b/assets/js/c6892b7a.68ebb370.js
new file mode 100644
index 000000000..1b301dcba
--- /dev/null
+++ b/assets/js/c6892b7a.68ebb370.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1763],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c6da23bd.824680c4.js b/assets/js/c6da23bd.824680c4.js
new file mode 100644
index 000000000..1d430ed64
--- /dev/null
+++ b/assets/js/c6da23bd.824680c4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9207],{14137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>k});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/c7796201.137930b8.js b/assets/js/c7796201.137930b8.js
new file mode 100644
index 000000000..a3f080ce4
--- /dev/null
+++ b/assets/js/c7796201.137930b8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9498],{14137:(e,o,n)=>{n.d(o,{Zo:()=>p,kt:()=>m});var a=n(67294);function t(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function r(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var o [...]
\ No newline at end of file
diff --git a/assets/js/c784051f.d0544eea.js b/assets/js/c784051f.d0544eea.js
new file mode 100644
index 000000000..63a668cea
--- /dev/null
+++ b/assets/js/c784051f.d0544eea.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1659],{14137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>g});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/cdd5be1e.b2d169ed.js b/assets/js/cdd5be1e.b2d169ed.js
new file mode 100644
index 000000000..91b13ebc1
--- /dev/null
+++ b/assets/js/cdd5be1e.b2d169ed.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8473],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>c});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ce1d1cee.4b2551ac.js b/assets/js/ce1d1cee.4b2551ac.js
new file mode 100644
index 000000000..5154e354a
--- /dev/null
+++ b/assets/js/ce1d1cee.4b2551ac.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5354],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ce216a89.b6d8ab1c.js b/assets/js/ce216a89.b6d8ab1c.js
new file mode 100644
index 000000000..9c87c0789
--- /dev/null
+++ b/assets/js/ce216a89.b6d8ab1c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2132],{14137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>p});var n=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/cea033fc.994ddf9d.js b/assets/js/cea033fc.994ddf9d.js
new file mode 100644
index 000000000..621ba7996
--- /dev/null
+++ b/assets/js/cea033fc.994ddf9d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3391],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/cfd3ae53.47d89de6.js b/assets/js/cfd3ae53.47d89de6.js
new file mode 100644
index 000000000..327de8ee9
--- /dev/null
+++ b/assets/js/cfd3ae53.47d89de6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6405],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(67294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d0cd4320.168a1ce6.js b/assets/js/d0cd4320.168a1ce6.js
new file mode 100644
index 000000000..75aa057eb
--- /dev/null
+++ b/assets/js/d0cd4320.168a1ce6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7218],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>y});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d0ec54cc.6be93b90.js b/assets/js/d0ec54cc.6be93b90.js
new file mode 100644
index 000000000..6e30cd639
--- /dev/null
+++ b/assets/js/d0ec54cc.6be93b90.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4436],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d2174baf.9aa6e801.js b/assets/js/d2174baf.9aa6e801.js
new file mode 100644
index 000000000..2d83d24cc
--- /dev/null
+++ b/assets/js/d2174baf.9aa6e801.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2168],{14137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>c});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d29a09b8.b5a56271.js b/assets/js/d29a09b8.b5a56271.js
new file mode 100644
index 000000000..d0f024f40
--- /dev/null
+++ b/assets/js/d29a09b8.b5a56271.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5599],{14137:(e,t,a)=>{a.d(t,{Zo:()=>l,kt:()=>g});var o=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function r(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d576915d.0779e783.js b/assets/js/d576915d.0779e783.js
new file mode 100644
index 000000000..96e33276c
--- /dev/null
+++ b/assets/js/d576915d.0779e783.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3084],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d61dc2c6.e7e1b92a.js b/assets/js/d61dc2c6.e7e1b92a.js
new file mode 100644
index 000000000..d840577e9
--- /dev/null
+++ b/assets/js/d61dc2c6.e7e1b92a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1130],{14137:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>k});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/d6bc9e72.dc95ba03.js b/assets/js/d6bc9e72.dc95ba03.js
new file mode 100644
index 000000000..bbd18532d
--- /dev/null
+++ b/assets/js/d6bc9e72.dc95ba03.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5283],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var a=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function n(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d6ffcfbd.cb4f1087.js b/assets/js/d6ffcfbd.cb4f1087.js
new file mode 100644
index 000000000..144ceea21
--- /dev/null
+++ b/assets/js/d6ffcfbd.cb4f1087.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6771],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d7056626.32e46fd5.js b/assets/js/d7056626.32e46fd5.js
new file mode 100644
index 000000000..c7bf289ce
--- /dev/null
+++ b/assets/js/d7056626.32e46fd5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[919],{14137:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>g});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/d7935e22.44aa0b6c.js b/assets/js/d7935e22.44aa0b6c.js
new file mode 100644
index 000000000..395614aa3
--- /dev/null
+++ b/assets/js/d7935e22.44aa0b6c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9328],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/d7e17a56.656109ee.js b/assets/js/d7e17a56.656109ee.js
new file mode 100644
index 000000000..cc28ba53f
--- /dev/null
+++ b/assets/js/d7e17a56.656109ee.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9894],{14137:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>h});var a=t(67294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/d97b9da7.bb53bbdd.js b/assets/js/d97b9da7.bb53bbdd.js
new file mode 100644
index 000000000..511f7a1c2
--- /dev/null
+++ b/assets/js/d97b9da7.bb53bbdd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2737],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/dc8d8ba6.7a019f91.js b/assets/js/dc8d8ba6.7a019f91.js
new file mode 100644
index 000000000..72540849e
--- /dev/null
+++ b/assets/js/dc8d8ba6.7a019f91.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5338],{14137:(e,a,t)=>{t.d(a,{Zo:()=>u,kt:()=>h});var i=t(67294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,i)}return t}function l(e){for(var a [...]
\ No newline at end of file
diff --git a/assets/js/dd9731d1.d103ee85.js b/assets/js/dd9731d1.d103ee85.js
new file mode 100644
index 000000000..79662d7f8
--- /dev/null
+++ b/assets/js/dd9731d1.d103ee85.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2486],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ddb752a3.bef0c144.js b/assets/js/ddb752a3.bef0c144.js
new file mode 100644
index 000000000..b04718571
--- /dev/null
+++ b/assets/js/ddb752a3.bef0c144.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4323],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ddb96e42.8f37d466.js b/assets/js/ddb96e42.8f37d466.js
new file mode 100644
index 000000000..aefd90004
--- /dev/null
+++ b/assets/js/ddb96e42.8f37d466.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2022],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/de16b7c2.cf7844c3.js b/assets/js/de16b7c2.cf7844c3.js
new file mode 100644
index 000000000..4e6cacec1
--- /dev/null
+++ b/assets/js/de16b7c2.cf7844c3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4412],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/dee7d915.bd344c0d.js b/assets/js/dee7d915.bd344c0d.js
new file mode 100644
index 000000000..9776162f9
--- /dev/null
+++ b/assets/js/dee7d915.bd344c0d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9072],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/dff70855.e7cbbc7c.js b/assets/js/dff70855.e7cbbc7c.js
new file mode 100644
index 000000000..44952aee3
--- /dev/null
+++ b/assets/js/dff70855.e7cbbc7c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[213],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>c});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t= [...]
\ No newline at end of file
diff --git a/assets/js/e1ca08a7.6d4df2e6.js b/assets/js/e1ca08a7.6d4df2e6.js
new file mode 100644
index 000000000..2f5d84647
--- /dev/null
+++ b/assets/js/e1ca08a7.6d4df2e6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3064],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/e2a0ac16.2a468822.js b/assets/js/e2a0ac16.2a468822.js
new file mode 100644
index 000000000..b3d632749
--- /dev/null
+++ b/assets/js/e2a0ac16.2a468822.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1151],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>c});var a=t(67294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/e46c7298.82cc1eaa.js b/assets/js/e46c7298.82cc1eaa.js
new file mode 100644
index 000000000..c558bc22b
--- /dev/null
+++ b/assets/js/e46c7298.82cc1eaa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2441],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/e4c6fc8c.fbea42f8.js b/assets/js/e4c6fc8c.fbea42f8.js
new file mode 100644
index 000000000..b5cc16445
--- /dev/null
+++ b/assets/js/e4c6fc8c.fbea42f8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4936],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>h});var r=t(67294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/e74930cd.039072b6.js b/assets/js/e74930cd.039072b6.js
new file mode 100644
index 000000000..3447c85ee
--- /dev/null
+++ b/assets/js/e74930cd.039072b6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6698],{14137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var i=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function o(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/e7d531e5.8c254eb0.js b/assets/js/e7d531e5.8c254eb0.js
new file mode 100644
index 000000000..f4a60fc28
--- /dev/null
+++ b/assets/js/e7d531e5.8c254eb0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8749],{14137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(67294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/e809b713.189d8d07.js b/assets/js/e809b713.189d8d07.js
new file mode 100644
index 000000000..84ff5164d
--- /dev/null
+++ b/assets/js/e809b713.189d8d07.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7476],{14137:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>g});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/e833ccc9.efeb5313.js b/assets/js/e833ccc9.efeb5313.js
new file mode 100644
index 000000000..cdad11c30
--- /dev/null
+++ b/assets/js/e833ccc9.efeb5313.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1625],{14137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/e9483372.82f5beb2.js b/assets/js/e9483372.82f5beb2.js
new file mode 100644
index 000000000..4b204645f
--- /dev/null
+++ b/assets/js/e9483372.82f5beb2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8903],{14137:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>f});var n=t(67294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function s(e){for(var a [...]
\ No newline at end of file
diff --git a/assets/js/ea3ac311.94d1a0c8.js b/assets/js/ea3ac311.94d1a0c8.js
new file mode 100644
index 000000000..6688936ef
--- /dev/null
+++ b/assets/js/ea3ac311.94d1a0c8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9566],{14137:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>c});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/ea4f8461.259349d1.js b/assets/js/ea4f8461.259349d1.js
new file mode 100644
index 000000000..e5d757059
--- /dev/null
+++ b/assets/js/ea4f8461.259349d1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5546],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>y});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ea722b71.294c85ab.js b/assets/js/ea722b71.294c85ab.js
new file mode 100644
index 000000000..c04aa1058
--- /dev/null
+++ b/assets/js/ea722b71.294c85ab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9319],{14137:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>f});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/eab95d94.72457d23.js b/assets/js/eab95d94.72457d23.js
new file mode 100644
index 000000000..41dc8a3aa
--- /dev/null
+++ b/assets/js/eab95d94.72457d23.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1018],{14137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>c});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/eaffe8b7.4e05d7a4.js b/assets/js/eaffe8b7.4e05d7a4.js
new file mode 100644
index 000000000..fd77b6ae3
--- /dev/null
+++ b/assets/js/eaffe8b7.4e05d7a4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7146],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>y});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/eb03316f.dc72f90e.js b/assets/js/eb03316f.dc72f90e.js
new file mode 100644
index 000000000..f01e9fda0
--- /dev/null
+++ b/assets/js/eb03316f.dc72f90e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3329],{14137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ed039623.d2377aa7.js b/assets/js/ed039623.d2377aa7.js
new file mode 100644
index 000000000..68b10845e
--- /dev/null
+++ b/assets/js/ed039623.d2377aa7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5763],{14137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ed72e2ec.48abb3aa.js b/assets/js/ed72e2ec.48abb3aa.js
new file mode 100644
index 000000000..60e2ef36c
--- /dev/null
+++ b/assets/js/ed72e2ec.48abb3aa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6993],{14137:(e,r,t)=>{t.d(r,{Zo:()=>s,kt:()=>d});var n=t(67294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function c(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r [...]
\ No newline at end of file
diff --git a/assets/js/ed751b3e.b1858380.js b/assets/js/ed751b3e.b1858380.js
new file mode 100644
index 000000000..601abaf58
--- /dev/null
+++ b/assets/js/ed751b3e.b1858380.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1290],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ed878c12.af276c76.js b/assets/js/ed878c12.af276c76.js
new file mode 100644
index 000000000..9c9a4c1d0
--- /dev/null
+++ b/assets/js/ed878c12.af276c76.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8136],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>y});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ee2b3e4d.23f86832.js b/assets/js/ee2b3e4d.23f86832.js
new file mode 100644
index 000000000..0c9ff126c
--- /dev/null
+++ b/assets/js/ee2b3e4d.23f86832.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4624],{14137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>h});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/ef65e1d4.e5c2d979.js b/assets/js/ef65e1d4.e5c2d979.js
new file mode 100644
index 000000000..dc8592c88
--- /dev/null
+++ b/assets/js/ef65e1d4.e5c2d979.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2420],{14137:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>h});var n=a(67294);function o(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function r(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/efa71475.c88fc633.js b/assets/js/efa71475.c88fc633.js
new file mode 100644
index 000000000..6cf8e1730
--- /dev/null
+++ b/assets/js/efa71475.c88fc633.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4700],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/f014cc84.861a100d.js b/assets/js/f014cc84.861a100d.js
new file mode 100644
index 000000000..7c3704c79
--- /dev/null
+++ b/assets/js/f014cc84.861a100d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2668],{14137:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>y});var a=n(67294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/f17e53f0.da3d5cc2.js b/assets/js/f17e53f0.da3d5cc2.js
new file mode 100644
index 000000000..6d7c14b9c
--- /dev/null
+++ b/assets/js/f17e53f0.da3d5cc2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4222],{14137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/f5deb524.db8655bf.js b/assets/js/f5deb524.db8655bf.js
new file mode 100644
index 000000000..964027b30
--- /dev/null
+++ b/assets/js/f5deb524.db8655bf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3027],{14137:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>f});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function l(t){for(var e [...]
\ No newline at end of file
diff --git a/assets/js/f654de79.505a4a63.js b/assets/js/f654de79.505a4a63.js
new file mode 100644
index 000000000..b0e8b543a
--- /dev/null
+++ b/assets/js/f654de79.505a4a63.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7713],{14137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/f6dae52e.e4da3e5c.js b/assets/js/f6dae52e.e4da3e5c.js
new file mode 100644
index 000000000..f0ffb0068
--- /dev/null
+++ b/assets/js/f6dae52e.e4da3e5c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4953],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/f6e3d9aa.a33209f4.js b/assets/js/f6e3d9aa.a33209f4.js
new file mode 100644
index 000000000..dca225359
--- /dev/null
+++ b/assets/js/f6e3d9aa.a33209f4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3877],{14137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function n(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/f771a59e.67dfd83d.js b/assets/js/f771a59e.67dfd83d.js
new file mode 100644
index 000000000..6ad3aa4e6
--- /dev/null
+++ b/assets/js/f771a59e.67dfd83d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1438],{14137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>g});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/f925887b.278aad3f.js b/assets/js/f925887b.278aad3f.js
new file mode 100644
index 000000000..019ea7c72
--- /dev/null
+++ b/assets/js/f925887b.278aad3f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3729],{14137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/fa34eaa0.33fc40b8.js b/assets/js/fa34eaa0.33fc40b8.js
new file mode 100644
index 000000000..a12c1e2b8
--- /dev/null
+++ b/assets/js/fa34eaa0.33fc40b8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5301],{14137:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>g});var a=t(67294);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n [...]
\ No newline at end of file
diff --git a/assets/js/fa730293.8cae300a.js b/assets/js/fa730293.8cae300a.js
new file mode 100644
index 000000000..58ecaa3a4
--- /dev/null
+++ b/assets/js/fa730293.8cae300a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5602],{14137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/fb356df6.c42ef2c8.js b/assets/js/fb356df6.c42ef2c8.js
new file mode 100644
index 000000000..872312a97
--- /dev/null
+++ b/assets/js/fb356df6.c42ef2c8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6834],{14137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>N});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t [...]
\ No newline at end of file
diff --git a/assets/js/main.f9c13e33.js b/assets/js/main.f9c13e33.js
new file mode 100644
index 000000000..13df8bf06
--- /dev/null
+++ b/assets/js/main.f9c13e33.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.f9c13e33.js.LICENSE.txt */
+(self.webpackChunk=self.webpackChunk||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),o=n(87462),a=n(68356),i=n.n(a),s=n(16887);const c={"0126da28":[function(){return n.e(7992).then(n.bind(n,3905))},"@site/docs/31.0.0/misc/papers-and-talks.md",3905],"0132476f":[function(){return n.e(6641).then(n.bind(n,21566))},"@site/docs/31.0.0/development/extensions-contrib/delta-lake.md",21566],"0224d2b5":[function(){return n.e(6087).then(n.bind(n,55963))},"@site/docs/31.0 [...]
\ No newline at end of file
diff --git a/assets/js/main.f9c13e33.js.LICENSE.txt b/assets/js/main.f9c13e33.js.LICENSE.txt
new file mode 100644
index 000000000..3cbf99441
--- /dev/null
+++ b/assets/js/main.f9c13e33.js.LICENSE.txt
@@ -0,0 +1,70 @@
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+
+/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */
+
+/*!***************************************************
+* mark.js v8.11.1
+* https://markjs.io/
+* Copyright (c) 2014–2018, Julian Kühnel
+* Released under the MIT license https://git.io/vwTVl
+*****************************************************/
+
+/**
+ * @license React
+ * use-sync-external-store-shim.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ */
+
+/** @license React v0.20.2
+ * scheduler.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v17.0.2
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v17.0.2
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
diff --git a/assets/js/runtime~main.7d8e1a79.js b/assets/js/runtime~main.7d8e1a79.js
new file mode 100644
index 000000000..95c045874
--- /dev/null
+++ b/assets/js/runtime~main.7d8e1a79.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,d,c,b={},f={};function r(e){var a=f[e];if(void 0!==a)return a.exports;var d=f[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=f,e=[],r.O=(a,d,c,b)=>{if(!d){var f=1/0;for(i=0;i<e.length;i++){for(var[d,c,b]=e[i],t=!0,o=0;o<d.length;o++)(!1&b||f>=b)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,b<f&&(f=b));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}b=b||0;for(var i=e.lengt [...]
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 67ba54693..80c2e0b5a 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -14,13 +14,13 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/cla/index.html b/community/cla/index.html
index 15ee7d805..db6a0bda7 100644
--- a/community/cla/index.html
+++ b/community/cla/index.html
@@ -14,15 +14,15 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
 the Apache Software Foundation.</p><p>Other contributors are free to submit patches without having a CLA on file. You should only submit patches to the
 project when you intend to license your contribution under the Apache 2.0 license, and have the legal right to do so.</p></article></div></div></main></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="foote [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index 4fc008484..8bcfd9603 100644
--- a/community/index.html
+++ b/community/index.html
@@ -14,12 +14,12 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
 community. We also do chat, meetups, and more.</p><p>Check out the following resources if you&#x27;re looking for help, to discuss Druid development, or just stay up to date:</p><ul><li><strong>Slack:</strong> Many users and committers are present on Apache Druid Slack. Use this link to join and invite others: <a href="/community/join-slack?v=1">https://druid.apache.org/community/join-slack</a>. This is the perfect place to ask for help if you need it!</li><li><strong>GitHub:</strong> St [...]
 issues, or contribute pull requests. If you&#x27;re interested in development, please see the <a href="#contributing">Contributing</a>
 section below for details on our development process.</li><li><strong>Development mailing list:</strong> <a href="https://lists.apache.org/list.html?dev@druid.apache.org" target="_blank" rel="noopener noreferrer">dev@druid.apache.org</a> for
@@ -45,12 +45,12 @@ on the Druid development list <a href="https://lists.apache.org/list.html?dev@dr
 when sending in pull requests. This will help review proceed as quickly as
 possible.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="testing">Testing<a href="#testing" class="hash-link" aria-label="Direct link to Testing" title="Direct link to Testing">​</a></h3><p>All Pull Requests are automatically tested through <a href="https://github.com/apache/druid/actions" target="_blank" rel="noopener noreferrer">GitHub Actions</a> on both AMD64 and ARM64 architectures.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="committers">Committers<a href="#committe [...]
 setting the direction of the project, contributing code, and reviewing code contributed
-by others.</p><p>You don&#x27;t need to be a committer to contribute- pull requests are welcome from anyone.</p><table><thead><tr><th>Name</th><th>Organization</th></tr></thead><tbody><tr><td><a href="https://github.com/abhishekagarwal87" target="_blank" rel="noopener noreferrer">Abhishek Agarwal</a></td><td><a href="https://imply.io/" target="_blank" rel="noopener noreferrer">Imply</a></td></tr><tr><td><a href="https://github.com/AlexanderSaydakov" target="_blank" rel="noopener noreferr [...]
+by others.</p><p>You don&#x27;t need to be a committer to contribute- pull requests are welcome from anyone.</p><table><thead><tr><th>Name</th><th>Organization</th></tr></thead><tbody><tr><td><a href="https://github.com/abhishekagarwal87" target="_blank" rel="noopener noreferrer">Abhishek Agarwal</a></td><td><a href="https://imply.io/" target="_blank" rel="noopener noreferrer">Imply</a></td></tr><tr><td><a href="https://github.com/AlexanderSaydakov" target="_blank" rel="noopener noreferr [...]
 existing committers for a walk through the process. Basically, what we&#x27;re
 looking for is an interest in ongoing contributions to Druid.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="general-committer-guidelines">General committer guidelines<a href="#general-committer-guidelines" class="hash-link" aria-label="Direct link to General committer guidelines" title="Direct link to General committer guidelines">​</a></h3><p>If you are an official Druid committer then congratulations! You are part of a fantastic group of people. Here are some guidelines to foll [...]
 aspects of the Druid project. The responsibilities of the PMC include:</p><ul><li>Approving releases</li><li>Nominating new committers</li><li>Maintaining the project&#x27;s shared resources, including the github account,
 mailing lists, websites, social media channels, etc.</li><li>Maintaining guidelines for the project</li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#community" class="table-of-contents__link toc-highlight">Community</a></li><li><a href="#getting-help" class="table-of-contents__link toc-highlight">Getting help</a></li><li><a href="#contributing" class="table-of-conte [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/join-slack/index.html b/community/join-slack/index.html
index 1b5a46d58..979c2d18d 100644
--- a/community/join-slack/index.html
+++ b/community/join-slack/index.html
@@ -14,13 +14,13 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference.html/index.html b/docs/31.0.0/api-reference.html/index.html
new file mode 100644
index 000000000..11c00bdcd
--- /dev/null
+++ b/docs/31.0.0/api-reference.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/automatic-compaction-api.html/index.html b/docs/31.0.0/api-reference/automatic-compaction-api.html/index.html
new file mode 100644
index 000000000..1f6a6b460
--- /dev/null
+++ b/docs/31.0.0/api-reference/automatic-compaction-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/automatic-compaction-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/automatic-compaction-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/automatic-compaction-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/automatic-compaction-api/index.html b/docs/31.0.0/api-reference/automatic-compaction-api/index.html
new file mode 100644
index 000000000..ba85ab790
--- /dev/null
+++ b/docs/31.0.0/api-reference/automatic-compaction-api/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/automatic-compaction-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Automatic compaction API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/data-management-api.html/index.html b/docs/31.0.0/api-reference/data-management-api.html/index.html
new file mode 100644
index 000000000..294a8f3ff
--- /dev/null
+++ b/docs/31.0.0/api-reference/data-management-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/data-management-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/data-management-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/data-management-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/data-management-api/index.html b/docs/31.0.0/api-reference/data-management-api/index.html
new file mode 100644
index 000000000..4d1c85594
--- /dev/null
+++ b/docs/31.0.0/api-reference/data-management-api/index.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/data-management-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data management API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This includes information on how to mark segments as used or unused and delete them from Druid.</p><p>In this topic, <code>http://ROUTER_IP:ROUTER_PORT</code> is a placeholder for your Router service address and port.
+Replace it with the information for your deployment.
+For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span [...]
+Even if these API requests update segments to used, you still need to configure a <a href="/docs/31.0.0/operations/rule-configuration#load-rules">load rule</a> to load them onto Historical processes.</p><p>When you use these APIs concurrently with an indexing task or a kill task, the behavior is undefined.
+Druid terminates some segments and marks others as used.
+Furthermore, it is possible that all segments could be unused, yet an indexing task might still be able to read data from these segments and complete successfully.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="segment-ids">Segment IDs<a href="#segment-ids" class="hash-link" aria-label="Direct link to Segment IDs" title="Direct link to Segment IDs">​</a></h3><p>You must provide segment IDs when using many of the endpoints described in this topic.
+For information on segment IDs, see <a href="/docs/31.0.0/design/segments#segment-identification">Segment identification</a>.
+For information on finding segment IDs in the web console, see <a href="/docs/31.0.0/operations/web-console#segments">Segments</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mark-a-single-segment-unused">Mark a single segment unused<a href="#mark-a-single-segment-unused" class="hash-link" aria-label="Direct link to Mark a single segment unused" title="Direct link to Mark a single segment unused">​</a></h3><p>Marks the state of a segment as unused, using the segment ID.
+This is a &quot;soft delete&quot; of the segment from Historicals.
+To undo this action, <a href="#mark-a-single-segment-as-used">mark the segment used</a>.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> response code even if the segment ID or datasource doesn&#x27;t exist.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url">URL<a href="#url" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>DELETE</code> <code>/druid/coordinator/v1/datasources/{datasource}/segments/{segmentId}</code [...]
+Pass the array of segment IDs or interval as a JSON object in the request body.</p><p>For the interval, specify the start and end times as ISO 8601 strings to identify segments inclusive of the start time and exclusive of the end time.
+Optionally, specify an array of segment versions with interval. Druid updates only the segments completely contained
+within the specified interval that match the optional list of versions; partially overlapping segments are not affected.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-2">URL<a href="#url-2" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/datasources/{datasource}/markUnused</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="request-body">Request body<a href="#request-body" class=" [...]
+Pass the array of segment IDs or interval as a JSON object in the request body.</p><p>For the interval, specify the start and end times as ISO 8601 strings to identify segments inclusive of the start time and exclusive of the end time.
+Optionally, specify an array of segment versions with interval. Druid updates only the segments completely contained
+within the specified interval that match the optional list of versions; partially overlapping segments are not affected.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/datasources/{datasource}/markUsed</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="request-body-1">Request body<a href="#request-body-1" class [...]
+This action performs a &quot;soft delete&quot; of the segments from Historicals.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> response code even if the datasource doesn&#x27;t exist.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-4">URL<a href="#url-4" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>DELETE</code> <code>/druid/coordinator/v1/datasources/{datasource}</code></p><h4 class="anchor anchorWithSticky [...]
+The endpoint returns the number of changed segments.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> response code even if the datasource doesn&#x27;t exist.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-5">URL<a href="#url-5" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/datasources/{datasource}</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="header-2">Hea [...]
+<code>wikipedia_hour</code> contains one unused segment eligible to be marked as used.</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">cURL</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">HTTP</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-sh [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/dynamic-configuration-api.html/index.html b/docs/31.0.0/api-reference/dynamic-configuration-api.html/index.html
new file mode 100644
index 000000000..abc5da9b5
--- /dev/null
+++ b/docs/31.0.0/api-reference/dynamic-configuration-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/dynamic-configuration-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/dynamic-configuration-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/dynamic-configuration-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/dynamic-configuration-api/index.html b/docs/31.0.0/api-reference/dynamic-configuration-api/index.html
new file mode 100644
index 000000000..3bddea280
--- /dev/null
+++ b/docs/31.0.0/api-reference/dynamic-configuration-api/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/dynamic-configuration-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Dynamic configuration API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/3 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Replace it with the information for your deployment.
+For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="coordinator-dynamic-configuration">Coordinator dynamic configuration<a href="#coordinator-dynamic-configuration" class="hash-link" aria-label="Direct link to Coordinator dynamic configuration" title="Direct link to Coordinator dynamic configuration">​</a></h2><p>The Coordinator has dynamic configurations to tune certain behavior on the fly, without requiri [...]
+For information on the supported properties, see <a href="/docs/31.0.0/configuration/#dynamic-configuration">Coordinator dynamic configuration</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="get-dynamic-configuration">Get dynamic configuration<a href="#get-dynamic-configuration" class="hash-link" aria-label="Direct link to Get dynamic configuration" title="Direct link to Get dynamic configuration">​</a></h3><p>Retrieves the current Coordinator dynamic configuration. Returns a  [...]
+For information on the supported properties, see <a href="/docs/31.0.0/configuration/#dynamic-configuration">Dynamic configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-1">URL<a href="#url-1" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/config</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="header-parameters">Header parameters<a href="#header-parameters" class= [...]
+For information on the supported properties, see <a href="/docs/31.0.0/configuration/#overlord-dynamic-configuration">Overlord dynamic configuration</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="get-dynamic-configuration-1">Get dynamic configuration<a href="#get-dynamic-configuration-1" class="hash-link" aria-label="Direct link to Get dynamic configuration" title="Direct link to Get dynamic configuration">​</a></h3><p>Retrieves the current Overlord dynamic configuration.
+Returns a JSON object with the dynamic configuration properties.
+Returns an empty response body if there is no current Overlord dynamic configuration.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/indexer/v1/worker</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-3">Responses<a href="#responses-3" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Res [...]
+For information on the supported properties, see <a href="/docs/31.0.0/configuration/#overlord-dynamic-configuration">Overlord dynamic configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-4">URL<a href="#url-4" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/worker</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="header-parameters-1">Header parameters<a href="#header-pa [...]
+Returns an empty response body if there are no Overlord scaling events.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-6">URL<a href="#url-6" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/indexer/v1/scaling</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-7">Responses<a href="#responses-7" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Responses">​</a> [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/index.html b/docs/31.0.0/api-reference/index.html
new file mode 100644
index 000000000..fec06f2ff
--- /dev/null
+++ b/docs/31.0.0/api-reference/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/api-reference" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">API reference | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/api-re [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/json-querying-api.html/index.html b/docs/31.0.0/api-reference/json-querying-api.html/index.html
new file mode 100644
index 000000000..c3dac53dd
--- /dev/null
+++ b/docs/31.0.0/api-reference/json-querying-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/json-querying-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/json-querying-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/json-querying-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/json-querying-api/index.html b/docs/31.0.0/api-reference/json-querying-api/index.html
new file mode 100644
index 000000000..edce073be
--- /dev/null
+++ b/docs/31.0.0/api-reference/json-querying-api/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/json-querying-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">JSON querying API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/ap [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/legacy-metadata-api.html/index.html b/docs/31.0.0/api-reference/legacy-metadata-api.html/index.html
new file mode 100644
index 000000000..f6626cc9e
--- /dev/null
+++ b/docs/31.0.0/api-reference/legacy-metadata-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/legacy-metadata-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/legacy-metadata-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/legacy-metadata-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/legacy-metadata-api/index.html b/docs/31.0.0/api-reference/legacy-metadata-api/index.html
new file mode 100644
index 000000000..9b0137580
--- /dev/null
+++ b/docs/31.0.0/api-reference/legacy-metadata-api/index.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/legacy-metadata-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Legacy metadata API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The result includes segment replication counts. It also factors in the number of available nodes that are of a service type that can load the segment when computing the number of segments remaining to load.
+A segment is considered fully loaded when:</p><ul><li>Druid has replicated it the number of times configured in the corresponding load rule.</li><li>Or the number of replicas for the segment in each tier where it is configured to be replicated equals the available nodes of a service type that are currently allowed to load the segment in the tier.</li></ul><p><code>GET /druid/coordinator/v1/loadqueue</code></p><p>Returns the ids of segments to load and drop for each Historical process.</p [...]
+Also note that these APIs only guarantees that the segments are available at the time of the call.
+Segments can still become missing because of historical process failures or any other reasons afterward.</p><p><code>GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?forceMetadataRefresh={boolean}&amp;interval={myInterval}</code></p><p>Returns the percentage of segments actually loaded in the cluster versus segments that should be loaded in the cluster for the given
+datasource over the given interval (or last 2 weeks if interval is not given). <code>forceMetadataRefresh</code> is required to be set. </p><ul><li>Setting <code>forceMetadataRefresh</code> to true will force the coordinator to poll latest segment metadata from the metadata store
+(Note: <code>forceMetadataRefresh=true</code> refreshes Coordinator&#x27;s metadata cache of all datasources. This can be a heavy operation in terms
+of the load on the metadata store but can be necessary to make sure that we verify all the latest segments&#x27; load status)</li><li>Setting <code>forceMetadataRefresh</code> to false will use the metadata cached on the coordinator from the last force/periodic refresh.
+If no used segments are found for the given inputs, this API returns <code>204 No Content</code></li></ul><p><code>GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?simple&amp;forceMetadataRefresh={boolean}&amp;interval={myInterval}</code></p><p>Returns the number of segments left to load until segments that should be loaded in the cluster are available for the given datasource
+over the given interval (or last 2 weeks if interval is not given). This does not include segment replication counts. <code>forceMetadataRefresh</code> is required to be set. </p><ul><li>Setting <code>forceMetadataRefresh</code> to true will force the coordinator to poll latest segment metadata from the metadata store
+(Note: <code>forceMetadataRefresh=true</code> refreshes Coordinator&#x27;s metadata cache of all datasources. This can be a heavy operation in terms
+of the load on the metadata store but can be necessary to make sure that we verify all the latest segments&#x27; load status)</li><li>Setting <code>forceMetadataRefresh</code> to false will use the metadata cached on the coordinator from the last force/periodic refresh.
+If no used segments are found for the given inputs, this API returns <code>204 No Content</code></li></ul><p><code>GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?full&amp;forceMetadataRefresh={boolean}&amp;interval={myInterval}</code></p><p>Returns the number of segments left to load in each tier until segments that should be loaded in the cluster are all available for the given datasource  over the given interval (or last 2 weeks if interval is not given). This includ [...]
+(Note: <code>forceMetadataRefresh=true</code> refreshes Coordinator&#x27;s metadata cache of all datasources. This can be a heavy operation in terms
+of the load on the metadata store but can be necessary to make sure that we verify all the latest segments&#x27; load status)</li><li>Setting <code>forceMetadataRefresh</code> to false will use the metadata cached on the coordinator from the last force/periodic refresh. </li></ul><p>You can pass the optional query parameter <code>computeUsingClusterView</code> to factor in the available cluster services when calculating
+the segments left to load. See <a href="#segment-loading">Coordinator Segment Loading</a> for details.
+If no used segments are found for the given inputs, this API returns <code>204 No Content</code></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-store-information">Metadata store information<a href="#metadata-store-information" class="hash-link" aria-label="Direct link to Metadata store information" title="Direct link to Metadata store information">​</a></h2><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_ [...]
+<a href="/docs/31.0.0/querying/sql-metadata-tables#segments-table"><code>sys.segments</code></a> table.</p></div></div><p><code>GET /druid/coordinator/v1/metadata/segments</code></p><p>Returns a list of all segments for each datasource enabled in the cluster.</p><p><code>GET /druid/coordinator/v1/metadata/segments?datasources={dataSourceName1}&amp;datasources={dataSourceName2}</code></p><p>Returns a list of all segments for one or more specific datasources enabled in the cluster.</p><p>< [...]
+segment is unused, or is unknown, a 404 response is returned.</p><p><code>GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments/{segmentId}?includeUnused=true</code></p><p>Returns full segment metadata for a specific segment as stored in the metadata store. If it is unknown, a 404 response
+is returned.</p><p><code>GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments</code></p><p>Returns a list of all segments, overlapping with any of given intervals,  for a datasource as stored in the metadata store. Request body is array of string IS0 8601 intervals like <code>[interval1, interval2,...]</code>—<!-- -->for example, <code>[&quot;2012-01-01T00:00:00.000/2012-01-03T00:00:00.000&quot;, &quot;2012-01-05T00:00:00.000/2012-01-07T00:00:00.000&quot;]</code>.</p> [...]
+processes that run with different types will appear multiple times with different
+ports.</p><p><code>GET /druid/coordinator/v1/servers?simple</code></p><p>Returns a list of server data objects in which each object has the following keys:</p><ul><li><code>host</code>: host URL include (<code>{hostname}:{port}</code>)</li><li><code>type</code>: process type (<code>indexer-executor</code>, <code>historical</code>)</li><li><code>currSize</code>: storage size currently used</li><li><code>maxSize</code>: maximum storage size</li><li><code>priority</code></li><li><code>tier< [...]
+as in <code>2016-06-27_2016-06-28</code>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionConte [...]
+<a href="/docs/31.0.0/querying/sql-metadata-tables#tables-table"><code>INFORMATION_SCHEMA.TABLES</code></a>,
+<a href="/docs/31.0.0/querying/sql-metadata-tables#columns-table"><code>INFORMATION_SCHEMA.COLUMNS</code></a>, and
+<a href="/docs/31.0.0/querying/sql-metadata-tables#segments-table"><code>sys.segments</code></a> tables.</p></div></div><p><code>GET /druid/v2/datasources</code></p><p>Returns a list of queryable datasources.</p><p><code>GET /druid/v2/datasources/{dataSourceName}</code></p><p>Returns the dimensions and metrics of the datasource. Optionally, you can provide request parameter &quot;full&quot; to get list of served intervals with dimensions and metrics being served for those intervals. You  [...]
+which provides more comprehensive information and supports all dataSource types including streaming dataSources. It&#x27;s also encouraged to use <a href="/docs/31.0.0/querying/sql-metadata-tables">INFORMATION_SCHEMA tables</a>
+if you&#x27;re using SQL.</p></div></div><p>Returns the dimensions of the datasource.</p><p><code>GET /druid/v2/datasources/{dataSourceName}/metrics</code></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14  [...]
+which provides more comprehensive information and supports all dataSource types including streaming dataSources. It&#x27;s also encouraged to use <a href="/docs/31.0.0/querying/sql-metadata-tables">INFORMATION_SCHEMA tables</a>
+if you&#x27;re using SQL.</p></div></div><p>Returns the metrics of the datasource.</p><p><code>GET /druid/v2/datasources/{dataSourceName}/candidates?intervals={comma-separated-intervals}&amp;numCandidates={numCandidates}</code></p><p>Returns segment information lists including server locations for the given datasource and intervals. If &quot;numCandidates&quot; is not specified, it will return all servers for each interval.</p></div></article><nav class="pagination-nav docusaurus-mt-lg"  [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/lookups-api.html/index.html b/docs/31.0.0/api-reference/lookups-api.html/index.html
new file mode 100644
index 000000000..659b0e540
--- /dev/null
+++ b/docs/31.0.0/api-reference/lookups-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/lookups-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/lookups-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/lookups-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/lookups-api/index.html b/docs/31.0.0/api-reference/lookups-api/index.html
new file mode 100644
index 000000000..63f4ebbdf
--- /dev/null
+++ b/docs/31.0.0/api-reference/lookups-api/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/lookups-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Lookups API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/api-refe [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+To discover a list of tiers currently active in the cluster in addition to ones known in the dynamic configuration, the parameter <code>discover=true</code> can be added as per <code>/druid/coordinator/v1/lookups/config?discover=true</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="list-lookup-names">List lookup names<a href="#list-lookup-names" class="hash-link" aria-label="Direct link to List lookup names" title="Direct link to List lookup names">​</a></h3><p>A <code>GET</ [...]
+There is an internal API these processes use to list/load/drop their lookups starting at <code>/druid/listen/v1/lookups</code>.
+These follow the same convention for return values as the cluster wide dynamic configuration. Following endpoints
+can be used for debugging purposes but not otherwise.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="get-lookups">Get lookups<a href="#get-lookups" class="hash-link" aria-label="Direct link to Get lookups" title="Direct link to Get lookups">​</a></h3><p>A <code>GET</code> to the process at <code>/druid/listen/v1/lookups</code> will return a json map of all the lookups currently active on the process.
+The return value will be a json map of the lookups to their extractor factories.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span c [...]
+The return value will be the json representation of the factory.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plai [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/retention-rules-api.html/index.html b/docs/31.0.0/api-reference/retention-rules-api.html/index.html
new file mode 100644
index 000000000..969024530
--- /dev/null
+++ b/docs/31.0.0/api-reference/retention-rules-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/retention-rules-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/retention-rules-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/retention-rules-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/retention-rules-api/index.html b/docs/31.0.0/api-reference/retention-rules-api/index.html
new file mode 100644
index 000000000..636e0dc21
--- /dev/null
+++ b/docs/31.0.0/api-reference/retention-rules-api/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/retention-rules-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Retention rules API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid reads rules in the order in which they appear; for more information, see <a href="/docs/31.0.0/operations/rule-configuration">rule structure</a>.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> even if the datasource does not exist.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="url">URL<a href="#url" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h3><p><code>POST</code> <code>/druid/coordinator/v1/rules/{dataSource}</co [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/service-status-api.html/index.html b/docs/31.0.0/api-reference/service-status-api.html/index.html
new file mode 100644
index 000000000..cf3815509
--- /dev/null
+++ b/docs/31.0.0/api-reference/service-status-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/service-status-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/service-status-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/service-status-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/service-status-api/index.html b/docs/31.0.0/api-reference/service-status-api/index.html
new file mode 100644
index 000000000..9a41811e5
--- /dev/null
+++ b/docs/31.0.0/api-reference/service-status-api/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/service-status-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Service status API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/a [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+For nodes that use Zookeeper segment discovery, a response of <code>{&quot;selfDiscovered&quot;: true}</code> indicates that the node&#x27;s Zookeeper client has started receiving data from the Zookeeper cluster, enabling timely discovery of segments and other nodes.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/status/selfDiscovered/status< [...]
+Use this endpoint for monitoring checks that are unable to examine the response body. For example, AWS load balancer health checks.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-4">URL<a href="#url-4" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/status/selfDiscovered</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-4">Responses<a href="#responses-4" class="hash-link" aria-label="Direct  [...]
+<a href="/docs/31.0.0/api-reference/tasks-api">Tasks API</a> endpoint instead.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-11">URL<a href="#url-11" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/worker/v1/task/{taskId}/log</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="shut-down-running-task">Shut down running task<a href="#shut-down-running-task" class="hash-link" aria-label="Direct link [...]
+<a href="/docs/31.0.0/api-reference/tasks-api">Tasks API</a> endpoint instead.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-12">URL<a href="#url-12" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/worker/v1/task/{taskId}/shutdown</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-11">Responses<a href="#responses-11" class="hash-link" aria-label="Direct link to Responses" title="Direc [...]
+keyed by the combined <code>druid.host</code> and <code>druid.port</code>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-13">URL<a href="#url-13" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/worker/v1/disable</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-12">Responses<a href="#responses-12" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Responses [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/sql-api.html/index.html b/docs/31.0.0/api-reference/sql-api.html/index.html
new file mode 100644
index 000000000..2f6607319
--- /dev/null
+++ b/docs/31.0.0/api-reference/sql-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/sql-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/sql-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/sql-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/sql-api/index.html b/docs/31.0.0/api-reference/sql-api/index.html
new file mode 100644
index 000000000..c49894d98
--- /dev/null
+++ b/docs/31.0.0/api-reference/sql-api/index.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/sql-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid SQL API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/api-re [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This document describes the SQL language.</p></div></div><p>In this topic, <code>http://ROUTER_IP:ROUTER_PORT</code> is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="query-from-historicals">Query from Historicals<a href="#query-from-historicals" class="hash-link" aria-label="Direct link to Quer [...]
+<!-- -->Object field names match the columns returned by the SQL query in the same order as the SQL query.</p></li><li><p><code>array</code>: Returns a JSON array of JSON arrays with the HTTP response header <code>Content-Type: application/json</code>.<br>
+<!-- -->Each inner array has elements matching the columns returned by the SQL query, in order.</p></li><li><p><code>objectLines</code>: Returns newline-delimited JSON objects with the HTTP response header <code>Content-Type: text/plain</code>.<br>
+<!-- -->Newline separation facilitates parsing the entire response set as a stream if you don&#x27;t have a streaming JSON parser.
+This format includes a single trailing newline character so you can detect a truncated response.</p></li><li><p><code>arrayLines</code>: Returns newline-delimited JSON arrays with the HTTP response header <code>Content-Type: text/plain</code>.<br>
+<!-- -->Newline separation facilitates parsing the entire response set as a stream if you don&#x27;t have a streaming JSON parser.
+This format includes a single trailing newline character so you can detect a truncated response.</p></li><li><p><code>csv</code>: Returns comma-separated values with one row per line. Sent with the HTTP response header <code>Content-Type: text/csv</code>.<br>
+<!-- -->Druid uses double quotes to escape individual field values. For example, a value with a comma returns <code>&quot;A,B&quot;</code>.
+If the field value contains a double quote character, Druid escapes it with a second double quote character.
+For example, <code>foo&quot;bar</code> becomes <code>foo&quot;&quot;bar</code>.
+This format includes a single trailing newline character so you can detect a truncated response.</p></li></ul></li><li><p><code>header</code>: Boolean value that determines whether to return information on column names. When set to <code>true</code>, Druid returns the column names as the first row of the results. To also get information on the column types, set <code>typesHeader</code> or <code>sqlTypesHeader</code> to <code>true</code>. For a comparative overview of data formats and con [...]
+If an error occurs while Druid is sending the response body, the server handling the request stops the response midstream and logs an error.</p><p>This means that when you call the SQL API, you must properly handle response truncation.
+For  <code>object</code> and <code>array</code> formats, truncated responses are invalid JSON.
+For line-oriented formats, Druid includes a newline character as the final character of every complete response. Absence of a final newline character indicates a truncated response.</p><p>If you detect a truncated response, treat it as an error.</p><hr><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sample-request">Sample request<a href="#sample-request" class="hash-link" aria-label="Direct link to Sample request" title="Direct link to Sample request">​</a></h4><p>The following exampl [...]
+In all cases, <code>header</code> is true.
+The examples includes the first row of results, where the value of <code>user</code> is <code>BlueMoon2662</code>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">| Format | typesHeader | sqlTypesH [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/sql-ingestion-api.html/index.html b/docs/31.0.0/api-reference/sql-ingestion-api.html/index.html
new file mode 100644
index 000000000..49320c2c8
--- /dev/null
+++ b/docs/31.0.0/api-reference/sql-ingestion-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/sql-ingestion-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/sql-ingestion-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/sql-ingestion-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/sql-ingestion-api/index.html b/docs/31.0.0/api-reference/sql-ingestion-api/index.html
new file mode 100644
index 000000000..67dcab524
--- /dev/null
+++ b/docs/31.0.0/api-reference/sql-ingestion-api/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/sql-ingestion-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">SQL-based ingestion API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+extension, new in Druid 24.0. Refer to the <a href="/docs/31.0.0/ingestion/#batch">ingestion methods</a> table to determine which
+ingestion method is right for you.</p></div></div><p>The <strong>Query</strong> view in the web console provides a friendly experience for the multi-stage query task engine (MSQ task engine) and multi-stage query architecture. We recommend using the web console if you don&#x27;t need a programmatic interface.</p><p>When using the API for the MSQ task engine, the action you want to take determines the endpoint you use:</p><ul><li><code>/druid/v2/sql/task</code>: Submit a query for ingesti [...]
+<code>query</code>, <code>context</code>, and <code>parameters</code> fields. The endpoint ignores the <code>resultFormat</code>, <code>header</code>, <code>typesHeader</code>, and <code>sqlTypesHeader</code> fields.</li><li><a href="/docs/31.0.0/multi-stage-query/reference#insert">INSERT</a> and <a href="/docs/31.0.0/multi-stage-query/reference#replace">REPLACE</a> statements.</li><li>SELECT queries (experimental feature). SELECT query results are collected from workers by the controlle [...]
+The report provides detailed information about the query task, including things like the stages, warnings, and errors.</p><p>Keep the following in mind when using the task API to view reports:</p><ul><li>The task report for an entire job is associated with the <code>query_controller</code> task. The <code>query_worker</code> tasks don&#x27;t have their own reports; their information is incorporated into the controller report.</li><li>The task report API may report <code>404 Not Found</co [...]
+the <code>multiStageQuery.payload.results.results</code> task report key as an array of arrays. The behavior and result format of plain
+SELECT queries (without INSERT or REPLACE) is subject to change.</li><li><code>multiStageQuery.payload.results.resultsTruncated</code> denotes whether the results of the report have been truncated to prevent the reports from blowing up.</li></ul><p>For an explanation of the fields in a report, see <a href="#report-response-fields">Report response fields</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="url-2">URL<a href="#url-2" class="hash-link" aria-label="Direct link to URL"  [...]
+Returns a JSON object with the ID of the task that was canceled successfully.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h3><p><code>POST</code> <code>/druid/indexer/v1/task/{taskId}/shutdown</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="responses-3">Responses<a href="#responses-3" class="hash-link" aria-label="Direct link to Responses" title="Direct li [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/sql-jdbc.html/index.html b/docs/31.0.0/api-reference/sql-jdbc.html/index.html
new file mode 100644
index 000000000..04156b2f6
--- /dev/null
+++ b/docs/31.0.0/api-reference/sql-jdbc.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/sql-jdbc">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/sql-jdbc" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/sql-jdbc' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/sql-jdbc/index.html b/docs/31.0.0/api-reference/sql-jdbc/index.html
new file mode 100644
index 000000000..daa77366d
--- /dev/null
+++ b/docs/31.0.0/api-reference/sql-jdbc/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/sql-jdbc" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">SQL JDBC driver API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This document describes the SQL language.</p></div></div><p>You can make <a href="/docs/31.0.0/querying/sql">Druid SQL</a> queries using the <a href="https://calcite.apache.org/avatica/downloads/" target="_blank" rel="noopener noreferrer">Avatica JDBC driver</a>.
+We recommend using Avatica JDBC driver version 1.23.0 or later. Note that starting with Avatica 1.21.0, you may need to set the <a href="https://calcite.apache.org/avatica/docs/client_reference.html#transparent_reconnection" target="_blank" rel="noopener noreferrer"><code>transparent_reconnection</code></a> property to <code>true</code> if you notice intermittent query failures.</p><p>Once you&#x27;ve downloaded the Avatica client jar, add it to your classpath.</p><p>Example connection s [...]
+For more information, see <a href="#connection-stickiness">Connection stickiness</a>.</p><p>Set <code>transparent_reconnection</code> to <code>true</code> so your connection is not interrupted if the pool of Brokers changes membership,
+or if a Broker is restarted.</p><p>Set <code>serialization</code> to <code>protobuf</code> if using the protobuf endpoint.</p><p>Note that as of the time of this writing, Avatica 1.23.0, the latest version, does not support passing
+<a href="/docs/31.0.0/querying/sql-query-context">connection context parameters</a> from the JDBC connection string to Druid. These context parameters
+must be passed using a <code>Properties</code> object instead. Refer to the Java code below for an example.</p><p>Example Java code:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">// [...]
+improvements for larger result sets. To use it apply the following connection URL instead, everything else remains the same</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">String url = &quot;jdbc:a [...]
+<a href="/docs/31.0.0/querying/sql-metadata-tables">INFORMATION_SCHEMA tables</a>. For an example of this, see <a href="#get-the-metadata-for-a-datasource">Get the metadata for a datasource</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="connection-stickiness">Connection stickiness<a href="#connection-stickiness" class="hash-link" aria-label="Direct link to Connection stickiness" title="Direct link to Connection stickiness">​</a></h2><p>Druid&#x27;s JDBC server does not share  [...]
+multiple Druid Brokers, you should either connect to a specific Broker or use a load balancer with sticky sessions
+enabled. The Druid Router process provides connection stickiness when balancing JDBC requests, and can be used to achieve
+the necessary stickiness even with a normal non-sticky load balancer. Please see the
+<a href="/docs/31.0.0/design/router">Router</a> documentation for more details.</p><p>Note that the non-JDBC <a href="/docs/31.0.0/api-reference/sql-api#submit-a-query">JSON over HTTP</a> API is stateless and does not require stickiness.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="dynamic-parameters">Dynamic parameters<a href="#dynamic-parameters" class="hash-link" aria-label="Direct link to Dynamic parameters" title="Direct link to Dynamic parameters">​</a></h2><p>You can use  [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/supervisor-api.html/index.html b/docs/31.0.0/api-reference/supervisor-api.html/index.html
new file mode 100644
index 000000000..44beb0ddf
--- /dev/null
+++ b/docs/31.0.0/api-reference/supervisor-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/supervisor-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/supervisor-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/supervisor-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/supervisor-api/index.html b/docs/31.0.0/api-reference/supervisor-api/index.html
new file mode 100644
index 000000000..8b66e7d5a
--- /dev/null
+++ b/docs/31.0.0/api-reference/supervisor-api/index.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/supervisor-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Supervisor API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/api-r [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The topic uses the Apache Kafka term offset to refer to the identifier for records in a partition. If you are using Amazon Kinesis, the equivalent is sequence number.</p><p>In this topic, <code>http://ROUTER_IP:ROUTER_PORT</code> is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="supervisor-infor [...]
+This way, you can apply configuration changes without a pause in ingestion.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-9">URL<a href="#url-9" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/supervisor</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-9">Responses<a href="#responses-9" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Response [...]
+Indexing tasks remain suspended until you <a href="#resume-a-supervisor">resume the supervisor</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-10">URL<a href="#url-10" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/supervisor/{supervisorId}/suspend</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-10">Responses<a href="#responses-10" class="hash-link" aria-label="Direc [...]
+After clearing all stored offsets, the supervisor kills and recreates active tasks,
+so that tasks begin reading from valid positions.</p><p>Use this endpoint to recover from a stopped state due to missing offsets. Use this endpoint with caution as it may result in skipped messages and lead to data loss or duplicate data.</p><p>The indexing service keeps track of the latest persisted offsets to provide exactly-once ingestion guarantees across tasks. Subsequent tasks must start reading from where the previous task completed for Druid to accept the generated segments. If t [...]
+If there are no stored offsets, the specified offsets are set in the metadata store.</p><p>After resetting stored offsets, the supervisor kills and recreates any active tasks pertaining to the specified partitions,
+so that tasks begin reading specified offsets. For partitions that are not specified in this operation, the supervisor resumes from the last stored offset.</p><p>Use this endpoint with caution. It can cause skipped messages, leading to data loss or duplicate data.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-15">URL<a href="#url-15" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/supervisor/{ [...]
+when the supervisor&#x27;s tasks restart, they resume reading from <code>{&quot;0&quot;: 100, &quot;1&quot;: 10, &quot;2&quot;: 650, &quot;3&quot;: 40}</code>.</p></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sample-response-15">Sample response<a href="#sample-response-15" class="hash-link" aria-label="Direct link to Sample response" title="Direct link to Sample response">​</a></h4><details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true">< [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/tasks-api.html/index.html b/docs/31.0.0/api-reference/tasks-api.html/index.html
new file mode 100644
index 000000000..5bb2d1ba9
--- /dev/null
+++ b/docs/31.0.0/api-reference/tasks-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/api-reference/tasks-api">
+    <link rel="canonical" href="/docs/31.0.0/api-reference/tasks-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/api-reference/tasks-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/api-reference/tasks-api/index.html b/docs/31.0.0/api-reference/tasks-api/index.html
new file mode 100644
index 000000000..f69275d48
--- /dev/null
+++ b/docs/31.0.0/api-reference/tasks-api/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/tasks-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Tasks API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/api-refere [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Use the metric <code>segment/added/bytes</code> instead to identify the segment IDs committed by a task.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-7">URL<a href="#url-7" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/indexer/v1/task/{taskId}/segments</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-7">Responses<a href="#responses-7" class="hash-link" aria-label="Dire [...]
+<code>numDeleted</code> for the number of rows deleted from the pending segments table. This API is used by the
+<code>druid.coordinator.kill.pendingSegments.on</code> <a href="/docs/31.0.0/configuration/#coordinator-operation">Coordinator setting</a>
+which automates this operation to perform periodically.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-14">URL<a href="#url-14" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>DELETE</code> <code>/druid/indexer/v1/pendingSegments/{datasource}</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-14">Responses<a href="#responses-14" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Resp [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-elasticsearch.html/index.html b/docs/31.0.0/comparisons/druid-vs-elasticsearch.html/index.html
new file mode 100644
index 000000000..0c696e707
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-elasticsearch.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/comparisons/druid-vs-elasticsearch">
+    <link rel="canonical" href="/docs/31.0.0/comparisons/druid-vs-elasticsearch" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/comparisons/druid-vs-elasticsearch' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/community/join-slack/index.html b/docs/31.0.0/comparisons/druid-vs-elasticsearch/index.html
similarity index 52%
copy from community/join-slack/index.html
copy to docs/31.0.0/comparisons/druid-vs-elasticsearch/index.html
index 1b5a46d58..bb68689aa 100644
--- a/community/join-slack/index.html
+++ b/docs/31.0.0/comparisons/druid-vs-elasticsearch/index.html
@@ -1,9 +1,9 @@
 <!doctype html>
-<html lang="en" dir="ltr" class="mdx-wrapper mdx-page plugin-pages plugin-id-default" data-has-hydrated="false">
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-elasticsearch" data-has-hydrated="false">
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.3">
-<title data-rh="true">Redirecting... | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/community/join-sl [...]
+<title data-rh="true">Apache Druid vs Elasticsearch | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
 <link rel="preconnect" href="https://www.googletagmanager.com">
 <script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
 <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
@@ -14,13 +14,20 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+and provides access to raw event level data. Elasticsearch is increasingly adding more support for analytics and aggregations.
+<a href="https://groups.google.com/forum/#!msg/druid-development/nlpwTHNclj8/sOuWlKOzPpYJ" target="_blank" rel="noopener noreferrer">Some members of the community</a> have pointed out
+the resource requirements for data ingestion and aggregation in Elasticsearch is much higher than those of Druid.</p><p>Elasticsearch also does not support data summarization/roll-up at ingestion time, which can compact the data that needs to be
+stored up to 100x with real-world data sets. This leads to Elasticsearch having greater storage requirements.</p><p>Druid focuses on OLAP work flows. Druid is optimized for high performance (fast aggregation and ingestion) at low cost,
+and supports a wide range of analytic operations. Druid has some basic search support for structured event data, but does not support
+full text search. Druid also does not support completely unstructured data. Measures must be defined in a Druid schema such that
+summarization/roll-up can be done.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div>< [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-key-value.html/index.html b/docs/31.0.0/comparisons/druid-vs-key-value.html/index.html
new file mode 100644
index 000000000..b1ab58c38
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-key-value.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/comparisons/druid-vs-key-value">
+    <link rel="canonical" href="/docs/31.0.0/comparisons/druid-vs-key-value" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/comparisons/druid-vs-key-value' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/licensing/index.html b/docs/31.0.0/comparisons/druid-vs-key-value/index.html
similarity index 50%
copy from licensing/index.html
copy to docs/31.0.0/comparisons/druid-vs-key-value/index.html
index ed720f176..a24c7ea06 100644
--- a/licensing/index.html
+++ b/docs/31.0.0/comparisons/druid-vs-key-value/index.html
@@ -1,9 +1,9 @@
 <!doctype html>
-<html lang="en" dir="ltr" class="mdx-wrapper mdx-page plugin-pages plugin-id-default" data-has-hydrated="false">
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-key-value" data-has-hydrated="false">
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.3">
-<title data-rh="true">License | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/licensing"><meta data-rh [...]
+<title data-rh="true">Apache Druid vs. Key/Value Stores (HBase/Cassandra/OpenTSDB) | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" conte [...]
 <link rel="preconnect" href="https://www.googletagmanager.com">
 <script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
 <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
@@ -14,14 +14,24 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-for other software included as part of Druid.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#license" class="table-of-contents__link toc-highlight">License</a></li><li><a href="#copyright-and-trademark" class="table-of-contents__link toc-highlight">Copyright and Trademark</a></li><li><a href="#does-druid-use-or-embed-any-other-open-source-software" class="table-of-conte [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+is supported in key/value stores in 2 ways:</p><ol><li>Pre-compute all permutations of possible user queries</li><li>Range scans on event data</li></ol><p>When pre-computing results, the key is the exact parameters of the query, and the value is the result of the query.
+The queries return extremely quickly, but at the cost of flexibility, as ad-hoc exploratory queries are not possible with
+pre-computing every possible query permutation. Pre-computing all permutations of all ad-hoc queries leads to result sets
+that grow exponentially with the number of columns of a data set, and pre-computing queries for complex real-world data sets
+can require hours of pre-processing time.</p><p>The other approach to using key/value stores for aggregations to use the dimensions of an event as the key and the event measures as the value.
+Aggregations are done by issuing range scans on this data. Timeseries specific databases such as OpenTSDB use this approach.
+One of the limitations here is that the key/value storage model does not have indexes for any kind of filtering other than prefix ranges,
+which can be used to filter a query down to a metric and time range, but cannot resolve complex predicates to narrow the exact data to scan.
+When the number of rows to scan gets large, this limitation can greatly reduce performance. It is also harder to achieve good
+locality with key/value stores because most don’t support pushing down aggregates to the storage layer.</p><p>For arbitrary exploration of data (flexible data filtering), Druid&#x27;s custom column format enables ad-hoc queries without pre-computation. The format
+also enables fast scans on columns, which is important for good aggregation performance.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedI [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-kudu.html/index.html b/docs/31.0.0/comparisons/druid-vs-kudu.html/index.html
new file mode 100644
index 000000000..a1729c831
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-kudu.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/comparisons/druid-vs-kudu">
+    <link rel="canonical" href="/docs/31.0.0/comparisons/druid-vs-kudu" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/comparisons/druid-vs-kudu' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/licensing/index.html b/docs/31.0.0/comparisons/druid-vs-kudu/index.html
similarity index 51%
copy from licensing/index.html
copy to docs/31.0.0/comparisons/druid-vs-kudu/index.html
index ed720f176..9a8519a4e 100644
--- a/licensing/index.html
+++ b/docs/31.0.0/comparisons/druid-vs-kudu/index.html
@@ -1,9 +1,9 @@
 <!doctype html>
-<html lang="en" dir="ltr" class="mdx-wrapper mdx-page plugin-pages plugin-id-default" data-has-hydrated="false">
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-kudu" data-has-hydrated="false">
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.3">
-<title data-rh="true">License | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/licensing"><meta data-rh [...]
+<title data-rh="true">Apache Druid vs Kudu | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
 <link rel="preconnect" href="https://www.googletagmanager.com">
 <script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
 <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
@@ -14,14 +14,24 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-for other software included as part of Druid.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#license" class="table-of-contents__link toc-highlight">License</a></li><li><a href="#copyright-and-trademark" class="table-of-contents__link toc-highlight">Copyright and Trademark</a></li><li><a href="#does-druid-use-or-embed-any-other-open-source-software" class="table-of-conte [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+the process for updating old values should be higher latency in Druid. However, the requirements in Kudu for maintaining extra head space to store
+updates as well as organizing data by id instead of time has the potential to introduce some extra latency and accessing
+of data that is not needed to answer a query at query time.</p><p>Druid summarizes/rollups up data at ingestion time, which in practice reduces the raw data that needs to be
+stored significantly (up to 40 times on average), and increases performance of scanning raw data significantly.
+Druid segments also contain bitmap indexes for fast filtering, which Kudu does not currently support.
+Druid&#x27;s segment architecture is heavily geared towards fast aggregates and filters, and for OLAP workflows. Appends are very
+fast in Druid, whereas updates of older data are higher latency. This is by design as the data Druid is good for is typically event data,
+and does not need to be updated too frequently. Kudu supports arbitrary primary keys with uniqueness constraints, and
+efficient lookup by ranges of those keys. Kudu chooses not to include the execution engine, but supports sufficient
+operations so as to allow node-local processing from the execution engines. This means that Kudu can support multiple frameworks on the same data (e.g., MR, Spark, and SQL).
+Druid includes its own query layer that allows it to push down aggregations and computations directly to data processes for faster query processing.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_H [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-redshift.html/index.html b/docs/31.0.0/comparisons/druid-vs-redshift.html/index.html
new file mode 100644
index 000000000..737d33af9
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-redshift.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/comparisons/druid-vs-redshift">
+    <link rel="canonical" href="/docs/31.0.0/comparisons/druid-vs-redshift" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/comparisons/druid-vs-redshift' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-redshift/index.html b/docs/31.0.0/comparisons/druid-vs-redshift/index.html
new file mode 100644
index 000000000..0708ff57e
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-redshift/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-redshift" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs Redshift | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-spark.html/index.html b/docs/31.0.0/comparisons/druid-vs-spark.html/index.html
new file mode 100644
index 000000000..787c92d64
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-spark.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/comparisons/druid-vs-spark">
+    <link rel="canonical" href="/docs/31.0.0/comparisons/druid-vs-spark" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/comparisons/druid-vs-spark' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/404.html b/docs/31.0.0/comparisons/druid-vs-spark/index.html
similarity index 57%
copy from 404.html
copy to docs/31.0.0/comparisons/druid-vs-spark/index.html
index 483f820fc..6118469af 100644
--- a/404.html
+++ b/docs/31.0.0/comparisons/druid-vs-spark/index.html
@@ -1,9 +1,9 @@
 <!doctype html>
-<html lang="en" dir="ltr" class="plugin-native plugin-id-default" data-has-hydrated="false">
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-spark" data-has-hydrated="false">
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.3">
-<title data-rh="true">Page Not Found | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/404.html"><meta d [...]
+<title data-rh="true">Apache Druid vs Spark | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0. [...]
 <link rel="preconnect" href="https://www.googletagmanager.com">
 <script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
 <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
@@ -14,13 +14,21 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+RDDs enable data reuse by persisting intermediate results
+in memory and enable Spark to provide fast computations for iterative algorithms.
+This is especially beneficial for certain work flows such as machine
+learning, where the same operation may be applied over and over
+again until some result is converged upon. The generality of Spark makes it very suitable as an engine to process (clean or transform) data.
+Although Spark provides the ability to query data through Spark SQL, much like Hadoop, the query latencies are not specifically targeted to be interactive (sub-second).</p><p>Druid&#x27;s focus is on extremely low latency queries, and is ideal for powering applications used by thousands of users, and where each query must
+return fast enough such that users can interactively explore through data. Druid fully indexes all data, and can act as a middle layer between Spark and your application.
+One typical setup seen in production is to process data in Spark, and load the processed data into Druid for faster access.</p><p>For more information about using Druid and Spark together, including benchmarks of the two systems, please see:</p><p><a href="https://www.linkedin.com/pulse/combining-druid-spark-interactive-flexible-analytics-scale-butani" target="_blank" rel="noopener noreferrer">https://www.linkedin.com/pulse/combining-druid-spark-interactive-flexible-analytics-scale-butan [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop.html/index.html b/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop.html/index.html
new file mode 100644
index 000000000..9a7e919a2
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop">
+    <link rel="canonical" href="/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop/index.html b/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop/index.html
new file mode 100644
index 000000000..b72d5871d
--- /dev/null
+++ b/docs/31.0.0/comparisons/druid-vs-sql-on-hadoop/index.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-sql-on-hadoop" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs SQL-on-Hadoop | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+execution engine for various data formats and data stores, and
+many can be made to push down computations down to Druid, while providing a SQL interface to Druid.</p><p>For a direct comparison between the technologies and when to only use one or the other, things basically comes down to your
+product requirements and what the systems were designed to do.</p><p>Druid was designed to</p><ol><li>be an always on service</li><li>ingest data in real-time</li><li>handle slice-n-dice style ad-hoc queries</li></ol><p>SQL-on-Hadoop engines generally sidestep Map/Reduce, instead querying data directly from HDFS or, in some cases, other storage systems.
+Some of these engines (including Impala and Presto) can be co-located with HDFS data nodes and coordinate with them to achieve data locality for queries.
+What does this mean?  We can talk about it in terms of three general areas</p><ol><li>Queries</li><li>Data Ingestion</li><li>Query Flexibility</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="queries">Queries<a href="#queries" class="hash-link" aria-label="Direct link to Queries" title="Direct link to Queries">​</a></h3><p>Druid segments stores data in a custom column format. Segments are scanned directly as part of queries and each Druid server
+calculates a set of results that are eventually merged at the Broker level. This means the data that is transferred between servers
+are queries and results, and all computation is done internally as part of the Druid servers.</p><p>Most SQL-on-Hadoop engines are responsible for query planning and execution for underlying storage layers and storage formats.
+They are processes that stay on even if there is no query running (eliminating the JVM startup costs from Hadoop MapReduce).
+Some (Impala/Presto) SQL-on-Hadoop engines have daemon processes that can be run where the data is stored, virtually eliminating network transfer costs. There is still
+some latency overhead (e.g. serialization/deserialization time) associated with pulling data from the underlying storage layer into the computation layer. We are unaware of exactly
+how much of a performance impact this makes.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="data-ingestion">Data Ingestion<a href="#data-ingestion" class="hash-link" aria-label="Direct link to Data Ingestion" title="Direct link to Data Ingestion">​</a></h3><p>Druid is built to allow for real-time ingestion of data.  You can ingest data and query it immediately upon ingestion,
+the latency between how quickly the event is reflected in the data is dominated by how long it takes to deliver the event to Druid.</p><p>SQL-on-Hadoop, being based on data in HDFS or some other backing store, are limited in their data ingestion rates by the
+rate at which that backing store can make data available.  Generally, the backing store is the biggest bottleneck for
+how quickly data can become available.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="query-flexibility">Query Flexibility<a href="#query-flexibility" class="hash-link" aria-label="Direct link to Query Flexibility" title="Direct link to Query Flexibility">​</a></h3><p>Druid&#x27;s query language is fairly low level and maps to how Druid operates internally. Although Druid can be combined with a high level query
+planner to support most SQL queries and analytic SQL queries (minus joins among large tables),
+base Druid is less flexible than SQL-on-Hadoop solutions for generic processing.</p><p>SQL-on-Hadoop support SQL style queries with full joins.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="druid-vs-parquet">Druid vs Parquet<a href="#druid-vs-parquet" class="hash-link" aria-label="Direct link to Druid vs Parquet" title="Direct link to Druid vs Parquet">​</a></h2><p>Parquet is a column storage format that is designed to work with SQL-on-Hadoop engines. Parquet doesn&#x27;t have a  [...]
+relies on external sources to pull data out of it.</p><p>Druid&#x27;s storage format is highly optimized for linear scans. Although Druid has support for nested data, Parquet&#x27;s storage format is much
+more hierarchical, and is more designed for binary chunking. In theory, this should lead to faster scans in Druid.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#queries" class="table-of-contents__link toc-highlight">Queries</a></li><li><a href="#data-ingestion"  [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration.html/index.html b/docs/31.0.0/configuration.html/index.html
new file mode 100644
index 000000000..f3e52e4d5
--- /dev/null
+++ b/docs/31.0.0/configuration.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/">
+    <link rel="canonical" href="/docs/31.0.0/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/auth.html/index.html b/docs/31.0.0/configuration/auth.html/index.html
new file mode 100644
index 000000000..28bfb4662
--- /dev/null
+++ b/docs/31.0.0/configuration/auth.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/operations/auth">
+    <link rel="canonical" href="/docs/31.0.0/operations/auth" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/operations/auth' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/broker.html/index.html b/docs/31.0.0/configuration/broker.html/index.html
new file mode 100644
index 000000000..f3e52e4d5
--- /dev/null
+++ b/docs/31.0.0/configuration/broker.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/">
+    <link rel="canonical" href="/docs/31.0.0/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/caching.html/index.html b/docs/31.0.0/configuration/caching.html/index.html
new file mode 100644
index 000000000..f3e52e4d5
--- /dev/null
+++ b/docs/31.0.0/configuration/caching.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/">
+    <link rel="canonical" href="/docs/31.0.0/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/coordinator.html/index.html b/docs/31.0.0/configuration/coordinator.html/index.html
new file mode 100644
index 000000000..f3e52e4d5
--- /dev/null
+++ b/docs/31.0.0/configuration/coordinator.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/">
+    <link rel="canonical" href="/docs/31.0.0/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/extensions.html/index.html b/docs/31.0.0/configuration/extensions.html/index.html
new file mode 100644
index 000000000..69936e145
--- /dev/null
+++ b/docs/31.0.0/configuration/extensions.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/extensions">
+    <link rel="canonical" href="/docs/31.0.0/configuration/extensions" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/extensions' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/extensions/index.html b/docs/31.0.0/configuration/extensions/index.html
new file mode 100644
index 000000000..2fb2be988
--- /dev/null
+++ b/docs/31.0.0/configuration/extensions/index.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/extensions" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Extensions | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/configura [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+are commonly used to add support for deep storages (like HDFS and S3), metadata stores (like MySQL
+and PostgreSQL), new aggregators, new input formats, and so on.</p><p>Production clusters will generally use at least two extensions; one for deep storage and one for a
+metadata store. Many clusters will also use additional extensions.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="core-extensions">Core extensions<a href="#core-extensions" class="hash-link" aria-label="Direct link to Core extensions" title="Direct link to Core extensions">​</a></h2><p>Core extensions are maintained by Druid committers.</p><table><thead><tr><th>Name</th><th>Description</th><th>Docs</th></tr></thead><tbody><tr><td>druid-avro-extensions</td><td>Support for data in A [...]
+If you&#x27;d like to take on maintenance for a community extension, please post on <a href="https://lists.apache.org/list.html?dev@druid.apache.org" target="_blank" rel="noopener noreferrer">dev@druid.apache.org</a> to let us know!</p><p>All of these community extensions can be downloaded using <a href="/docs/31.0.0/operations/pull-deps">pull-deps</a> while specifying a <code>-c</code> coordinate option to pull <code>org.apache.druid.extensions.contrib:{EXTENSION_NAME}:{DRUID_VERSION}</ [...]
+If we see a community extension actively supported by the community, we can promote it to core based on community feedback.</p><p>For information how to create your own extension, please see <a href="/docs/31.0.0/development/modules">here</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="loading-extensions">Loading extensions<a href="#loading-extensions" class="hash-link" aria-label="Direct link to Loading extensions" title="Direct link to Loading extensions">​</a></h2><h3 class [...]
+See the <a href="/docs/31.0.0/configuration/extensions#core-extensions">list of extensions</a> for your options. You
+can load bundled extensions by adding their names to your common.runtime.properties
+<code>druid.extensions.loadList</code> property. For example, to load the postgresql-metadata-storage and
+druid-hdfs-storage extensions, use the configuration:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.extensions.loadList=[&quot;postgresql-metadata-storage&quot;, & [...]
+one for a <a href="/docs/31.0.0/tutorials/cluster">clustered configuration</a>. Make sure you are updating the correct
+<code>common.runtime.properties</code> for your setup.</p></div></div><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><d [...]
+on how to install this library, see the <a href="/docs/31.0.0/development/extensions-core/mysql">MySQL extension page</a>.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="loading-community-extensions">Loading community extensions<a href="#loading-community-extensions" class="hash-link" aria-label="Direct link to Loading community extensions" title="Direct link to Loading community extensions">​</a></h3><p>You can also load community and third-party extensions not alread [...]
+then install it into your <code>extensions</code> directory. You can download extensions from their distributors directly, or
+if they are available from Maven, the included <a href="/docs/31.0.0/operations/pull-deps">pull-deps</a> can download them for you. To use <em>pull-deps</em>,
+specify the full Maven coordinate of the extension in the form <code>groupId:artifactId:version</code>. For example,
+for the (hypothetical) extension <em>com.example:druid-example-extension:1.0.0</em>, run:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">java </span><span class="token punctuation" [...]
+<code>druid.extensions.loadList</code> in common.runtime.properties to instruct Druid to load the extension.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6 [...]
+of the extension, and the version is the latest Druid stable version.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="loading-extensions-from-the-classpath">Loading extensions from the classpath<a href="#loading-extensions-from-the-classpath" class="hash-link" aria-label="Direct link to Loading extensions from the classpath" title="Direct link to Loading extensions from the classpath">​</a></h3><p>If you add your extension jar to the classpath at runtime, Druid will als [...]
+but it also means that you have to ensure that all dependency jars on the classpath are compatible. That is, Druid makes no provisions while using
+this method to maintain class loader isolation so you must make sure that the jars on your classpath are mutually compatible.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/configuration/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Configuration reference</div></a><a class="pagination-nav__link pagination-nav__link--next" href= [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/hadoop.html/index.html b/docs/31.0.0/configuration/hadoop.html/index.html
new file mode 100644
index 000000000..c66dbfb42
--- /dev/null
+++ b/docs/31.0.0/configuration/hadoop.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/hadoop">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/hadoop" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/hadoop' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/historical.html/index.html b/docs/31.0.0/configuration/historical.html/index.html
new file mode 100644
index 000000000..f3e52e4d5
--- /dev/null
+++ b/docs/31.0.0/configuration/historical.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/">
+    <link rel="canonical" href="/docs/31.0.0/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/human-readable-byte.html/index.html b/docs/31.0.0/configuration/human-readable-byte.html/index.html
new file mode 100644
index 000000000..22b8a1590
--- /dev/null
+++ b/docs/31.0.0/configuration/human-readable-byte.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/human-readable-byte">
+    <link rel="canonical" href="/docs/31.0.0/configuration/human-readable-byte" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/human-readable-byte' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/human-readable-byte/index.html b/docs/31.0.0/configuration/human-readable-byte/index.html
new file mode 100644
index 000000000..3c69f7e0e
--- /dev/null
+++ b/docs/31.0.0/configuration/human-readable-byte/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/human-readable-byte" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Human-readable Byte Configuration Reference | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Also, only integers are valid as the number part. For example, you can&#x27;t replace <code>1200g</code> with <code>1.2t</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="supported-units">Supported Units<a href="#supported-units" class="hash-link" aria-label="Direct link to Supported Units" title="Direct link to Supported Units">​</a></h3><p>In the world of computer, a unit like <code>K</code> is ambiguous. It means 1000 or 1024 in different contexts, for more information ple [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/index.html b/docs/31.0.0/configuration/index.html
new file mode 100644
index 000000000..b992240ef
--- /dev/null
+++ b/docs/31.0.0/configuration/index.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/index" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Configuration reference | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+For example, if <code>druid.zk.paths.base</code> is set to <code>/druid1</code> and <code>druid.zk.paths.indexer.base</code> is set to <code>/druid2</code> then <code>druid.zk.paths.announcementsPath</code> will default to <code>/druid1/announcements</code> while <code>druid.zk.paths.indexer.announcementsPath</code> will default to <code>/druid2/announcements</code>.</p><p>The following path is used for service discovery. It is <strong>not</strong> affected by <code>druid.zk.paths.base</ [...]
+and <code>druid.tlsPort</code> properties on each service. Please see <code>Configuration</code> section of individual services to check the valid and default values for these ports.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="jetty-server-tls-configuration">Jetty server TLS configuration<a href="#jetty-server-tls-configuration" class="hash-link" aria-label="Direct link to Jetty server TLS configuration" title="Direct link to Jetty server TLS configuration">​</a></h4><p>Druid u [...]
+The <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html" target="_blank" rel="noopener noreferrer">Java Cryptography Architecture
+Standard Algorithm Name Documentation for JDK 8</a> lists all possible
+values for the following properties, among others provided by the Java implementation.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>druid.server.https.keyStorePath</code></td><td>The file path or URL of the TLS/SSL KeyStore.</td><td>none</td><td>yes</td></tr><tr><td><code>druid.server.https.keyStoreType</code></td><td>The type of the KeyStore.</td><td>none</td><td>yes</td></tr><tr><td><code>druid.server.https [...]
+values for the above mentioned configs among others provided by Java implementation.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="authentication-and-authorization">Authentication and authorization<a href="#authentication-and-authorization" class="hash-link" aria-label="Direct link to Authentication and authorization" title="Direct link to Authentication and authorization">​</a></h3><table><thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Default</th><th>Required</ [...]
+For an example of setting up request logging, see <a href="/docs/31.0.0/operations/request-logging">Request logging</a>.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.request.logging.type</code></td><td>How to log every query request. Choices: <code>noop</code>, <a href="#file-request-logging"><code>file</code></a>, <a href="#emitter-request-logging"><code>emitter</code></a>, <a href="#slf4j-request-logging"><code>slf4j< [...]
+For native queries, the logger only logs requests when the <code>query/time</code> metric exceeds the threshold provided in <code>queryTimeThresholdMs</code>.
+For SQL queries, it only logs requests when the <code>sqlQuery/time</code> metric exceeds threshold provided in <code>sqlQueryTimeThresholdMs</code>.
+See <a href="/docs/31.0.0/operations/metrics">Metrics</a> for more details on query metrics.</p><p>Requests that meet the threshold are logged using the request logger type set in <code>druid.request.logging.delegate.type</code>.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.request.logging.queryTimeThresholdMs</code></td><td>Threshold value for the <code>query/time</code> metric in milliseconds.</td><td>0, i.e., no filt [...]
+<code>druid.emitter.logging.loggerClass</code> to emit events. Each event is logged as a single <code>json</code> object with a
+<a href="https://logging.apache.org/log4j/2.x/manual/markers.html" target="_blank" rel="noopener noreferrer">Marker</a> as the feed of the event. Users may wish to edit the
+log4j config to route these logs to different sources based on the feed of the event.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.emitter.logging.loggerClass</code></td><td>The class used for logging.</td><td><code>org.apache.druid.java.util.emitter.core.LoggingEmitter</code></td></tr><tr><td><code>druid.emitter.logging.logLevel</code></td><td>Choices: debug, info, warn, error. The log level at which message are logged [...]
+For example:</p><ul><li><code>druid.emitter.parametrized.httpEmitting.flushMillis</code></li><li><code>druid.emitter.parametrized.httpEmitting.flushCount</code></li><li><code>druid.emitter.parametrized.httpEmitting.ssl.trustStorePath</code></li></ul><p>Do not specify <code>recipientBaseUrl</code> with the parametrized emitter.
+Instead use <code>recipientBaseUrlPattern</code> described in the table below.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.emitter.parametrized.recipientBaseUrlPattern</code></td><td>The URL pattern to send an event to, based on the event&#x27;s feed. For example, <code>http://foo.bar/{feed}</code>, that will send event to <code>http://foo.bar/metrics</code> if the event&#x27;s feed is &quot;metrics&quot;.</td><td>none [...]
+The below table shows some important configurations for S3. See <a href="/docs/31.0.0/development/extensions-core/s3">S3 Deep Storage</a> for full configurations.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.storage.bucket</code></td><td>S3 bucket name.</td><td>none</td></tr><tr><td><code>druid.storage.baseKey</code></td><td>S3 object key prefix for storage.</td><td>none</td></tr><tr><td><code>druid.storage.disableAcl</ [...]
+Traditionally, the datasource schema is built in the Brokers by combining schema for all the available segments of a datasource.
+Brokers issue segment metadata query to data nodes and tasks to fetch segment schema.
+In the new arrangement, tasks publish segment schema along with segment metadata to the database and schema for realtime segments is periodically pushed to the Coordinator in the segment announcement flow.
+This enables Coordinator to cache segment schemas and build datasource schema by combining segment schema.
+Brokers query the datasource schema from the Coordinator, while retaining the ability to build table schema if the
+need arises.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>druid.centralizedDatasourceSchema.enabled</code></td><td>Boolean flag for enabling datasource schema building in the Coordinator, this should be specified in the common runtime properties.</td><td>false</td><td>No.</td></tr><tr><td><code>druid.indexer.fork.property.druid.centralizedDatasourceSchema.enabled</code></td><td>This config should be set when  [...]
+the <a href="/docs/31.0.0/ingestion/input-sources#hdfs-input-source">HDFS input source</a>.</p><table><thead><tr><th>Property</th><th>Possible values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.ingestion.hdfs.allowedProtocols</code></td><td>List of protocols</td><td>Allowed protocols for the HDFS input source.</td><td><code>[&quot;hdfs&quot;]</code></td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="http-input-source">HTTP inpu [...]
+the <a href="/docs/31.0.0/ingestion/input-sources#http-input-source">HTTP input source</a>.</p><table><thead><tr><th>Property</th><th>Possible values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.ingestion.http.allowedProtocols</code></td><td>List of protocols</td><td>Allowed protocols for the HTTP input source.</td><td><code>[&quot;http&quot;, &quot;https&quot;]</code></td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="external- [...]
+When you specify an error response transform strategy other than <code>none</code>, Druid transforms the error responses from Druid services as follows:</p><ul><li>For any query API that fails in the Router service, Druid sets the fields <code>errorClass</code> and <code>host</code> to null. Druid applies the transformation strategy to the <code>errorMessage</code> field.</li><li>For any SQL query API that fails, for example <code>POST /druid/v2/sql/...</code>, Druid sets the fields <cod [...]
+This is the default Druid error response mode. To explicitly enable this strategy, set <code>druid.server.http.errorResponseTransform.strategy</code> to <code>none</code>.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="allowed-regular-expression-error-response-transform-strategy">Allowed regular expression error response transform strategy<a href="#allowed-regular-expression-error-response-transform-strategy" class="hash-link" aria-label="Direct link to Allowed regular expression  [...]
+the following properties.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.javascript.enabled</code></td><td>Set to &quot;true&quot; to enable JavaScript functionality. This affects the JavaScript parser, filter, extractionFn, aggregator, post-aggregator, router strategy, and worker selection strategy.</td><td>false</td></tr></tbody></table><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9 [...]
+doubleSum, doubleMin, and doubleMax aggregators at indexing time.
+Starting from version 0.13.0 the default will be 64-bit floats for Double columns.
+Using 64-bit representation for double column will lead to avoid precision loss at the cost of doubling the storage size of such columns.
+To keep the old format set the system-wide property <code>druid.indexing.doubleStorage=float</code>.
+You can also use <code>floatSum</code>, <code>floatMin</code>, and <code>floatMax</code> to use 32-bit float representation.
+Support for 64-bit floating point columns was released in Druid 0.11.0, so if you use this feature then older versions of Druid will not be able to read your data segments.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.indexing.doubleStorage</code></td><td>Set to &quot;float&quot; to use 32-bit double representation for double columns.</td><td>double</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" [...]
+You can configure these parameters using the <a href="/docs/31.0.0/operations/web-console">web console</a>(recommended) or through the <a href="/docs/31.0.0/api-reference/dynamic-configuration-api#coordinator-dynamic-configuration">Coordinator dynamic configuration API</a>.</p><p>The following table shows the dynamic configuration properties for the Coordinator.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>millisToWaitBeforeD [...]
+If you enable this mode, do not provide values for the properties in the table below as the Coordinator computes them automatically.
+Druid computes the values to optimize Coordinator performance, based on the current state of the cluster.</p><p>If you enable <code>smartSegmentLoading</code> mode, Druid ignores any value you provide for the following properties.</p><table><thead><tr><th>Property</th><th>Computed value</th><th>Description</th></tr></thead><tbody><tr><td><code>useRoundRobinSegmentAssignment</code></td><td>true</td><td>Speeds up segment assignment.</td></tr><tr><td><code>maxSegmentsInNodeLoadingQueue</cod [...]
+Disable <code>smartSegmentLoading</code> only if you want to explicitly set the values of any of the above properties.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="lookups-dynamic-configuration">Lookups dynamic configuration<a href="#lookups-dynamic-configuration" class="hash-link" aria-label="Direct link to Lookups dynamic configuration" title="Direct link to Lookups dynamic configuration">​</a></h5><p>These configuration options control Coordinator lookup management. For confi [...]
+<a href="/docs/31.0.0/api-reference/automatic-compaction-api">Automatic compaction API</a> without restarting Coordinators.</p><p>For details about segment compaction, see <a href="/docs/31.0.0/operations/segment-optimization">Segment size optimization</a>.</p><p>You can configure automatic compaction through the following properties:</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td><code>dataSource</code></td><td>The datasource name  [...]
+You may see this issue with streaming ingestion from Kafka and Kinesis, which ingest late-arriving data.</p><p>To mitigate this problem, set <code>skipOffsetFromLatest</code> to a value large enough so that arriving data tends to fall outside the offset value from the current time. This way you can avoid conflicts between compaction tasks and realtime ingestion tasks.
+For example, if you want to skip over segments from thirty days prior to the end time of the most recent segment, assign <code>&quot;skipOffsetFromLatest&quot;: &quot;P30D&quot;</code>.
+For more information, see <a href="/docs/31.0.0/data-management/automatic-compaction#avoid-conflicts-with-ingestion">Avoid conflicts with ingestion</a>.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="automatic-compaction-tuningconfig">Automatic compaction tuningConfig<a href="#automatic-compaction-tuningconfig" class="hash-link" aria-label="Direct link to Automatic compaction tuningConfig" title="Direct link to Automatic compaction tuningConfig">​</a></h6><p>Auto-compaction suppor [...]
+The below is a list of the supported configurations for auto-compaction.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>dropExisting</code></td><td>If <code>true</code> the compaction task replaces all existing segments fully contained by the umbrella interval of the compacted segments when the task publishes new segments and tombstones. If compaction fails, Druid does not publish any segments or tombstones. WA [...]
+You can configure these parameters using the <a href="/docs/31.0.0/operations/web-console">web console</a> or through the <a href="/docs/31.0.0/api-reference/dynamic-configuration-api#overlord-dynamic-configuration">Overlord dynamic configuration API</a>.</p><p>The following table shows the dynamic configuration properties for the Overlord.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>selectStrategy</code></td><td>Describes h [...]
+At a high level, the select strategy determines the list of eligible workers for a given task using
+either an <code>affinityConfig</code> or a <code>categorySpec</code>. Then, Druid assigns the task by either trying to distribute load equally
+(<code>equalDistribution</code>) or to fill as many workers as possible to capacity (<code>fillCapacity</code>).
+There are 4 options for select strategies:</p><ul><li><a href="#equaldistribution"><code>equalDistribution</code></a></li><li><a href="#equaldistributionwithcategoryspec"><code>equalDistributionWithCategorySpec</code></a></li><li><a href="#fillcapacity"><code>fillCapacity</code></a></li><li><a href="#fillcapacitywithcategoryspec"><code>fillCapacityWithCategorySpec</code></a></li></ul><p>A <code>javascript</code> option is also available but should only be used for prototyping new strateg [...]
+not be assigned a category, and you want the work to be concentrated on the fewest number of workers to allow the empty ones to scale down.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="equaldistribution"><code>equalDistribution</code><a href="#equaldistribution" class="hash-link" aria-label="Direct link to equaldistribution" title="Direct link to equaldistribution">​</a></h6><p>Tasks are assigned to the Middle Manager with the most free slots at the time the task begins running.
+This evenly distributes work across your Middle Managers.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>equalDistribution</code></td><td>required; must be <code>equalDistribution</code></td></tr><tr><td><code>affinityConfig</code></td><td><a href="#affinityconfig"><code>AffinityConfig</code></a> object</td><td>null (no affinity)</td></tr></tbody></table><h6 class="anchor anchorWithStickyNavbar_LWe7" i [...]
+By specifying <code>workerCategorySpec</code>, you can assign tasks to run on different categories of Middle Managers based on the <strong>type</strong> and <strong>dataSource</strong> of the task.
+This strategy doesn&#x27;t work with <code>AutoScaler</code> since the behavior is undefined.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>equalDistributionWithCategorySpec</code></td><td>required; must be <code>equalDistributionWithCategorySpec</code></td></tr><tr><td><code>workerCategorySpec</code></td><td><a href="#workercategoryspec"><code>WorkerCategorySpec</code></a> object</td><td>null (no wor [...]
+useful when you are auto-scaling Middle Managers since it tends to pack some full and
+leave others empty. The empty ones can be safely terminated.</p><p>Note that if <code>druid.indexer.runner.pendingTasksRunnerNumThreads</code> is set to <em>N</em> &gt; 1, then this strategy will fill <em>N</em>
+Middle Managers up to capacity simultaneously, rather than a single Middle Manager.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>fillCapacity</code></td><td>required; must be <code>fillCapacity</code></td></tr><tr><td><code>affinityConfig</code></td><td><a href="#affinityconfig"><code>AffinityConfig</code></a> object</td><td>null (no affinity)</td></tr></tbody></table><h6 class="anchor anchorWithStic [...]
+The usage is the same as <code>equalDistributionWithCategorySpec</code> strategy.
+This strategy doesn&#x27;t work with <code>AutoScaler</code> since the behavior is undefined.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>fillCapacityWithCategorySpec</code>.</td><td>required; must be <code>fillCapacityWithCategorySpec</code></td></tr><tr><td><code>workerCategorySpec</code></td><td><a href="#workercategoryspec"><code>WorkerCategorySpec</code></a> object</td><td>null (no worker categ [...]
+The function is passed remoteTaskRunnerConfig, map of workerId to available workers and task to be executed and returns the workerId on which the task should be run or null if the task cannot be run.
+It can be used for rapid development of missing features where the worker selection logic is to be changed or tuned often.
+If the selection logic is quite complex and cannot be easily tested in JavaScript environment,
+its better to write a druid extension module with extending current worker selection strategies written in java.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>javascript</code></td><td>required; must be <code>javascript</code></td></tr><tr><td><code>function</code></td><td>String representing JavaScript function</td><td></td></tr></tbody></table><p>The following example shows a function that sends <co [...]
+If not provided, the default is to have no affinity.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>affinity</code></td><td>JSON object mapping a datasource String name to a list of indexing service Middle Manager <code>host:port</code> values. Druid doesn&#x27;t perform DNS resolution, so the &#x27;host&#x27; value must match what is configured on the Middle Manager and what the Middle Manager announces itself as (examine the  [...]
+field. If not provided, the default is to not use it at all.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>categoryMap</code></td><td>A JSON map object mapping a task type String name to a <a href="#categoryconfig">CategoryConfig</a> object, by which you can specify category config for different task type.</td><td><code>{}</code></td></tr><tr><td><code>strong</code></td><td>With weak workerCategorySpec (the default), tasks for [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> in
+<code>druid.indexer.runner.javaOptsArray</code> as documented above.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="peon-query-configuration">Peon query configuration<a href="#peon-query-configuration" class="hash-link" aria-label="Direct link to Peon query configuration" title="Direct link to Peon query configuration">​</a></h4><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="peon-caching">Peon ca [...]
+The following types of medium exist for the buffers:</p><ul><li><p><strong>Temporary files</strong> (<code>tmpFile</code>) are stored under the task working directory (see <code>druid.worker.baseTaskDirs</code> configuration above) and thus share it&#x27;s mounting properties. For example, they could be backed by HDD, SSD or memory (tmpfs).
+This type of medium may do unnecessary disk I/O and requires some disk space to be available.</p></li><li><p><strong>Off-heap memory</strong> (<code>offHeapMemory</code>) creates buffers in off-heap memory of a JVM process that is running a task.
+This type of medium is preferred, but it may require you to allow the JVM to have more off-heap memory by changing the <code>-XX:MaxDirectMemorySize</code> configuration. It&#x27;s not understood yet how the required off-heap memory size relates to the size of the segments being created. But you shouldn&#x27;t add more extra off-heap memory than the configured maximum <em>heap</em> size (<code>-Xmx</code>) for the same JVM.</p></li><li><p><strong>On-heap memory</strong> (<code>onHeapMemo [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> at the command
+line.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="query-configurations">Query configurations<a href="#query-configurations" class="hash-link" aria-label="Direct link to Query configurations" title="Direct link to Query configurations">​</a></h4><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="indexer-caching">Indexer caching<a href="#indexer-caching" class="hash-link" aria-label="Direct link to  [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> at the command
+line.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="historical-query-configuration">Historical query configuration<a href="#historical-query-configuration" class="hash-link" aria-label="Direct link to Historical query configuration" title="Direct link to Historical query configuration">​</a></h5><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="historical-caching">Historical caching<a href="#histor [...]
+Therefore, there are guardrails that are built in Druid to prevent the queries from generating subquery results which can exhaust the heap
+space. They can be set on a cluster level or modified per query level as desired.
+Note the following guardrails that can be set by the cluster admin to limit the subquery results:</p><ol><li><code>druid.server.http.maxSubqueryRows</code> in broker&#x27;s config to set a default for the entire cluster or <code>maxSubqueryRows</code> in the query context to set an upper limit on the number of rows a subquery can generate</li><li><code>druid.server.http.maxSubqueryBytes</code> in broker&#x27;s config to set a default for the entire cluster or <code>maxSubqueryBytes</code [...]
+rows in the order of magnitude of around 10 million and above. In those scenarios, disable the <code>maxSubqueryBytes</code> settings for such queries, assess the number of rows that the subqueries generate and override the <code>maxSubqueryRows</code> to appropriate value.</p><p>If you choose to modify or set any of the above limits, you must also think about the heap size of all Brokers, Historicals, and task Peons that process data for the subqueries to accommodate the subquery results.
+There is no formula to calculate the correct value. Trial and error is the best approach.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="manual-laning-strategy">Manual laning strategy<a href="#manual-laning-strategy" class="hash-link" aria-label="Direct link to Manual laning strategy" title="Direct link to Manual laning strategy">​</a></h6><p>This laning strategy is best suited for cases where one or more external applications which query Druid are capable of manually deciding wha [...]
+client has the following configuration options.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.broker.http.numConnections</code></td><td>Size of connection pool for the Broker to connect to Historical and real-time processes. If there are more queries than this number that all need to speak to the same process, then they will queue up.</td><td>20</td></tr><tr><td><code>druid.broker.http.eagerInitialization</code></td><td> [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> at the command
+line.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="broker-query-configuration">Broker query configuration<a href="#broker-query-configuration" class="hash-link" aria-label="Direct link to Broker query configuration" title="Direct link to Broker query configuration">​</a></h5><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="broker-generated-query-configuration-supplementation">Broker generated que [...]
+of these queries.</p><p>As of now the only supported augmentation is overriding the default query context. This allows an operator the flexibility
+to adjust it as they see fit. A common use of this configuration is to override the query priority of the cluster generated
+queries in order to avoid running as a default priority of 0.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.broker.internal.query.config.context</code></td><td>A string formatted <code>key:value</code> map of a query context to add to internally generated broker queries.</td><td>null</td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sql">SQL<a href="#sql" class="hash-link" aria-label="Direct lin [...]
+These properties are no longer available. Since Druid 0.18.0, you can use <code>druid.server.http.maxSubqueryRows</code> to control the maximum
+number of rows permitted across all subqueries.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="broker-caching">Broker caching<a href="#broker-caching" class="hash-link" aria-label="Direct link to Broker caching" title="Direct link to Broker caching">​</a></h4><p>You can optionally only configure caching to be enabled on the Broker by setting caching configs here.</p><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></th [...]
+See <a href="/docs/31.0.0/querying/caching">Query caching</a> for more information.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="segment-discovery">Segment discovery<a href="#segment-discovery" class="hash-link" aria-label="Direct link to Segment discovery" title="Direct link to Segment discovery">​</a></h4><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.serverview.type</code></td> [...]
+<a href="#broker-caching">Broker</a>, <a href="#historical-caching">Historical</a>, and <a href="#peon-caching">Peon</a> configuration options for how to
+enable it for different processes.</p><p>Druid uses a local in-memory cache by default, unless a different type of cache is specified.
+Use the <code>druid.cache.type</code> configuration to set a different kind of cache.</p><p>Cache settings are set globally, so the same configuration can be re-used
+for both Broker and Historical processes, when defined in the common properties file.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="cache-type">Cache type<a href="#cache-type" class="hash-link" aria-label="Direct link to Cache type" title="Direct link to Cache type">​</a></h3><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.cache.type</code></td><td><code>local</code>, <code>memcached</code>, <c [...]
+This may be used to combine a local in-memory cache with a remote memcached cache.</p><p>Cache requests will first check L1 cache before checking L2.
+If there is an L1 miss and L2 hit, it will also populate L1.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.cache.l1.type</code></td><td>The type of cache to use for L1 cache. See <code>druid.cache.type</code> configuration for valid types.</td><td><code>caffeine</code></td></tr><tr><td><code>druid.cache.l2.type</code></td><td>The type of cache to use for L2 cache. See <code>druid.cache.type</code> configuration for valid [...]
+The <code>druid.query.default.context.{query_context_key}</code> runtime property prefix applies to all current and future query context keys, the same as how query context parameter passed with the query works. You can override the runtime property value if the value for the same key is specified in the query contexts.</p><p>The precedence chain for query context values is as follows:</p><p>hard-coded default value in Druid code &lt;- runtime property not prefixed with <code>druid.query [...]
+&lt;- runtime property prefixed with <code>druid.query.default.context</code> &lt;- context parameter in the query</p><p>Note that not all query context key has a runtime property not prefixed with <code>druid.query.default.context</code> that can
+override the hard-coded default value. For example, <code>maxQueuedBytes</code> has <code>druid.broker.http.maxQueuedBytes</code>
+but <code>joinFilterRewriteMaxSize</code> does not. Hence, the only way of overriding <code>joinFilterRewriteMaxSize</code> hard-coded default
+value is with runtime property <code>druid.query.default.context.joinFilterRewriteMaxSize</code>.</p><p>To further elaborate on the previous example:</p><p>If neither <code>druid.broker.http.maxQueuedBytes</code> or <code>druid.query.default.context.maxQueuedBytes</code> is set and
+the query does not have <code>maxQueuedBytes</code> in the context, then the hard-coded value in Druid code is use.
+If runtime property only contains <code>druid.broker.http.maxQueuedBytes=x</code> and query does not have <code>maxQueuedBytes</code> in the
+context, then the value of the property, <code>x</code>, is use. However, if query does have <code>maxQueuedBytes</code> in the context,
+then that value is use instead.
+If runtime property only contains <code>druid.query.default.context.maxQueuedBytes=y</code> OR runtime property contains both
+<code>druid.broker.http.maxQueuedBytes=x</code> and <code>druid.query.default.context.maxQueuedBytes=y</code>, then the value of
+<code>druid.query.default.context.maxQueuedBytes</code>, <code>y</code>, is use (given that query does not have <code>maxQueuedBytes</code> in the
+context). If query does have <code>maxQueuedBytes</code> in the context, then that value is use instead.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="topn-query-config">TopN query config<a href="#topn-query-config" class="hash-link" aria-label="Direct link to TopN query config" title="Direct link to TopN query config">​</a></h3><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.query.topN.minTopNThreshold</code></td><td [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/indexing-service.html/index.html b/docs/31.0.0/configuration/indexing-service.html/index.html
new file mode 100644
index 000000000..f3e52e4d5
--- /dev/null
+++ b/docs/31.0.0/configuration/indexing-service.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/">
+    <link rel="canonical" href="/docs/31.0.0/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/logging.html/index.html b/docs/31.0.0/configuration/logging.html/index.html
new file mode 100644
index 000000000..8e5c04a2c
--- /dev/null
+++ b/docs/31.0.0/configuration/logging.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/logging">
+    <link rel="canonical" href="/docs/31.0.0/configuration/logging" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/logging' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/logging/index.html b/docs/31.0.0/configuration/logging/index.html
new file mode 100644
index 000000000..2398ba920
--- /dev/null
+++ b/docs/31.0.0/configuration/logging/index.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/logging" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Logging | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/configuratio [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The same services also emit periodic <a href="/docs/31.0.0/configuration/#enabling-metrics">metrics</a> about their state.
+To disable metric info logs set the following runtime property: <code>-Ddruid.emitter.logging.logLevel=debug</code>.</p><p>Druid uses <a href="http://logging.apache.org/log4j/2.x/" target="_blank" rel="noopener noreferrer">log4j2</a> for logging.
+The default configuration file log4j2.xml ships with Druid at the following path: <code>conf/druid/{config}/_common/log4j2.xml</code>.</p><p>By default, Druid uses <code>RollingRandomAccessFile</code> for rollover daily, and keeps log files up to 7 days.
+If that&#x27;s not suitable in your case, modify the <code>log4j2.xml</code> accordingly.</p><p>The following example log4j2.xml is based upon the micro quickstart:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span clas [...]
+<a href="/docs/31.0.0/configuration/#log-long-term-storage">long-term storage</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></s [...]
+Druid shares the log4j configuration file among all services, including task peon processes.
+However, you must define a console appender in the logger for your peon processes.
+If you don&#x27;t define a console appender, Druid creates and configures a new console appender
+that retains the log level, such as <code>info</code> or <code>warn</code>, but does not retain any other appender
+configuration, including non-console ones.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="log-directory">Log directory<a href="#log-directory" class="hash-link" aria-label="Direct link to Log directory" title="Direct link to Log directory">​</a></h2><p>The included log4j2.xml configuration for Druid and ZooKeeper writes logs to the <code>log</code> directory at the root of the distribution.</p><p>If you want to change the log directory, set the environment variable <co [...]
+Log4j2 writes the main log file and rotates it periodically.
+For example, <code>log/historical.log</code>.</p><p>The secondary log file contains anything that is written by the component
+directly to standard output or standard error without going through log4j2.
+For example, <code>log/historical.stdout.log</code>.
+This consists mainly of messages from the
+Java runtime itself.
+This file is not rotated, but it is generally small due to the low volume of messages.
+If necessary, you can truncate it using the Linux command <code>truncate --size 0 log/historical.stdout.log</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="set-the-logs-to-asynchronously-write">Set the logs to asynchronously write<a href="#set-the-logs-to-asynchronously-write" class="hash-link" aria-label="Direct link to Set the logs to asynchronously write" title="Direct link to Set the logs to asynchronously write">​</a></h2><p>If your logs are really chatty, you can set  [...]
+The following example shows a <code>log4j2.xml</code> that configures some of the more chatty classes to write asynchronously:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&lt;?xml version=&quot [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/production-cluster.html/index.html b/docs/31.0.0/configuration/production-cluster.html/index.html
new file mode 100644
index 000000000..d3eaec39d
--- /dev/null
+++ b/docs/31.0.0/configuration/production-cluster.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/tutorials/cluster">
+    <link rel="canonical" href="/docs/31.0.0/tutorials/cluster" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/tutorials/cluster' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/realtime.html/index.html b/docs/31.0.0/configuration/realtime.html/index.html
new file mode 100644
index 000000000..45c547baa
--- /dev/null
+++ b/docs/31.0.0/configuration/realtime.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/simple-cluster.html/index.html b/docs/31.0.0/configuration/simple-cluster.html/index.html
new file mode 100644
index 000000000..d3eaec39d
--- /dev/null
+++ b/docs/31.0.0/configuration/simple-cluster.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/tutorials/cluster">
+    <link rel="canonical" href="/docs/31.0.0/tutorials/cluster" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/tutorials/cluster' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/configuration/zookeeper.html/index.html b/docs/31.0.0/configuration/zookeeper.html/index.html
new file mode 100644
index 000000000..6caacc46e
--- /dev/null
+++ b/docs/31.0.0/configuration/zookeeper.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/zookeeper">
+    <link rel="canonical" href="/docs/31.0.0/design/zookeeper" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/zookeeper' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management.html/index.html b/docs/31.0.0/data-management.html/index.html
new file mode 100644
index 000000000..5eead4b55
--- /dev/null
+++ b/docs/31.0.0/data-management.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/data-management/">
+    <link rel="canonical" href="/docs/31.0.0/data-management/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/data-management/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/automatic-compaction.html/index.html b/docs/31.0.0/data-management/automatic-compaction.html/index.html
new file mode 100644
index 000000000..df0aee879
--- /dev/null
+++ b/docs/31.0.0/data-management/automatic-compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/data-management/automatic-compaction">
+    <link rel="canonical" href="/docs/31.0.0/data-management/automatic-compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/data-management/automatic-compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/automatic-compaction/index.html b/docs/31.0.0/data-management/automatic-compaction/index.html
new file mode 100644
index 000000000..a140a5747
--- /dev/null
+++ b/docs/31.0.0/data-management/automatic-compaction/index.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/automatic-compaction" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Automatic compaction | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The automatic compaction system uses the following syntax:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></s [...]
+The following properties only apply to auto-compaction:</p><ul><li><code>skipOffsetFromLatest</code></li><li><code>taskPriority</code></li><li><code>taskContext</code></li></ul><p>Since the automatic compaction system provides a management layer on top of manual compaction tasks,
+the auto-compaction configuration does not include task-specific properties found in a typical Druid ingestion spec.
+The following properties are automatically set by the Coordinator:</p><ul><li><code>type</code>: Set to <code>compact</code>.</li><li><code>id</code>: Generated using the task type, datasource name, interval, and timestamp. The task ID is prefixed with <code>coordinator-issued</code>.</li><li><code>context</code>: Set according to the user-provided <code>taskContext</code>.</li></ul><p>Compaction tasks typically fetch all <a href="/docs/31.0.0/data-management/manual-compaction#compaction [...]
+<em>unless</em> the following properties are all set to non-null values. It is strongly recommended to set them to non-null values to
+maximize performance and minimize disk usage of the <code>compact</code> tasks launched by auto-compaction:</p><ul><li><a href="/docs/31.0.0/data-management/manual-compaction#compaction-granularity-spec"><code>granularitySpec</code></a>, with non-null values for each of <code>segmentGranularity</code>, <code>queryGranularity</code>, and <code>rollup</code></li><li><a href="/docs/31.0.0/data-management/manual-compaction#compaction-dimensions-spec"><code>dimensionsSpec</code></a></li><li>< [...]
+The default indexing period is 30 minutes, meaning that the Coordinator first checks for segments to compact at most 30 minutes from when auto-compaction is enabled.
+This time period also affects other Coordinator duties such as cleanup of unused segments and stale pending segments.
+To configure the auto-compaction time period without interfering with <code>indexingPeriod</code>, see <a href="#change-compaction-frequency">Set frequency of compaction runs</a>.</p><p>At every invocation of auto-compaction, the Coordinator initiates a <a href="/docs/31.0.0/design/coordinator#segment-search-policy-in-automatic-compaction">segment search</a> to determine eligible segments to compact.
+When there are eligible segments to compact, the Coordinator issues compaction tasks based on available worker capacity.
+If a compaction task takes longer than the indexing period, the Coordinator waits for it to finish before resuming the period for segment search.</p><p>No additional configuration is needed to run automatic compaction tasks using the Coordinator and native engine. This is the default behavior for Druid.
+You can configure it for a datasource through the web console or programmatically via an API.
+This process differs for manual compaction tasks, which can be submitted from the <a href="/docs/31.0.0/operations/web-console">Tasks view of the web console</a> or the <a href="/docs/31.0.0/api-reference/tasks-api">Tasks API</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="manage-auto-compaction-using-the-web-console">Manage auto-compaction using the web console<a href="#manage-auto-compaction-using-the-web-console" class="hash-link" aria-label="Direct link to Manage auto-comp [...]
+<img loading="lazy" alt="Compaction config in web console" src="/assets/images/compaction-config-2d5e391fe681a9c978060c383357b531.png" width="1250" height="640" class="img_ev3q"></p><p>To disable auto-compaction for a datasource, click <strong>Delete</strong> from the <strong>Compaction config</strong> dialog. Druid does not retain your auto-compaction configuration.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="manage-auto-compaction-using-coordinator-apis">Manage auto-compactio [...]
+To enable auto-compaction for a datasource, create a JSON object with the desired auto-compaction settings.
+See <a href="#auto-compaction-syntax">Configure automatic compaction</a> for the syntax of an auto-compaction spec.
+Send the JSON object as a payload in a <a href="/docs/31.0.0/api-reference/automatic-compaction-api#create-or-update-automatic-compaction-configuration"><code>POST</code> request</a> to <code>/druid/coordinator/v1/config/compaction</code>.
+The following example configures auto-compaction for the <code>wikipedia</code> datasource:</p><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">curl --location --request POST &#x27;http://loc [...]
+Set the time period of the duty group in the <code>coordinator/runtime.properties</code> file.
+The following example shows how to create a duty group named <code>compaction</code> and set the auto-compaction period to 1 minute:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.coordinato [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/compaction.html/index.html b/docs/31.0.0/data-management/compaction.html/index.html
new file mode 100644
index 000000000..8cedf6089
--- /dev/null
+++ b/docs/31.0.0/data-management/compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/data-management/compaction">
+    <link rel="canonical" href="/docs/31.0.0/data-management/compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/data-management/compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/compaction/index.html b/docs/31.0.0/data-management/compaction/index.html
new file mode 100644
index 000000000..bdb1e7465
--- /dev/null
+++ b/docs/31.0.0/data-management/compaction/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/compaction" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Compaction | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/data-mana [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Another option is to set the compaction task to higher priority than the ingestion task.
+For more information, see <a href="/docs/31.0.0/data-management/automatic-compaction#avoid-conflicts-with-ingestion">Avoid conflicts with ingestion</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="segment-granularity-handling">Segment granularity handling<a href="#segment-granularity-handling" class="hash-link" aria-label="Direct link to Segment granularity handling" title="Direct link to Segment granularity handling">​</a></h3><p>Unless you modify the segment granularity in <a [...]
+See <a href="/docs/31.0.0/ingestion/rollup">Roll-up</a> for more details.
+You can check that your segments are rolled up or not by using <a href="/docs/31.0.0/querying/segmentmetadataquery#analysistypes">Segment Metadata Queries</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="learn-more">Learn more<a href="#learn-more" class="hash-link" aria-label="Direct link to Learn more" title="Direct link to Learn more">​</a></h2><p>See the following topics for more information:</p><ul><li><a href="/docs/31.0.0/operations/segment-optimization">Segment optimizat [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/delete.html/index.html b/docs/31.0.0/data-management/delete.html/index.html
new file mode 100644
index 000000000..e65bd762b
--- /dev/null
+++ b/docs/31.0.0/data-management/delete.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/data-management/delete">
+    <link rel="canonical" href="/docs/31.0.0/data-management/delete" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/data-management/delete' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/delete/index.html b/docs/31.0.0/data-management/delete/index.html
new file mode 100644
index 000000000..b72134c81
--- /dev/null
+++ b/docs/31.0.0/data-management/delete/index.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/delete" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data deletion | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/data-m [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+deleting data for time chunks by dropping segments. This is a fast, metadata-only operation.</p><p>Deletion by time range happens in two steps:</p><ol><li>Segments to be deleted must first be marked as <a href="/docs/31.0.0/design/storage#segment-lifecycle">&quot;unused&quot;</a>. This can
+happen when a segment is dropped by a <a href="/docs/31.0.0/operations/rule-configuration">drop rule</a> or when you manually mark a
+segment unused through the Coordinator API or web console. This is a soft delete: the data is not available for
+querying, but the segment files remains in deep storage, and the segment records remains in the metadata store.</li><li>Once a segment is marked &quot;unused&quot;, you can use a <a href="#kill-task"><code>kill</code> task</a> to permanently delete the segment file from
+deep storage and remove its record from the metadata store. This is a hard delete: the data is unrecoverable unless
+you have a backup.</li></ol><p>For documentation on disabling segments using the Coordinator API, see the
+<a href="/docs/31.0.0/api-reference/legacy-metadata-api#datasources">Legacy metadata API reference</a>.</p><p>A data deletion tutorial is available at <a href="/docs/31.0.0/tutorials/tutorial-delete-data">Tutorial: Deleting data</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="by-time-range-automatically">By time range, automatically<a href="#by-time-range-automatically" class="hash-link" aria-label="Direct link to By time range, automatically" title="Direct link to By time ran [...]
+where data should be preserved, and intervals where data should be discarded. Data that falls under a drop rule is
+marked unused, in the same manner as if you <a href="#by-time-range-manually">manually mark that time range unused</a>. This is a
+fast, metadata-only operation.</p><p>Data that is dropped in this way is marked unused, but remains in deep storage. To permanently delete it, use a
+<a href="#kill-task"><code>kill</code> task</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="specific-records">Specific records<a href="#specific-records" class="hash-link" aria-label="Direct link to Specific records" title="Direct link to Specific records">​</a></h2><p>Druid supports deleting specific records using <a href="/docs/31.0.0/data-management/update#reindex">reindexing</a> with a filter. The filter specifies which
+data remains after reindexing, so it must be the inverse of the data you want to delete. Because segments must be
+rewritten to delete data in this way, it can be a time-consuming operation.</p><p>For example, to delete records where <code>userName</code> is <code>&#x27;bob&#x27;</code> with native batch indexing, use a
+<a href="/docs/31.0.0/ingestion/ingestion-spec#transformspec"><code>transformSpec</code></a> with filter <code>{&quot;type&quot;: &quot;not&quot;, &quot;field&quot;: {&quot;type&quot;:
+&quot;selector&quot;, &quot;dimension&quot;: &quot;userName&quot;, &quot;value&quot;: &quot;bob&quot;}}</code>.</p><p>To delete the same records using SQL, use <a href="/docs/31.0.0/multi-stage-query/concepts#replace">REPLACE</a> with <code>WHERE userName &lt;&gt; &#x27;bob&#x27;</code>.</p><p>To reindex using <a href="/docs/31.0.0/ingestion/native-batch">native batch</a>, use the <a href="/docs/31.0.0/ingestion/input-sources#druid-input-source"><code>druid</code> input
+source</a>. If needed,
+<a href="/docs/31.0.0/ingestion/ingestion-spec#transformspec"><code>transformSpec</code></a> can be used to filter or modify data during the
+reindexing job. To reindex with SQL, use <a href="/docs/31.0.0/multi-stage-query/reference#replace"><code>REPLACE &lt;table&gt; OVERWRITE</code></a>
+with <code>SELECT ... FROM &lt;table&gt;</code>. (Druid does not have <code>UPDATE</code> or <code>ALTER TABLE</code> statements.) Any SQL SELECT query can be
+used to filter, modify, or enrich the data during the reindexing job.</p><p>Data that is deleted in this way is marked unused, but remains in deep storage. To permanently delete it, use a <a href="#kill-task"><code>kill</code>
+task</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="entire-table">Entire table<a href="#entire-table" class="hash-link" aria-label="Direct link to Entire table" title="Direct link to Entire table">​</a></h2><p>Deleting an entire table works the same way as <a href="#by-time-range-manually">deleting part of a table by time range</a>. First,
+mark all segments unused using the Coordinator API or web console. Then, optionally, delete it permanently using a
+<a href="#kill-task"><code>kill</code> task</a>.</p><a name="kill-task"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="permanently-kill-task">Permanently (<code>kill</code> task)<a href="#permanently-kill-task" class="hash-link" aria-label="Direct link to permanently-kill-task" title="Direct link to permanently-kill-task">​</a></h2><p>Data that has been overwritten or soft-deleted still remains as segments that have been marked unused. You can use a
+<code>kill</code> task to permanently delete this data.</p><p>The available grammar is:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span> [...]
+deep storage. This operation cannot be undone.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/data-management/update"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Data updates</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.0/data-management/schema-changes"><div class="pagination-nav__sublabel [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/index.html b/docs/31.0.0/data-management/index.html
new file mode 100644
index 000000000..ad0c03fbb
--- /dev/null
+++ b/docs/31.0.0/data-management/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/index" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data management | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/data [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+files called <a href="/docs/31.0.0/design/segments">segments</a>. Data management operations involving replacing, or deleting,
+these segments include:</p><ul><li><a href="/docs/31.0.0/data-management/update">Updates</a> to existing data.</li><li><a href="/docs/31.0.0/data-management/delete">Deletion</a> of existing data.</li><li><a href="/docs/31.0.0/data-management/schema-changes">Schema changes</a> for new and existing data.</li><li><a href="/docs/31.0.0/data-management/compaction">Compaction</a> and <a href="/docs/31.0.0/data-management/automatic-compaction">automatic compaction</a>, which reindex existing data to
+optimize storage footprint and performance.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/ingestion/faq"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Troubleshooting FAQ</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.0/data-management/update"><div class="pagination-nav__sublabel">Next< [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/manual-compaction.html/index.html b/docs/31.0.0/data-management/manual-compaction.html/index.html
new file mode 100644
index 000000000..af04f7575
--- /dev/null
+++ b/docs/31.0.0/data-management/manual-compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/data-management/manual-compaction">
+    <link rel="canonical" href="/docs/31.0.0/data-management/manual-compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/data-management/manual-compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/manual-compaction/index.html b/docs/31.0.0/data-management/manual-compaction/index.html
new file mode 100644
index 000000000..81af98733
--- /dev/null
+++ b/docs/31.0.0/data-management/manual-compaction/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/manual-compaction" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Manual compaction | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/da [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+If you don&#x27;t specify <code>granularitySpec</code>, Druid retains the original segment and query granularities when compaction is complete.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="compaction-io-configuration">Compaction I/O configuration<a href="#compaction-io-configuration" class="hash-link" aria-label="Direct link to Compaction I/O configuration" title="Direct link to Compaction I/O configuration">​</a></h2><p>The compaction <code>ioConfig</code> requires specifying < [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/schema-changes.html/index.html b/docs/31.0.0/data-management/schema-changes.html/index.html
new file mode 100644
index 000000000..20029d15a
--- /dev/null
+++ b/docs/31.0.0/data-management/schema-changes.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/data-management/schema-changes">
+    <link rel="canonical" href="/docs/31.0.0/data-management/schema-changes" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/data-management/schema-changes' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/schema-changes/index.html b/docs/31.0.0/data-management/schema-changes/index.html
new file mode 100644
index 000000000..f46fe5dc9
--- /dev/null
+++ b/docs/31.0.0/data-management/schema-changes/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/schema-changes" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Schema changes | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/data- [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+It is sufficient to update your supervisor spec, if using <a href="/docs/31.0.0/ingestion/#streaming">streaming ingestion</a>, or to
+provide the new schema the next time you do a <a href="/docs/31.0.0/ingestion/#batch">batch ingestion</a>. This is made possible by
+the fact that each <a href="/docs/31.0.0/design/segments">segment</a>, at the time it is created, stores a
+copy of its own schema. Druid reconciles all of these individual segment schemas automatically at query time.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="for-existing-data">For existing data<a href="#for-existing-data" class="hash-link" aria-label="Direct link to For existing data" title="Direct link to For existing data">​</a></h2><p>Schema changes are sometimes necessary for existing data. For example, you may want to change the type of a column in
+previously-ingested data, or drop a column entirely. Druid handles this using <a href="/docs/31.0.0/data-management/update">reindexing</a>, the same method
+it uses to handle updates of existing data. Reindexing involves rewriting all affected segments and can be a
+time-consuming operation.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/data-management/delete"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Data deletion</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.0/data-management/compaction"><div class="pagination-nav__sublabel">Next</div><div class=" [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/update.html/index.html b/docs/31.0.0/data-management/update.html/index.html
new file mode 100644
index 000000000..1c65a04a9
--- /dev/null
+++ b/docs/31.0.0/data-management/update.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/data-management/update">
+    <link rel="canonical" href="/docs/31.0.0/data-management/update" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/data-management/update' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/data-management/update/index.html b/docs/31.0.0/data-management/update/index.html
new file mode 100644
index 000000000..fb505695d
--- /dev/null
+++ b/docs/31.0.0/data-management/update/index.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/update" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data updates | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/data-ma [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+overwriting existing data using time ranges. Data outside the replacement time range is not touched. Overwriting of
+existing data is done using the same mechanisms as <a href="/docs/31.0.0/ingestion/#batch">batch ingestion</a>.</p><p>For example:</p><ul><li><a href="/docs/31.0.0/ingestion/native-batch">Native batch</a> with <code>appendToExisting: false</code>, and <code>intervals</code> set to a specific
+time range, overwrites data for that time range.</li><li><a href="/docs/31.0.0/multi-stage-query/reference#replace">SQL <code>REPLACE &lt;table&gt; OVERWRITE [ALL | WHERE ...]</code></a> overwrites data for
+the entire table or for a specified time range.</li></ul><p>In both cases, Druid&#x27;s atomic update mechanism ensures that queries will flip seamlessly from the old data to the new
+data on a time-chunk-by-time-chunk basis.</p><p>Ingestion and overwriting cannot run concurrently for the same time range of the same datasource. While an overwrite job
+is ongoing for a particular time range of a datasource, new ingestions for that time range are queued up. Ingestions for
+other time ranges proceed as normal. Read-only queries also proceed as normal, using the pre-existing version of the
+data.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p> Druid does not support  [...]
+is used to perform schema changes, repartition data, filter out unwanted data, enrich existing data, and so on. This
+behaves just like any other <a href="#overwrite">overwrite</a> with regard to atomic updates and locking.</p><p>With <a href="/docs/31.0.0/ingestion/native-batch">native batch</a>, use the <a href="/docs/31.0.0/ingestion/input-sources#druid-input-source"><code>druid</code> input
+source</a>. If needed,
+<a href="/docs/31.0.0/ingestion/ingestion-spec#transformspec"><code>transformSpec</code></a> can be used to filter or modify data during the
+reindexing job.</p><p>With SQL, use <a href="/docs/31.0.0/multi-stage-query/reference#replace"><code>REPLACE &lt;table&gt; OVERWRITE</code></a> with <code>SELECT ... FROM &lt;table&gt;</code>.
+(Druid does not have <code>UPDATE</code> or <code>ALTER TABLE</code> statements.) Any SQL SELECT query can be used to filter,
+modify, or enrich the data during the reindexing job.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rolled-up-datasources">Rolled-up datasources<a href="#rolled-up-datasources" class="hash-link" aria-label="Direct link to Rolled-up datasources" title="Direct link to Rolled-up datasources">​</a></h2><p>Rolled-up datasources can be effectively updated using appends, without rewrites. When you append a row that has an
+identical set of dimensions to an existing row, queries that use aggregation operators automatically combine those two
+rows together at query time.</p><p><a href="/docs/31.0.0/data-management/compaction">Compaction</a> or <a href="/docs/31.0.0/data-management/automatic-compaction">automatic compaction</a> can be used to physically combine these
+matching rows together later on, by rewriting segments in the background.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="lookups">Lookups<a href="#lookups" class="hash-link" aria-label="Direct link to Lookups" title="Direct link to Lookups">​</a></h2><p>If you have a dimension where values need to be updated frequently, try first using <a href="/docs/31.0.0/querying/lookups">lookups</a>. A
+classic use case of lookups is when you have an ID dimension stored in a Druid segment, and want to map the ID dimension to a
+human-readable string that may need to be updated periodically.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/data-management/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.0/data-management/delete"><div class="pagination-nav__sublabel" [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/dependencies/cassandra-deep-storage.html/index.html b/docs/31.0.0/dependencies/cassandra-deep-storage.html/index.html
new file mode 100644
index 000000000..f9bba307e
--- /dev/null
+++ b/docs/31.0.0/dependencies/cassandra-deep-storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/cassandra">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/cassandra" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/cassandra' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/dependencies/zookeeper.html/index.html b/docs/31.0.0/dependencies/zookeeper.html/index.html
new file mode 100644
index 000000000..6caacc46e
--- /dev/null
+++ b/docs/31.0.0/dependencies/zookeeper.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/zookeeper">
+    <link rel="canonical" href="/docs/31.0.0/design/zookeeper" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/zookeeper' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design.html/index.html b/docs/31.0.0/design.html/index.html
new file mode 100644
index 000000000..c8fc4bec4
--- /dev/null
+++ b/docs/31.0.0/design.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/">
+    <link rel="canonical" href="/docs/31.0.0/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/architecture.html/index.html b/docs/31.0.0/design/architecture.html/index.html
new file mode 100644
index 000000000..d8ec19d2a
--- /dev/null
+++ b/docs/31.0.0/design/architecture.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/architecture">
+    <link rel="canonical" href="/docs/31.0.0/design/architecture" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/architecture' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/architecture/index.html b/docs/31.0.0/design/architecture/index.html
new file mode 100644
index 000000000..2ddae6645
--- /dev/null
+++ b/docs/31.0.0/design/architecture/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/architecture" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Architecture | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/design/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+for reading from external data sources and publishing new Druid segments.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="peon-service">Peon service<a href="#peon-service" class="hash-link" aria-label="Direct link to Peon service" title="Direct link to Peon service">​</a></h5><p><a href="/docs/31.0.0/design/peons"><strong>Peon</strong></a> services are task execution engines spawned by Middle Managers. Each Peon runs a separate JVM and is responsible for executing a single task. Pe [...]
+forking separate JVM processes per-task, the Indexer runs tasks as individual threads within a single JVM process.</p><p>The Indexer is designed to be easier to configure and deploy compared to the Middle Manager + Peon system and to better enable resource sharing across tasks. The Indexer is a newer feature and is currently designated <a href="/docs/31.0.0/development/experimental">experimental</a> due to the fact that its memory management system is still under
+development. It will continue to mature in future versions of Druid.</p><p>Typically, you would deploy either Middle Managers or Indexers, but not both.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="colocation-of-services">Colocation of services<a href="#colocation-of-services" class="hash-link" aria-label="Direct link to Colocation of services" title="Direct link to Colocation of services">​</a></h2><p>Colocating Druid services by server type generally results in better utilizat [...]
+For very large scale clusters, it can be desirable to split the Druid services such that they run on individual servers to avoid resource contention.</p><p>This section describes guidelines and configuration parameters related to service colocation.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="coordinators-and-overlords">Coordinators and Overlords<a href="#coordinators-and-overlords" class="hash-link" aria-label="Direct link to Coordinators and Overlords" title="Direct link to C [...]
+For more information, see <a href="/docs/31.0.0/configuration/#coordinator-operation">Coordinator Operation</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="historicals-and-middle-managers">Historicals and Middle Managers<a href="#historicals-and-middle-managers" class="hash-link" aria-label="Direct link to Historicals and Middle Managers" title="Direct link to Historicals and Middle Managers">​</a></h3><p>With higher levels of ingestion or query load, it can make sense to depl [...]
+leverage existing infrastructure, where present.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deep-storage">Deep storage<a href="#deep-storage" class="hash-link" aria-label="Direct link to Deep storage" title="Direct link to Deep storage">​</a></h3><p>Druid uses deep storage to store any data that has been ingested into the system. Deep storage is shared file
+storage accessible by every Druid server. In a clustered deployment, this is typically a distributed object store like S3 or
+HDFS, or a network mounted filesystem. In a single-server deployment, this is typically local disk.</p><p>Druid uses deep storage for the following purposes:</p><ul><li>To store all the data you ingest. Segments that get loaded onto Historical services for low latency queries are also kept in deep storage for backup purposes. Additionally, segments that are only in deep storage can be used for <a href="/docs/31.0.0/querying/query-deep-storage">queries from deep storage</a>.</li><li>As a  [...]
+Segments on disk for Historical services provide the low latency querying performance Druid is known for.</p><p>You can also query directly from deep storage. When you query segments that exist only in deep storage, you trade some performance  for the ability to query more of your data without necessarily having to scale your Historical services.</p><p>When determining sizing for your storage, keep the following in mind:</p><ul><li>Deep storage needs to be able to hold all the data that  [...]
+if every single data server is lost and re-provisioned.</p><p>For more details, please see the <a href="/docs/31.0.0/design/deep-storage">Deep storage</a> page.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-storage">Metadata storage<a href="#metadata-storage" class="hash-link" aria-label="Direct link to Metadata storage" title="Direct link to Metadata storage">​</a></h3><p>The metadata storage holds various shared system metadata such as segment usage information and tas [...]
+clustered deployment, this is typically a traditional RDBMS like PostgreSQL or MySQL. In a single-server
+deployment, it is typically a locally-stored Apache Derby database.</p><p>For more details, please see the <a href="/docs/31.0.0/design/metadata-storage">Metadata storage</a> page.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper">ZooKeeper<a href="#zookeeper" class="hash-link" aria-label="Direct link to ZooKeeper" title="Direct link to ZooKeeper">​</a></h3><p>Used for internal service discovery, coordination, and leader election.</p><p>For more details, please see the <a  [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/auth.html/index.html b/docs/31.0.0/design/auth.html/index.html
new file mode 100644
index 000000000..28bfb4662
--- /dev/null
+++ b/docs/31.0.0/design/auth.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/operations/auth">
+    <link rel="canonical" href="/docs/31.0.0/operations/auth" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/operations/auth' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/broker.html/index.html b/docs/31.0.0/design/broker.html/index.html
new file mode 100644
index 000000000..c705f1302
--- /dev/null
+++ b/docs/31.0.0/design/broker.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/broker">
+    <link rel="canonical" href="/docs/31.0.0/design/broker" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/broker' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/broker/index.html b/docs/31.0.0/design/broker/index.html
new file mode 100644
index 000000000..dbc872bb4
--- /dev/null
+++ b/docs/31.0.0/design/broker/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/broker" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Broker service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/desig [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Historical services. Once the Historical services return their results, the Broker will store those results in the cache. Real-time segments are never cached and hence requests for real-time data will always be forwarded to real-time services. Real-time data is perpetually changing and caching the results would be unreliable.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0. [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/concepts-and-terminology.html/index.html b/docs/31.0.0/design/concepts-and-terminology.html/index.html
new file mode 100644
index 000000000..c8fc4bec4
--- /dev/null
+++ b/docs/31.0.0/design/concepts-and-terminology.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/">
+    <link rel="canonical" href="/docs/31.0.0/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/coordinator.html/index.html b/docs/31.0.0/design/coordinator.html/index.html
new file mode 100644
index 000000000..616fe12a5
--- /dev/null
+++ b/docs/31.0.0/design/coordinator.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/coordinator">
+    <link rel="canonical" href="/docs/31.0.0/design/coordinator" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/coordinator' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/coordinator/index.html b/docs/31.0.0/design/coordinator/index.html
new file mode 100644
index 000000000..0a0f0a094
--- /dev/null
+++ b/docs/31.0.0/design/coordinator/index.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/coordinator" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Coordinator service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Coordinator service communicates to Historical services to load or drop segments based on configurations. The Coordinator is responsible for loading new segments, dropping outdated segments, ensuring that segments are &quot;replicated&quot; (that is, loaded on multiple different Historical nodes) proper (configured) number of times, and moving
+(&quot;balancing&quot;) segments between Historical nodes to keep the latter evenly loaded.</p><p>The Coordinator runs its duties periodically and the time between each run is a configurable parameter. On each
+run, the Coordinator assesses the current state of the cluster before deciding on the appropriate actions to take.
+Similar to the Broker and Historical services, the Coordinator maintains a connection to a ZooKeeper cluster for
+current cluster information. The Coordinator also maintains a connection to a database containing information about
+&quot;used&quot; segments (that is, the segments that <em>should</em> be loaded in the cluster) and the loading rules.</p><p>Before any unassigned segments are serviced by Historical services, the Historical services for each tier are first
+sorted in terms of capacity, with least capacity servers having the highest priority. Unassigned segments are always
+assigned to the services with least capacity to maintain a level of balance between services. The Coordinator does not
+directly communicate with a Historical service when assigning it a new segment; instead the Coordinator creates some
+temporary information about the new segment under load queue path of the Historical service. Once this request is seen,
+the Historical service loads the segment and begins servicing it.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Coordinator service configuration, see <a href="/docs/31.0.0/configuration/#coordinator">Coordinator configuration</a>.</p><p>For basic tuning guidance for the Coordinator service, see <a href [...]
+Historical nodes in the cluster. The Coordinator sends requests to Historical nodes to unload unused segments or segments
+that are removed from the database.</p><p>Segments that are overshadowed (their versions are too old and their data has been replaced by newer segments) are
+marked as unused. During the next Coordinator&#x27;s run, they will be unloaded from Historical nodes in the cluster.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="clean-up-non-overshadowed-eternity-tombstone-segments">Clean up non-overshadowed eternity tombstone segments<a href="#clean-up-non-overshadowed-eternity-tombstone-segments" class="hash-link" aria-label="Direct link to Clean up non-overshadowed eternity tombstone segments" title="Direct link to Clean up non-overshadowed [...]
+Each run, the Coordinator compacts segments by merging small segments or splitting a large one. This is useful when the size of your segments is not optimized which may degrade query performance.
+See <a href="/docs/31.0.0/operations/segment-optimization">Segment size optimization</a> for details.</p><p>The Coordinator first finds the segments to compact based on the <a href="#segment-search-policy-in-automatic-compaction">segment search policy</a>.
+Once some segments are found, it issues a <a href="/docs/31.0.0/ingestion/tasks#compact">compaction task</a> to compact those segments.
+The maximum number of running compaction tasks is <code>min(sum of worker capacity * slotRatio, maxSlots)</code>.
+Note that even if <code>min(sum of worker capacity * slotRatio, maxSlots) = 0</code>, at least one compaction task is always submitted
+if the compaction is enabled for a dataSource.
+See <a href="/docs/31.0.0/api-reference/automatic-compaction-api#manage-automatic-compaction">Automatic compaction configuration API</a> and <a href="/docs/31.0.0/configuration/#automatic-compaction-dynamic-configuration">Automatic compaction configuration</a> to enable and configure automatic compaction.</p><p>Compaction tasks might fail due to the following reasons:</p><ul><li>If the input segments of a compaction task are removed or overshadowed before it starts, that compaction task  [...]
+need compaction.
+A set of segments needs compaction if all conditions below are satisfied:</p><ul><li>Total size of segments in the time chunk is smaller than or equal to the configured <code>inputSegmentSizeBytes</code>.</li><li>Segments have never been compacted yet or compaction spec has been updated since the last compaction: <code>maxTotalRows</code> or <code>indexSpec</code>.</li></ul><p>Here are some details with an example. Suppose we have two dataSources (<code>foo</code>, <code>bar</code>) as s [...]
+<code>foo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSION</code> and <code>foo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSION_1</code> to compact together because
+<code>2017-11-01T00:00:00.000Z/2017-12-01T00:00:00.000Z</code> is the most recent time chunk.</p><p>If the Coordinator has enough task slots for compaction, this policy will continue searching for the next segments and return
+<code>bar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSION</code> and <code>bar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSION_1</code>.
+Finally, <code>foo_2017-09-01T00:00:00.000Z_2017-10-01T00:00:00.000Z_VERSION</code> will be picked up even though there is only one segment in the time chunk of <code>2017-09-01T00:00:00.000Z/2017-10-01T00:00:00.000Z</code>.</p><p>The search start point can be changed by setting <code>skipOffsetFromLatest</code>.
+If this is set, this policy will ignore the segments falling into the time chunk of (the end time of the most recent segment - <code>skipOffsetFromLatest</code>).
+This is to avoid conflicts between compaction tasks and realtime tasks.
+Note that realtime tasks have a higher priority than compaction tasks by default. Realtime tasks will revoke the locks of compaction tasks if their intervals overlap, resulting in the termination of the compaction task.
+For more information, see <a href="/docs/31.0.0/data-management/automatic-compaction#avoid-conflicts-with-ingestion">Avoid conflicts with ingestion</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 [...]
+and their total size exceeds <a href="/docs/31.0.0/configuration/#automatic-compaction-dynamic-configuration"><code>inputSegmentSizeBytes</code></a>.
+If it finds such segments, it simply skips them.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="faq">FAQ<a href="#faq" class="hash-link" aria-label="Direct link to FAQ" title="Direct link to FAQ">​</a></h2><ol><li><p><strong>Do clients ever contact the Coordinator service?</strong></p><p>The Coordinator is not involved in a query.</p><p>Historical services never directly contact the Coordinator service. The Coordinator tells the Historical services to load/drop data vi [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/deep-storage.html/index.html b/docs/31.0.0/design/deep-storage.html/index.html
new file mode 100644
index 000000000..b13d39576
--- /dev/null
+++ b/docs/31.0.0/design/deep-storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/deep-storage">
+    <link rel="canonical" href="/docs/31.0.0/design/deep-storage" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/deep-storage' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/deep-storage/index.html b/docs/31.0.0/design/deep-storage/index.html
new file mode 100644
index 000000000..9c275fa61
--- /dev/null
+++ b/docs/31.0.0/design/deep-storage/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/deep-storage" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Deep storage | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/design/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+use cloud-based deep storage (<a href="#amazon-s3-or-s3-compatible">Amazon S3</a>, <a href="#google-cloud-storage">Google Cloud Storage</a>,
+or <a href="#azure-blob-storage">Azure Blob Storage</a>), S3-compatible storage (like Minio), or <a href="#hdfs">HDFS</a>. These options are
+generally more convenient, more scalable, and more robust than setting up a shared filesystem.</p><p>The following configurations in <code>common.runtime.properties</code> apply to local storage:</p><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.storage.type</code></td><td><code>local</code></td><td></td><td>Must be set.</td></tr><tr><td><code>druid.storage.storageDirectory</code></td><td>any local di [...]
+<code>druid.segmentCache.infoDir</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="amazon-s3-or-s3-compatible">Amazon S3 or S3-compatible<a href="#amazon-s3-or-s3-compatible" class="hash-link" aria-label="Direct link to Amazon S3 or S3-compatible" title="Direct link to Amazon S3 or S3-compatible">​</a></h3><p>See <a href="/docs/31.0.0/development/extensions-core/s3"><code>druid-s3-extensions</code></a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="google-cloud-storag [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/design.html/index.html b/docs/31.0.0/design/design.html/index.html
new file mode 100644
index 000000000..c8fc4bec4
--- /dev/null
+++ b/docs/31.0.0/design/design.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/">
+    <link rel="canonical" href="/docs/31.0.0/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/extensions-contrib/dropwizard.html/index.html b/docs/31.0.0/design/extensions-contrib/dropwizard.html/index.html
new file mode 100644
index 000000000..3898d17a4
--- /dev/null
+++ b/docs/31.0.0/design/extensions-contrib/dropwizard.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/extensions-contrib/dropwizard">
+    <link rel="canonical" href="/docs/31.0.0/design/extensions-contrib/dropwizard" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/extensions-contrib/dropwizard' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/extensions-contrib/dropwizard/index.html b/docs/31.0.0/design/extensions-contrib/dropwizard/index.html
new file mode 100644
index 000000000..2759166b8
--- /dev/null
+++ b/docs/31.0.0/design/extensions-contrib/dropwizard/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/extensions-contrib/dropwizard" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Dropwizard metrics emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+It accumulates druid metrics as dropwizard metrics, and emits them to various sinks via dropwizard supported reporters.
+Currently supported dropwizard metrics types counter, gauge, meter, timer and histogram.
+These metrics can be emitted using either Console or JMX reporter. </p><p>To use this emitter, set</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.emitter=dropwizard</span><br></span></code>< [...]
+be provided as a JSON file.  Additionally, this mapping specifies which dimensions should be included for each metric.
+If the user does not specify their own JSON file, a <a href="#default-metrics-mapping">default mapping</a> is used.
+All metrics are expected to be mapped. Metrics which are not mapped will be ignored.
+Dropwizard metric path is organized using the following schema:</p><p><code>&lt;druid metric name&gt; : { &quot;dimensions&quot; : &lt;dimension list&gt;, &quot;type&quot; : &lt;Dropwizard metric type&gt;, &quot;timeUnit&quot; : &lt;For timers, timeunit in which metric is emitted&gt;}</code></p><p>e.g.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" c [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/historical.html/index.html b/docs/31.0.0/design/historical.html/index.html
new file mode 100644
index 000000000..11bfbe422
--- /dev/null
+++ b/docs/31.0.0/design/historical.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/historical">
+    <link rel="canonical" href="/docs/31.0.0/design/historical" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/historical' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/historical/index.html b/docs/31.0.0/design/historical/index.html
new file mode 100644
index 000000000..83b57cf09
--- /dev/null
+++ b/docs/31.0.0/design/historical/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/historical" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Historical service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Historical services cache data segments on local disk and serve queries from that cache as well as from an in-memory cache.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Historical service configuration, see <a href="/docs/31.0.0/configuration/#historical">Historical configuration</a>.</p><p>For basic t [...]
+For more information, see <a href="/docs/31.0.0/operations/basic-cluster-tuning#segment-cache-size">Segment cache size</a>.</p><p>The <a href="/docs/31.0.0/design/coordinator">Coordinator</a> controls the assignment of segments to Historicals and the balance of segments between Historicals. Historical services do not communicate directly with each other, nor do they communicate directly with the Coordinator. Instead, the Coordinator creates ephemeral entries in ZooKeeper in a <a href="/d [...]
+For information on querying Historical services, see <a href="/docs/31.0.0/querying/">Querying</a>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/design/router"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Router</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.0/design/middlemanager"><div cla [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/index.html b/docs/31.0.0/design/index.html
new file mode 100644
index 000000000..9ec64551f
--- /dev/null
+++ b/docs/31.0.0/design/index.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/index" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Introduction to Apache Druid | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/doc [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid&#x27;s key features are:</p><ol><li><strong>Columnar storage format.</strong> Druid uses column-oriented storage. This means it only loads the exact columns
+needed for a particular query.  This greatly improves speed for queries that retrieve only a few columns. Additionally, to support fast scans and aggregations, Druid optimizes column storage for each column according to its data type.</li><li><strong>Scalable distributed system.</strong> Typical Druid deployments span clusters ranging from tens to hundreds of servers. Druid can ingest data at the rate of millions of records per second while retaining trillions of records and maintaining  [...]
+querying.</li><li><strong>Self-healing, self-balancing, easy to operate.</strong> As an operator, you add servers to scale out or
+remove servers to scale down. The Druid cluster re-balances itself automatically in the background without any downtime. If a
+Druid server fails, the system automatically routes data around the damage until the server can be replaced. Druid
+is designed to run continuously without planned downtime for any reason. This is true for configuration changes and software
+updates.</li><li><strong>Cloud-native, fault-tolerant architecture that won&#x27;t lose data.</strong> After ingestion, Druid safely stores a copy of your data in <a href="/docs/31.0.0/design/architecture#deep-storage">deep storage</a>. Deep storage is typically cloud storage, HDFS, or a shared filesystem. You can recover your data from deep storage even in the unlikely case that all Druid servers fail. For a limited failure that affects only a few Druid servers, replication ensures that [...]
+<a href="https://arxiv.org/pdf/1004.0403" target="_blank" rel="noopener noreferrer">CONCISE</a> compressed bitmap indexes to create indexes to enable fast filtering and searching across multiple columns.</li><li><strong>Time-based partitioning.</strong> Druid first partitions data by time. You can optionally implement additional partitioning based upon other fields.
+Time-based queries only access the partitions that match the time range of the query which leads to significant performance improvements.</li><li><strong>Approximate algorithms.</strong> Druid includes algorithms for approximate count-distinct, approximate ranking, and
+computation of approximate histograms and quantiles. These algorithms offer bounded memory usage and are often
+substantially faster than exact computations. For situations where accuracy is more important than speed, Druid also
+offers exact count-distinct and exact ranking.</li><li><strong>Automatic summarization at ingest time.</strong> Druid optionally supports data summarization at ingestion time. This
+summarization partially pre-aggregates your data, potentially leading to significant cost savings and performance boosts.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="when-to-use-druid">When to use Druid<a href="#when-to-use-druid" class="hash-link" aria-label="Direct link to When to use Druid" title="Direct link to When to use Druid">​</a></h2><p>Druid is used by many companies of various sizes for many different use cases. For more information see
+<a href="/druid-powered">Powered by Apache Druid</a>.</p><p>Druid is likely a good choice if your use case matches a few of the following:</p><ul><li>Insert rates are very high, but updates are less common.</li><li>Most of your queries are aggregation and reporting queries. For example &quot;group by&quot; queries. You may also have searching and
+scanning queries.</li><li>You are targeting query latencies of 100ms to a few seconds.</li><li>Your data has a time component. Druid includes optimizations and design choices specifically related to time.</li><li>You may have more than one table, but each query hits just one big distributed table. Queries may potentially hit more
+than one smaller &quot;lookup&quot; table.</li><li>You have high cardinality data columns, e.g. URLs, user IDs, and need fast counting and ranking over them.</li><li>You want to load data from Kafka, HDFS, flat files, or object storage like Amazon S3.</li></ul><p>Situations where you would likely <em>not</em> want to use Druid include:</p><ul><li>You need low-latency updates of <em>existing</em> records using a primary key. Druid supports streaming inserts, but not streaming updates. You [...]
+background batch jobs.</li><li>You are building an offline reporting system where query latency is not very important.</li><li>You want to do &quot;big&quot; joins, meaning joining one big fact table to another big fact table, and you are okay with these queries
+taking a long time to complete.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="learn-more">Learn more<a href="#learn-more" class="hash-link" aria-label="Direct link to Learn more" title="Direct link to Learn more">​</a></h2><ul><li>Try the Druid <a href="/docs/31.0.0/tutorials/">Quickstart</a>.</li><li>Learn more about Druid components in <a href="/docs/31.0.0/design/architecture">Design</a>.</li><li>Read about new features and improvements in <a href="https://github.com/apa [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/indexer.html/index.html b/docs/31.0.0/design/indexer.html/index.html
new file mode 100644
index 000000000..4ef3cd570
--- /dev/null
+++ b/docs/31.0.0/design/indexer.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/indexer">
+    <link rel="canonical" href="/docs/31.0.0/design/indexer" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/indexer' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/indexer/index.html b/docs/31.0.0/design/indexer/index.html
new file mode 100644
index 000000000..2cbf8c962
--- /dev/null
+++ b/docs/31.0.0/design/indexer/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/indexer" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Indexer service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/desi [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Its memory management system is still under development and will be significantly enhanced in later releases.</p></div></div><p>The Apache Druid Indexer service is an alternative to the Middle Manager + Peon task execution system. Instead of forking a separate JVM process per-task, the Indexer runs tasks as separate threads within a single JVM process.</p><p>The Indexer is designed to be easier to configure and deploy compared to the Middle Manager + Peon system and to better enable reso [...]
+One pool is exclusively used for task control messages between the Overlord and the Indexer (&quot;chat handler threads&quot;). The other pool is used for handling all other HTTP requests.</p><p>To configure the number of threads, use the <code>druid.server.http.numThreads</code> property. For example, if <code>druid.server.http.numThreads</code> is set to 10, there will be 10 chat handler threads and 10 non-chat handler threads.</p><p>In addition to these two pools, the Indexer allocate [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/indexing-service.html/index.html b/docs/31.0.0/design/indexing-service.html/index.html
new file mode 100644
index 000000000..3de1e432a
--- /dev/null
+++ b/docs/31.0.0/design/indexing-service.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/indexing-service">
+    <link rel="canonical" href="/docs/31.0.0/design/indexing-service" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/indexing-service' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/indexing-service/index.html b/docs/31.0.0/design/indexing-service/index.html
new file mode 100644
index 000000000..95e28c11f
--- /dev/null
+++ b/docs/31.0.0/design/indexing-service/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/indexing-service" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Indexing Service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Overlords and Middle Managers may run on the same process or across multiple processes, while Middle Managers and Peons always run on the same process.</p><p>Tasks are managed using API endpoints on the Overlord service. Please see <a href="/docs/31.0.0/api-reference/tasks-api">Tasks API</a> for more information.</p><p><img loading="lazy" alt="Indexing Service" src="/assets/images/indexing_service-e985270b9e0e342af71c0673407e5673.png" title="Indexing Service" width="532" height="621" cla [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/metadata-storage.html/index.html b/docs/31.0.0/design/metadata-storage.html/index.html
new file mode 100644
index 000000000..78dda76e6
--- /dev/null
+++ b/docs/31.0.0/design/metadata-storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/metadata-storage">
+    <link rel="canonical" href="/docs/31.0.0/design/metadata-storage" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/metadata-storage' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/metadata-storage/index.html b/docs/31.0.0/design/metadata-storage/index.html
new file mode 100644
index 000000000..5f5d4bdbc
--- /dev/null
+++ b/docs/31.0.0/design/metadata-storage/index.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/metadata-storage" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Metadata storage | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid uses the metadata store to house various metadata about the system, but not to store the actual data.
+The metadata store retains all metadata essential for a Druid cluster to work.</p><p>The metadata store includes the following:</p><ul><li>Segments records</li><li>Rule records</li><li>Configuration records</li><li>Task-related tables</li><li>Audit records</li></ul><p>Derby is the default metadata store for Druid, however, it is not suitable for production.
+<a href="/docs/31.0.0/development/extensions-core/mysql">MySQL</a> and <a href="/docs/31.0.0/development/extensions-core/postgresql">PostgreSQL</a> are more production suitable metadata stores.
+See <a href="/docs/31.0.0/configuration/#metadata-storage">Metadata storage configuration</a> for the default configuration settings.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14- [...]
+See the database-specific docs for guidance on versions.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mysql">MySQL<a href="#mysql" class="hash-link" aria-label="Direct link to MySQL" title="Direct link to MySQL">​</a></h3><p>See <a href="/docs/31.0.0/development/extensions-core/mysql">mysql-metadata-storage extension documentation</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="postgresql">PostgreSQL<a href="#postgresql" class="hash-link" aria-label="Direct link to Po [...]
+Define these properties with a <code>druid.metadata.storage.connector.dbcp.</code> prefix.
+For example:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.metadata.storage.connector.dbcp.maxConnLifetimeMillis=1200000</span><br></span><span class="token-line"  [...]
+&quot;used segments&quot; elsewhere in the documentation and throughout the project.) The table is polled by the
+<a href="/docs/31.0.0/design/coordinator">Coordinator</a> to determine the set of segments that should be available for querying in the
+system. The table has two main functional columns, the other columns are for indexing purposes.</p><p>Value 1 in the <code>used</code> column means that the segment should be &quot;used&quot; by the cluster (i.e., it should be loaded and
+available for requests). Value 0 means that the segment should not be loaded into the cluster. We do this as a means of
+unloading segments from the cluster without actually removing their metadata (which allows for simpler rolling back if
+that is ever an issue). The <code>used</code> column has a corresponding <code>used_status_last_updated</code> column which denotes the time
+when the <code>used</code> status of the segment was last updated. This information can be used by the Coordinator to determine if
+a segment is a candidate for deletion (if automated segment killing is enabled).</p><p>The <code>payload</code> column stores a JSON blob that has all of the metadata for the segment.
+Some of the data in the <code>payload</code> column intentionally duplicates data from other columns in the segments table.
+As an example, the <code>payload</code> column may take the following form:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class= [...]
+land. These rules are used by the <a href="/docs/31.0.0/design/coordinator">Coordinator</a>
+when making segment (re-)allocation decisions about the cluster.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="config-table">Config table<a href="#config-table" class="hash-link" aria-label="Direct link to Config table" title="Direct link to Config table">​</a></h3><p>The config table stores runtime configuration objects. We do not have
+many of these yet and we are not sure if we will keep this mechanism going
+forward, but it is the beginnings of a method of changing some configuration
+parameters across the cluster at runtime.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="task-related-tables">Task-related tables<a href="#task-related-tables" class="hash-link" aria-label="Direct link to Task-related tables" title="Direct link to Task-related tables">​</a></h3><p>Task-related tables are created and used by the <a href="/docs/31.0.0/design/overlord">Overlord</a> and <a href="/docs/31.0.0/design/middlemanager">Middle Manager</a> when managing tasks.</p><h3 class="a [...]
+such as rule changes done by <a href="/docs/31.0.0/design/coordinator">Coordinator</a> and other
+config changes.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-storage-access">Metadata storage access<a href="#metadata-storage-access" class="hash-link" aria-label="Direct link to Metadata storage access" title="Direct link to Metadata storage access">​</a></h2><p>Only the following processes access the metadata storage:</p><ol><li>Indexing service processes (if any)</li><li>Realtime processes (if any)</li><li>Coordinator processes</li></ol><p>Thus you need to give perm [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/middlemanager.html/index.html b/docs/31.0.0/design/middlemanager.html/index.html
new file mode 100644
index 000000000..2d4e06de8
--- /dev/null
+++ b/docs/31.0.0/design/middlemanager.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/middlemanager">
+    <link rel="canonical" href="/docs/31.0.0/design/middlemanager" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/middlemanager' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/middlemanager/index.html b/docs/31.0.0/design/middlemanager/index.html
new file mode 100644
index 000000000..1f6371124
--- /dev/null
+++ b/docs/31.0.0/design/middlemanager/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/middlemanager" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Middle Manager service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid uses separate JVMs for tasks to isolate resources and logs. Each Peon is capable of running only one task at a time, whereas a Middle Manager may have multiple Peons.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Middle Manager service configuration, see <a href="/docs/31.0.0/configuration/#middle [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/overlord.html/index.html b/docs/31.0.0/design/overlord.html/index.html
new file mode 100644
index 000000000..719a46dec
--- /dev/null
+++ b/docs/31.0.0/design/overlord.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/overlord">
+    <link rel="canonical" href="/docs/31.0.0/design/overlord" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/overlord' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/overlord/index.html b/docs/31.0.0/design/overlord/index.html
new file mode 100644
index 000000000..d5dec0509
--- /dev/null
+++ b/docs/31.0.0/design/overlord/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/overlord" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Overlord service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+In local mode, the Overlord is also responsible for creating Peons for executing tasks. When running the Overlord in local mode, all Middle Manager and Peon configurations must be provided as well.
+Local mode is typically used for simple workflows. In remote mode, the Overlord and Middle Manager are run in separate services and you can run each on a different server.
+This mode is recommended if you intend to use the indexing service as the single endpoint for all Druid indexing.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Overlord service configuration, see <a href="/docs/31.0.0/configuration/#overlord">Overlord Configuration</a>.</p><p>For basic tuning guidance f [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/peons.html/index.html b/docs/31.0.0/design/peons.html/index.html
new file mode 100644
index 000000000..ab8f3dc19
--- /dev/null
+++ b/docs/31.0.0/design/peons.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/peons">
+    <link rel="canonical" href="/docs/31.0.0/design/peons" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/peons' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/peons/index.html b/docs/31.0.0/design/peons/index.html
new file mode 100644
index 000000000..9c0bf86ed
--- /dev/null
+++ b/docs/31.0.0/design/peons/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/peons" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Peon service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/design/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Peons should rarely run on their own.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="running">Running<a href="#running" class="hash-link" aria-label="Direct link to Running" title="Direct link to Running">​</a></h2><p>The Peon should seldom run separately from the Middle Manager, except for development purposes.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0 [...]
+The status file indicates where the task status will be output.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/design/middlemanager"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Middle Manager</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.0/design/indexer"><div class="pagination-nav__sublabe [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/plumber.html/index.html b/docs/31.0.0/design/plumber.html/index.html
new file mode 100644
index 000000000..45c547baa
--- /dev/null
+++ b/docs/31.0.0/design/plumber.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/processes.html/index.html b/docs/31.0.0/design/processes.html/index.html
new file mode 100644
index 000000000..d8ec19d2a
--- /dev/null
+++ b/docs/31.0.0/design/processes.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/architecture">
+    <link rel="canonical" href="/docs/31.0.0/design/architecture" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/architecture' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/realtime.html/index.html b/docs/31.0.0/design/realtime.html/index.html
new file mode 100644
index 000000000..45c547baa
--- /dev/null
+++ b/docs/31.0.0/design/realtime.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/router.html/index.html b/docs/31.0.0/design/router.html/index.html
new file mode 100644
index 000000000..670c23425
--- /dev/null
+++ b/docs/31.0.0/design/router.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/router">
+    <link rel="canonical" href="/docs/31.0.0/design/router" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/router' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/router/index.html b/docs/31.0.0/design/router/index.html
new file mode 100644
index 000000000..c0cc0ab65
--- /dev/null
+++ b/docs/31.0.0/design/router/index.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/router" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Router service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/desig [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+setting up a highly available cluster in situations where the HTTP redirect mechanism of the inactive to active
+Coordinator or Overlord service does not function correctly, such as when servers are behind a load balancer or the hostname used in the redirect is only resolvable internally.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="enable-the-management-proxy">Enable the management proxy<a href="#enable-the-management-proxy" class="hash-link" aria-label="Direct link to Enable the management proxy" title="Direct link to Enable the management proxy">​</a></h3><p>To enable the management pro [...]
+determined from the original request path based on Druid API path conventions. For the Coordinator the convention is
+<code>/druid/coordinator/*</code> and for the Overlord the convention is <code>/druid/indexer/*</code>. These are convenient because they mean
+that using the management proxy does not require modifying the API request other than issuing the request to the Router
+instead of the Coordinator or Overlord. Most Druid API requests can be routed implicitly.</p><p>Explicit routes are those where the request to the Router contains a path prefix indicating which service the request
+should be routed to. For the Coordinator this prefix is <code>/proxy/coordinator</code> and for the Overlord it is <code>/proxy/overlord</code>.
+This is required for API calls with an ambiguous destination. For example, the <code>/status</code> API is present on all Druid
+services, so explicit routing needs to be used to indicate the proxy destination.</p><p>This is summarized in the table below:</p><table><thead><tr><th>Request Route</th><th>Destination</th><th>Rewritten Route</th><th>Example</th></tr></thead><tbody><tr><td><code>/druid/coordinator/*</code></td><td>Coordinator</td><td><code>/druid/coordinator/*</code></td><td><code>router:8888/druid/coordinator/v1/datasources</code> -&gt; <code>coordinator:8081/druid/coordinator/v1/datasources</code></td [...]
+This strategy can route both native and SQL queries.</p><p>The following example strategy routes queries to the Broker <code>druid:broker-hot</code> if no valid <code>brokerService</code> is found in the query context.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockL [...]
+given SQL query is resolved using only the provided Router strategies. If not resolved using any of the strategies, the
+Router uses the <code>defaultBrokerServiceName</code>. This behavior is slightly different from native queries where the Router
+first tries to resolve the Broker service using strategies, then load rules and finally using the <code>defaultBrokerServiceName</code>
+if still not resolved. When <code>druid.router.sql.enable</code> is set to <code>false</code> (default value), the Router uses the
+<code>defaultBrokerServiceName</code>.</p><p>Setting <code>druid.router.sql.enable</code> does not affect either Avatica JDBC requests or native queries.
+Druid always routes native queries using the strategies and load rules as documented.
+Druid always routes Avatica JDBC requests based on connection ID.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="avatica-query-balancing">Avatica query balancing<a href="#avatica-query-balancing" class="hash-link" aria-label="Direct link to Avatica query balancing" title="Direct link to Avatica query balancing">​</a></h2><p>All Avatica JDBC requests with a given connection ID must be routed to the same Broker, since Druid Brokers do not share connection state with each other.</p>< [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/segments.html/index.html b/docs/31.0.0/design/segments.html/index.html
new file mode 100644
index 000000000..078b3f3cf
--- /dev/null
+++ b/docs/31.0.0/design/segments.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/segments">
+    <link rel="canonical" href="/docs/31.0.0/design/segments" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/segments' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/segments/index.html b/docs/31.0.0/design/segments/index.html
new file mode 100644
index 000000000..108a85ae4
--- /dev/null
+++ b/docs/31.0.0/design/segments/index.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/segments" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Segments | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/design/segm [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+file size to be within the recommended range of 300-700 MB. If your
+segment files are larger than this range, then consider either
+changing the granularity of the segment time interval or partitioning your
+data and/or adjusting the <code>targetRowsPerSegment</code> in your <code>partitionsSpec</code>.
+A good starting point for this parameter is 5 million rows.
+See the Sharding section below and the &quot;Partitioning specification&quot; section of
+the <a href="/docs/31.0.0/ingestion/hadoop#partitionsspec">Batch ingestion</a> documentation
+for more guidance.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="segment-file-structure">Segment file structure<a href="#segment-file-structure" class="hash-link" aria-label="Direct link to Segment file structure" title="Direct link to Segment file structure">​</a></h2><p>Segment files are <em>columnar</em>: the data for each column is laid out in
+separate data structures. By storing each column separately, Druid decreases query latency by scanning only those columns actually needed for a query. There are three basic column types: timestamp, dimensions, and metrics:</p><p><img loading="lazy" alt="Druid column types" src="/assets/images/druid-column-types-0cd9a011b4cc2b4d05f93b3b31a7e735.png" title="Druid Column Types" width="1936" height="400" class="img_ev3q"></p><p>Timestamp and metrics type columns are arrays of integer or floa [...]
+<a href="https://github.com/lz4/lz4-java" target="_blank" rel="noopener noreferrer">LZ4</a>. Once a query identifies which rows to select, it decompresses them, pulls out the relevant rows, and applies the
+desired aggregation operator. If a query doesn’t require a column, Druid skips over that column&#x27;s data.</p><p>Dimension columns are different because they support filter and
+group-by operations, so each dimension requires the following
+three data structures:</p><ul><li><strong>Dictionary</strong>: Maps values (which are always treated as strings) to integer IDs, allowing compact representation of the list and bitmap values.</li><li><strong>List</strong>: The column’s values, encoded using the dictionary. Required for GroupBy and TopN queries. These operators allow queries that solely aggregate metrics based on filters to run without accessing the list of values.</li><li><strong>Bitmap</strong>: One bitmap for each dist [...]
+bitmap. If a row has more than one value for a column, its entry in
+the list is an array of values. Additionally, a row with <em>n</em> values in the list has <em>n</em> non-zero valued entries in bitmaps.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="compression">Compression<a href="#compression" class="hash-link" aria-label="Direct link to Compression" title="Direct link to Compression">​</a></h2><p>Druid uses LZ4 by default to compress blocks of values for string, long, float, and double columns. Druid uses Roaring to compress bitmaps for stri [...]
+Smoosh files contain the following: </p><ul><li>Individual files for each column in the data, including one for the <code>__time</code> column that refers to the timestamp of the segment. </li><li>An <code>index.drd</code> file that contains additional segment metadata.</li></ul></li></ul><p>In the codebase, segments have an internal format version. The current segment format version is <code>v9</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="implications-of-updating-segmen [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/storage.html/index.html b/docs/31.0.0/design/storage.html/index.html
new file mode 100644
index 000000000..0e41104e4
--- /dev/null
+++ b/docs/31.0.0/design/storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/storage">
+    <link rel="canonical" href="/docs/31.0.0/design/storage" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/storage' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/storage/index.html b/docs/31.0.0/design/storage/index.html
new file mode 100644
index 000000000..aeda2606b
--- /dev/null
+++ b/docs/31.0.0/design/storage/index.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/storage" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Storage overview | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+a task that is overwriting (like a Hadoop task, or an index task not in append mode) this is done by locking an interval and creating a new version number and new set of segments.</li><li>If the indexing task is a realtime task (like a Kafka task) then the segment is immediately queryable at this point. It&#x27;s available, but unpublished.</li><li>When the indexing task has finished reading data for the segment, it pushes it to deep storage and then publishes it by writing a record into [...]
+<code>2018-05-21T16:00:00.000Z/2018-05-21T17:00:00.000Z</code>, version <code>2018-05-21T15:56:09.909Z</code>, and partition number 1:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">clarity-cloud0 [...]
+available before they are published, since they are only published when the segment is complete and will not accept any additional rows of data.</li><li><strong>Deep storage:</strong> Segment data files are pushed to deep storage once a segment is done being constructed. This happens immediately before publishing metadata to the metadata store.</li><li><strong>Availability for querying:</strong> Segments are available for querying on some Druid data server, like a realtime task, directly [...]
+<a href="/docs/31.0.0/querying/sql-metadata-tables#segments-table"><code>sys.segments</code> table</a>. It includes the following flags:</p><ul><li><code>is_published</code>: True if segment metadata has been published to the metadata store and <code>used</code> is true.</li><li><code>is_available</code>: True if the segment is currently available for querying, either on a realtime task or Historical service.</li><li><code>is_realtime</code>: True if the segment is only available on real [...]
+<a href="#indexing-and-handoff">Indexing and handoff</a>. This means that when understanding Druid&#x27;s availability and consistency properties, we must look at each function separately.</p><p>On the ingestion side, Druid&#x27;s primary <a href="/docs/31.0.0/ingestion/#ingestion-methods">ingestion methods</a> are all pull-based and offer transactional guarantees. This means that you are guaranteed that ingestion using these methods will publish in an all-or-nothing manner:</p><ul><li>S [...]
+discarded, and Druid will resume ingestion from the last committed set of stream offsets. This ensures exactly-once publishing behavior.</li><li><a href="/docs/31.0.0/ingestion/hadoop">Hadoop-based batch ingestion</a>. Each task publishes all segment metadata in a single transaction.</li><li><a href="/docs/31.0.0/ingestion/native-batch">Native batch ingestion</a>. In parallel mode, the supervisor task publishes all segment metadata in a single transaction after the subtasks are finished. [...]
+<a href="/docs/31.0.0/ingestion/native-batch"><code>appendToExisting</code></a> is true, or one of your input sources is the same Druid datasource that you are ingesting into. In either of these two cases, running the same task twice is non-idempotent, because you are adding to existing data instead of overwriting it.</li></ul><p>On the query side, the Druid Broker is responsible for ensuring that a consistent set of segments is involved in a given query. It selects the appropriate set o [...]
+This is used for Hadoop-based batch ingestion, native batch ingestion when <code>appendToExisting</code> is false, and compaction.</p><p>Note that atomic replacement happens for each time chunk individually. If a batch ingestion task or compaction involves multiple time chunks, then each time chunk will undergo atomic replacement soon after the task finishes, but the replacements will not all happen simultaneously.</p><p>Typically, atomic replacement in Druid is based on a core set conce [...]
+When a time chunk is overwritten, a new core set of segments is created with a higher version number. The core set must all be available before the Broker will use them instead of the older set. There can also only be one core set per version per time chunk. Druid will also only use a single version at a time per time chunk. Together, these properties provide Druid&#x27;s atomic replacement guarantees.</p><p>Druid also supports an experimental segment locking mode that is activated by setting
+<a href="/docs/31.0.0/ingestion/tasks#context"><code>forceTimeChunkLock</code></a> to false in the context of an ingestion task. In this case, Druid creates an atomic update group using the existing version for the time chunk, instead of creating a new core set with a new version number. There can be multiple atomic update groups with the same version number per time chunk. Each one replaces a specific set of earlier segments in the same time chunk and with the same version number. Druid [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/zookeeper.html/index.html b/docs/31.0.0/design/zookeeper.html/index.html
new file mode 100644
index 000000000..6caacc46e
--- /dev/null
+++ b/docs/31.0.0/design/zookeeper.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/design/zookeeper">
+    <link rel="canonical" href="/docs/31.0.0/design/zookeeper" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/design/zookeeper' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/design/zookeeper/index.html b/docs/31.0.0/design/zookeeper/index.html
new file mode 100644
index 000000000..f9d29bdcd
--- /dev/null
+++ b/docs/31.0.0/design/zookeeper/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/zookeeper" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">ZooKeeper | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/design/zoo [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Starting with Apache Druid 31.0.0, support for Zookeeper-based segment loading has been removed.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-operations">ZooKeeper Operations<a href="#zookeeper-operations" class="hash-link" aria-label="Direct link to ZooKeeper Operations" title="Direct link to ZooKeeper Operations">​</a></h2><p>The operations that happen over ZK are</p><ol><li><a href="/docs/31.0.0/design/coordinator">Coordinator</a> leader election</li><li [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/approximate-histograms.html/index.html b/docs/31.0.0/development/approximate-histograms.html/index.html
new file mode 100644
index 000000000..7078bd821
--- /dev/null
+++ b/docs/31.0.0/development/approximate-histograms.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/approximate-histograms">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/approximate-histograms" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/approximate-histograms' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/build.html/index.html b/docs/31.0.0/development/build.html/index.html
new file mode 100644
index 000000000..0c9a0d9a8
--- /dev/null
+++ b/docs/31.0.0/development/build.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/build">
+    <link rel="canonical" href="/docs/31.0.0/development/build" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/build' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/build/index.html b/docs/31.0.0/development/build/index.html
new file mode 100644
index 000000000..64ab915e7
--- /dev/null
+++ b/docs/31.0.0/development/build/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/build" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Build from source | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+that matches the version you want to build.
+For building the latest code in master, follow the latest version of this page
+<a href="https://github.com/apache/druid/blob/master/docs/development/build.md" target="_blank" rel="noopener noreferrer">here</a>:
+make sure it has <code>/master/</code> in the URL.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h4><h5 class="anchor anchorWithStickyNavbar_LWe7" id="installing-java-and-maven">Installing Java and Maven<a href="#installing-java-and-maven" class="hash-link" aria-label="Direct link to Installing Java and Maven" title="Direct l [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/community-extensions/azure.html/index.html b/docs/31.0.0/development/community-extensions/azure.html/index.html
new file mode 100644
index 000000000..e885d11c0
--- /dev/null
+++ b/docs/31.0.0/development/community-extensions/azure.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/azure">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/azure" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/azure' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/community-extensions/cassandra.html/index.html b/docs/31.0.0/development/community-extensions/cassandra.html/index.html
new file mode 100644
index 000000000..f9bba307e
--- /dev/null
+++ b/docs/31.0.0/development/community-extensions/cassandra.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/cassandra">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/cassandra" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/cassandra' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/community-extensions/cloudfiles.html/index.html b/docs/31.0.0/development/community-extensions/cloudfiles.html/index.html
new file mode 100644
index 000000000..e7e596f26
--- /dev/null
+++ b/docs/31.0.0/development/community-extensions/cloudfiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/cloudfiles">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/cloudfiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/cloudfiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/community-extensions/graphite.html/index.html b/docs/31.0.0/development/community-extensions/graphite.html/index.html
new file mode 100644
index 000000000..336cde542
--- /dev/null
+++ b/docs/31.0.0/development/community-extensions/graphite.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/graphite">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/graphite" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/graphite' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/community-extensions/kafka-simple.html/index.html b/docs/31.0.0/development/community-extensions/kafka-simple.html/index.html
new file mode 100644
index 000000000..24348aee8
--- /dev/null
+++ b/docs/31.0.0/development/community-extensions/kafka-simple.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/community-extensions/rabbitmq.html/index.html b/docs/31.0.0/development/community-extensions/rabbitmq.html/index.html
new file mode 100644
index 000000000..24348aee8
--- /dev/null
+++ b/docs/31.0.0/development/community-extensions/rabbitmq.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/contribute-to-docs.html/index.html b/docs/31.0.0/development/contribute-to-docs.html/index.html
new file mode 100644
index 000000000..9aa321777
--- /dev/null
+++ b/docs/31.0.0/development/contribute-to-docs.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/contribute-to-docs">
+    <link rel="canonical" href="/docs/31.0.0/development/contribute-to-docs" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/contribute-to-docs' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/contribute-to-docs/index.html b/docs/31.0.0/development/contribute-to-docs/index.html
new file mode 100644
index 000000000..67c0998d3
--- /dev/null
+++ b/docs/31.0.0/development/contribute-to-docs/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/contribute-to-docs" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Contribute to Druid docs | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<a href="https://druid.apache.org/docs/latest/design/index.html" target="_blank" rel="noopener noreferrer">https://druid.apache.org/docs/latest/design/index.html</a></p><p>If you need to update a Druid doc, locate and update the doc in the Druid repo following the instructions below.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="druid-repo-branches">Druid repo branches<a href="#druid-repo-branches" class="hash-link" aria-label="Direct link to Druid repo branches" title="Direct li [...]
+For the majority of style considerations, the Apache Druid documentation follows the <a href="https://developers.google.com/style" target="_blank" rel="noopener noreferrer">Google Developer Documentation Style Guide</a>.
+The style guide should serve as a point of reference to enable contributors and reviewers to maintain documentation quality.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="notable-style-exceptions">Notable style exceptions<a href="#notable-style-exceptions" class="hash-link" aria-label="Direct link to Notable style exceptions" title="Direct link to Notable style exceptions">​</a></h3><p>In some cases, Google Style might make the Druid docs more difficult to read and understand. Th [...]
+Some code editors may format tables by default.
+See the developer <a href="https://github.com/apache/druid/blob/master/dev/style-conventions.md" target="_blank" rel="noopener noreferrer">style guide</a> for more information.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-. [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/experimental.html/index.html b/docs/31.0.0/development/experimental.html/index.html
new file mode 100644
index 000000000..2d3f004f4
--- /dev/null
+++ b/docs/31.0.0/development/experimental.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/experimental">
+    <link rel="canonical" href="/docs/31.0.0/development/experimental" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/experimental' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/experimental/index.html b/docs/31.0.0/development/experimental/index.html
new file mode 100644
index 000000000..7cf9e04b0
--- /dev/null
+++ b/docs/31.0.0/development/experimental/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/experimental" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Experimental features | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This can mean any of the following things:</p><ol><li>The feature&#x27;s API may change even in minor releases or patch releases.</li><li>The feature may have known &quot;missing&quot; pieces that will be added later.</li><li>The feature may or may not have received full battle-testing in production environments.</li></ol><p>All experimental features are optional.</p><p>Note that not all of these points apply to every experimental feature. Some have been battle-tested in terms of
+implementation, but are still marked experimental due to an evolving API. Please check the documentation for each
+feature for full details.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.0/development/contribute-to-docs"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Contribute to Druid docs</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.0/release-info/release-notes"><div class="pagination-nav__sublabel">Nex [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/aliyun-oss.html/index.html b/docs/31.0.0/development/extensions-contrib/aliyun-oss.html/index.html
new file mode 100644
index 000000000..b1c657521
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/aliyun-oss.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/aliyun-oss">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/aliyun-oss" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/aliyun-oss' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/aliyun-oss/index.html b/docs/31.0.0/development/extensions-contrib/aliyun-oss/index.html
new file mode 100644
index 000000000..a6170e04e
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/aliyun-oss/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/aliyun-oss" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Aliyun OSS | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/developme [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This document describes how to use OSS as Druid deep storage.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2><p>Use the <a href="/docs/31.0.0/operations/pull-deps">pull-deps</a> tool shipped with Druid to install the <code>aliyun-oss-extensions</code> extension, as described <a href="/docs/31.0.0/configuration/extensions#communi [...]
+To do this, add following configurations:</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td><code>druid.indexer.logs.type</code></td><td>Global deep storage provider. Must be set to <code>oss</code> to make use of this extension.</td><td>yes</td></tr><tr><td><code>druid.indexer.logs.oss.bucket</code></td><td>The bucket used to keep logs. It could be the same as <code>druid.storage.oss.bucket</code></td><td>yes</td></tr><tr><td><code>dr [...]
+In this case, the <code>uris</code> property of the OSS&#x27;s input source can be used for reading, as shown:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(1 [...]
+Please refer to the official <a href="https://www.alibabacloud.com/help/doc-detail/42777.htm" target="_blank" rel="noopener noreferrer">OSS permission troubleshooting document</a> to find a solution.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#installation" cl [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter.html/index.html b/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter.html/index.html
new file mode 100644
index 000000000..a6c235707
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter/index.html b/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter/index.html
new file mode 100644
index 000000000..c9bae5e43
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/ambari-metrics-emitter/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/ambari-metrics-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Ambari Metrics Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+ambari-metrics metric path is organized using the following schema:
+<code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;druid metrics dimensions&gt;.&lt;druid metrics name&gt;</code>
+Properly naming the metrics is critical to avoid conflicts, confusing data and potentially wrong interpretation later on.</p><p>Example <code>druid.historical.hist-host1:8080.MyDataSourceName.GroupBy.query/time</code>:</p><ul><li><code>druid</code> -&gt; namespace prefix</li><li><code>historical</code> -&gt; service name</li><li><code>hist-host1:8080</code> -&gt; druid hostname</li><li><code>MyDataSourceName</code> -&gt; dimension value</li><li><code>GroupBy</code> -&gt; dimension value< [...]
+The path will be in the form <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;dimensions values ordered by dimension&#x27;s name&gt;.&lt;metric&gt;</code>
+User has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code></p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-b [...]
+Same as for the <code>all</code> converter user has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code>
+White-list based converter comes with the following  default white list map located under resources in <code>./src/main/resources/defaultWhiteListMap.json</code></p><p>Although user can override the default white list map by supplying a property called <code>mapPath</code>.
+This property is a String containing  the path for the file containing <strong>white list map JSON object</strong>.
+For example the following converter will read the map from the file <code>/pathPrefix/fileName.json</code>.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/cassandra.html/index.html b/docs/31.0.0/development/extensions-contrib/cassandra.html/index.html
new file mode 100644
index 000000000..f9bba307e
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/cassandra.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/cassandra">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/cassandra" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/cassandra' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/blog/index.html b/docs/31.0.0/development/extensions-contrib/cassandra/index.html
similarity index 57%
copy from blog/index.html
copy to docs/31.0.0/development/extensions-contrib/cassandra/index.html
index 67ba54693..9ce953a5b 100644
--- a/blog/index.html
+++ b/docs/31.0.0/development/extensions-contrib/cassandra/index.html
@@ -1,9 +1,9 @@
 <!doctype html>
-<html lang="en" dir="ltr" class="mdx-wrapper mdx-page plugin-pages plugin-id-default" data-has-hydrated="false">
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/cassandra" data-has-hydrated="false">
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.3">
-<title data-rh="true">Redirecting... | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/blog"><meta data- [...]
+<title data-rh="true">Apache Cassandra | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/dev [...]
 <link rel="preconnect" href="https://www.googletagmanager.com">
 <script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
 <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
@@ -14,13 +14,15 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+be leveraged for deep storage.  This requires some additional Druid configuration as well as setting up the necessary
+schema within a Cassandra keystore.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div> [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/cloudfiles.html/index.html b/docs/31.0.0/development/extensions-contrib/cloudfiles.html/index.html
new file mode 100644
index 000000000..e7e596f26
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/cloudfiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/cloudfiles">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/cloudfiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/cloudfiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/cloudfiles/index.html b/docs/31.0.0/development/extensions-contrib/cloudfiles/index.html
new file mode 100644
index 000000000..6bd402b8a
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/cloudfiles/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/cloudfiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Rackspace Cloud Files | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/compressed-big-decimal.html/index.html b/docs/31.0.0/development/extensions-contrib/compressed-big-decimal.html/index.html
new file mode 100644
index 000000000..d494051d8
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/compressed-big-decimal.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/compressed-big-decimal">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/compressed-big-decimal" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/compressed-big-decimal' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/compressed-big-decimal/index.html b/docs/31.0.0/development/extensions-contrib/compressed-big-decimal/index.html
new file mode 100644
index 000000000..8ffa9ee0f
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/compressed-big-decimal/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/compressed-big-decimal" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Compressed Big Decimal | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles.html/index.html b/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles.html/index.html
new file mode 100644
index 000000000..78bee6f02
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles/index.html b/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles/index.html
new file mode 100644
index 000000000..f5f9e6495
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/ddsketch-quantiles/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/ddsketch-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DDSketches for Approximate Quantiles module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/delta-lake.html/index.html b/docs/31.0.0/development/extensions-contrib/delta-lake.html/index.html
new file mode 100644
index 000000000..bbfc218d9
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/delta-lake.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/delta-lake">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/delta-lake" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/delta-lake' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/delta-lake/index.html b/docs/31.0.0/development/extensions-contrib/delta-lake/index.html
new file mode 100644
index 000000000..dc02c18b1
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/delta-lake/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/delta-lake" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Delta Lake extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Lakehouse architecture with various compute engines. <a href="/docs/31.0.0/ingestion/input-sources#delta-lake-input-source">DeltaLakeInputSource</a> lets
+you ingest data stored in a Delta Lake table into Apache Druid. To use the Delta Lake extension, add the <code>druid-deltalake-extensions</code> to the list of loaded extensions.
+See <a href="/docs/31.0.0/configuration/extensions#loading-extensions">Loading extensions</a> for more information.</p><p>The Delta input source reads the configured Delta Lake table and extracts the underlying Delta files in the table&#x27;s latest snapshot
+based on an optional Delta filter. These Delta Lake files are versioned Parquet files.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="version-support">Version support<a href="#version-support" class="hash-link" aria-label="Direct link to Version support" title="Direct link to Version support">​</a></h2><p>The Delta Lake extension uses the Delta Kernel introduced in Delta Lake 3.0.0, which is compatible with Apache Spark 3.5.x.
+Older versions are unsupported, so consider upgrading to Delta Lake 3.0.x or higher to use this extension.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="downloading-delta-lake-extension">Downloading Delta Lake extension<a href="#downloading-delta-lake-extension" class="hash-link" aria-label="Direct link to Downloading Delta Lake extension" title="Direct link to Downloading Delta Lake extension">​</a></h2><p>To download <code>druid-deltalake-extensions</code>, run the following co [...]
+Druid version:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">java </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span> [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/distinctcount.html/index.html b/docs/31.0.0/development/extensions-contrib/distinctcount.html/index.html
new file mode 100644
index 000000000..abb9cff80
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/distinctcount.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/distinctcount">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/distinctcount" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/distinctcount' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/distinctcount/index.html b/docs/31.0.0/development/extensions-contrib/distinctcount/index.html
new file mode 100644
index 000000000..191dd6402
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/distinctcount/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/distinctcount" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DistinctCount Aggregator | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/gce-extensions.html/index.html b/docs/31.0.0/development/extensions-contrib/gce-extensions.html/index.html
new file mode 100644
index 000000000..19274a670
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/gce-extensions.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/gce-extensions">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/gce-extensions" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/gce-extensions' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/gce-extensions/index.html b/docs/31.0.0/development/extensions-contrib/gce-extensions/index.html
new file mode 100644
index 000000000..c0cfe401d
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/gce-extensions/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/gce-extensions" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">GCE Extensions | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/devel [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+of GCE (MIG from now on). This choice has been made to ease the configuration of the machines and simplify their
+management.</p><p>For this reason, in order to use this extension, the user must have created</p><ol><li>An instance template with the right machine type and image to bu used to run the Middle Manager</li><li>A MIG that has been configured to use the instance template created in the point above</li></ol><p>Moreover, in order to be able to rescale the machines in the MIG, the Overlord must run with a service account
+guaranteeing the following two scopes from the <a href="https://developers.google.com/identity/protocols/googlescopes#computev1" target="_blank" rel="noopener noreferrer">Compute Engine API</a></p><ul><li><code>https://www.googleapis.com/auth/cloud-platform</code></li><li><code>https://www.googleapis.com/auth/compute</code></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overlord-dynamic-configuration">Overlord Dynamic Configuration<a href="#overlord-dynamic-configuration" cl [...]
+the <code>maxNumWorkers</code> and <code>minNumWorkers</code> used to define the boundaries in between which the
+number of instances must be at any time.</p><p>The internal level is the <code>envConfig</code> and it is used to specify</p><ul><li>The <code>numInstances</code> used to specify how many workers will be spawned at each
+request to provision more workers.  This is safe to be left to <code>1</code></li><li>The <code>projectId</code> used to specify the name of the project in which the MIG resides</li><li>The <code>zoneName</code> used to identify in which zone of the worlds the MIG is</li><li>The <code>managedInstanceGroupName</code> used to specify the MIG containing the instances created or
+removed</li></ul><p>Please refer to the Overlord Dynamic Configuration section in the main <a href="/docs/31.0.0/configuration/">documentation</a>
+for parameters other than the ones specified here, such as <code>selectStrategy</code> etc.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="known-limitations">Known limitations<a href="#known-limitations" class="hash-link" aria-label="Direct link to Known limitations" title="Direct link to Known limitations">​</a></h2><ul><li>The module internally uses the <a href="https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers/listManagedInstances" target="_blank" re [...]
+call from the API and, while the documentation of the API states that the call can be paged through using the
+<code>pageToken</code> argument, the responses to such call do not provide any <code>nextPageToken</code> to set such parameter. This means
+that the extension can operate safely with a maximum of 500 Middle Managers instances at any time (the maximum number
+of instances to be returned for each call).</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overlord-dynamic-configuration" class="table-of-contents__link toc-highlight">Overlord Dynamic Configuration</a></li><li><a href="#known-limitations" class="table-of- [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/google.html/index.html b/docs/31.0.0/development/extensions-contrib/google.html/index.html
new file mode 100644
index 000000000..0619d3cbb
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/google.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/google">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/google" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/google' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/graphite.html/index.html b/docs/31.0.0/development/extensions-contrib/graphite.html/index.html
new file mode 100644
index 000000000..336cde542
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/graphite.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/graphite">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/graphite" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/graphite' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/graphite/index.html b/docs/31.0.0/development/extensions-contrib/graphite/index.html
new file mode 100644
index 000000000..64222fb4e
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/graphite/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/graphite" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Graphite Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Metrics can be sent by using <a href="http://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-plaintext-protocol" target="_blank" rel="noopener noreferrer">plaintext</a> or <a href="http://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-pickle-protocol" target="_blank" rel="noopener noreferrer">pickle</a> protocol.
+The pickle protocol is more efficient and supports sending batches of metrics (plaintext protocol send only one metric) in one request; batch size is configurable.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>All the configuration parameters for graphite emitter are under <code>druid.emitter.graphite</code>.</p><table> [...]
+Graphite metric path is organized using the following schema:
+<code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;druid metrics dimensions&gt;.&lt;druid metrics name&gt;</code>
+Properly naming the metrics is critical to avoid conflicts, confusing data and potentially wrong interpretation later on.</p><p>Example <code>druid.historical.hist-host1_yahoo_com:8080.MyDataSourceName.GroupBy.query/time</code>:</p><ul><li><code>druid</code> -&gt; namespace prefix</li><li><code>historical</code> -&gt; service name</li><li><code>hist-host1.yahoo.com:8080</code> -&gt; druid hostname</li><li><code>MyDataSourceName</code> -&gt; dimension value</li><li><code>GroupBy</code> -& [...]
+The path will be in the form <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;dimensions values ordered by dimension&#x27;s name&gt;.&lt;metric&gt;</code>
+User has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code></p><p>You can omit the hostname by setting <code>ignoreHostname=true</code>
+<code>druid.SERVICE_NAME.dataSourceName.queryType.query/time</code></p><p>You can omit the service name by setting <code>ignoreServiceName=true</code>
+<code>druid.HOSTNAME.dataSourceName.queryType.query/time</code></p><p>Elements in metric name by default are separated by &quot;/&quot;, so graphite will create all metrics on one level. If you want to have metrics in the tree structure, you have to set <code>replaceSlashWithDot=true</code>
+Original: <code>druid.HOSTNAME.dataSourceName.queryType.query/time</code>
+Changed: <code>druid.HOSTNAME.dataSourceName.queryType.query.time</code></p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="to [...]
+Same as for the <code>all</code> converter user has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code>
+White-list based converter comes with the following  default white list map located under resources in <code>./src/main/resources/defaultWhiteListMap.json</code></p><p>Although user can override the default white list map by supplying a property called <code>mapPath</code>.
+This property is a String containing the path for the file containing <strong>white list map JSON object</strong>.
+For example the following converter will read the map from the file <code>/pathPrefix/fileName.json</code>.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/iceberg.html/index.html b/docs/31.0.0/development/extensions-contrib/iceberg.html/index.html
new file mode 100644
index 000000000..7d30c943e
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/iceberg.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/iceberg">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/iceberg" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/iceberg' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/iceberg/index.html b/docs/31.0.0/development/extensions-contrib/iceberg/index.html
new file mode 100644
index 000000000..a294b29d3
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/iceberg/index.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/iceberg" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Iceberg extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Iceberg refers to these metastores as catalogs. The Iceberg extension lets you connect to the following Iceberg catalog types:</p><ul><li>REST-based catalog</li><li>Hive metastore catalog</li><li>Local catalog</li></ul><p>Druid does not support AWS Glue catalog yet.</p><p>For a given catalog, Iceberg input source reads the table name from the catalog, applies the filters, and extracts all the underlying live data files up to the latest snapshot.
+The data files can be in Parquet, ORC, or Avro formats. The data files typically reside in a warehouse location, which can be in HDFS, S3, or the local filesystem.
+The <code>druid-iceberg-extensions</code> extension relies on the existing input source connectors in Druid to read the data files from the warehouse. Therefore, the Iceberg input source can be considered as an intermediate input source, which provides the file paths for other input source implementations.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="hive-metastore-catalog">Hive metastore catalog<a href="#hive-metastore-catalog" class="hash-link" aria-label="Direct link to Hive  [...]
+<!-- -->You can also specify Hive properties under the <code>catalogProperties</code> object in the ingestion spec. </p><p>The <code>druid-iceberg-extensions</code> extension presently only supports HDFS, S3 and local warehouse directories.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-from-hdfs-warehouse">Read from HDFS warehouse<a href="#read-from-hdfs-warehouse" class="hash-link" aria-label="Direct link to Read from HDFS warehouse" title="Direct link to Read from HDFS war [...]
+The <code>warehouseSource</code> type in the ingestion spec should be <code>hdfs</code>.</p><p>For authenticating with Kerberized clusters, include <code>principal</code> and <code>keytab</code> properties in the <code>catalogProperties</code> object:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-s [...]
+Set the <code>type</code> property of the <code>warehouseSource</code> object to <code>s3</code> in the ingestion spec. If the S3 endpoint for the warehouse is different from the endpoint configured as the deep storage, include the following properties in the <code>warehouseSource</code> object to define the S3 endpoint settings:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockConte [...]
+The following properties are required in the <code>catalogProperties</code>:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;catalogProperties&quot;</span><span class="token  [...]
+The <code>warehouseSource</code> is set to <code>local</code> because this catalog only supports reading from a local filesystem.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rest-catalog">REST catalog<a href="#rest-catalog" class="hash-link" aria-label="Direct link to REST catalog" title="Direct link to REST catalog">​</a></h2><p>To connect to an Iceberg REST Catalog server, configure the <code>icebergCatalog</code> type as <code>rest</code>. The Iceberg REST Open API spec give [...]
+Security credentials may be provided in the <code>catalogProperties</code> object.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="downloading-iceberg-extension">Downloading Iceberg extension<a href="#downloading-iceberg-extension" class="hash-link" aria-label="Direct link to Downloading Iceberg extension" title="Direct link to Downloading Iceberg extension">​</a></h2><p>To download <code>druid-iceberg-extensions</code>, run the following command after replacing <code>&lt;VERSION&g [...]
+Druid version:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">java </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span> [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/influx.html/index.html b/docs/31.0.0/development/extensions-contrib/influx.html/index.html
new file mode 100644
index 000000000..84fc8eca4
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/influx.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/influx">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/influx" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/influx' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/influx/index.html b/docs/31.0.0/development/extensions-contrib/influx/index.html
new file mode 100644
index 000000000..0084d852f
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/influx/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/influx" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">InfluxDB Line Protocol Parser | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/influxdb-emitter.html/index.html b/docs/31.0.0/development/extensions-contrib/influxdb-emitter.html/index.html
new file mode 100644
index 000000000..ff8a7f6f0
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/influxdb-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/influxdb-emitter">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/influxdb-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/influxdb-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/influxdb-emitter/index.html b/docs/31.0.0/development/extensions-contrib/influxdb-emitter/index.html
new file mode 100644
index 000000000..0d23b448a
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/influxdb-emitter/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/influxdb-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">InfluxDB Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+When a metric event is fired it is added to a queue of events. After a configurable amount of time, the events on the queue are transformed to InfluxDB&#x27;s line protocol
+and POSTed to the InfluxDB HTTP API. The entire queue is flushed at this point. The queue is also flushed as the emitter is shutdown.</p><p>Note that authentication and authorization must be <a href="https://docs.influxdata.com/influxdb/v1.7/administration/authentication_and_authorization/" target="_blank" rel="noopener noreferrer">enabled</a> on the InfluxDB server.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-lin [...]
+which will be added as a tag to the line protocol string if the metric has a dimension from the white list.
+The value of the dimension is sanitized such that every occurrence of a dot or whitespace is replaced with a <code>_</code> .</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#introduction" class="table-of-contents__link toc-highlight">Introduction</a></li><li><a hr [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/k8s-jobs.html/index.html b/docs/31.0.0/development/extensions-contrib/k8s-jobs.html/index.html
new file mode 100644
index 000000000..189202100
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/k8s-jobs.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/k8s-jobs">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/k8s-jobs" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/k8s-jobs' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/k8s-jobs/index.html b/docs/31.0.0/development/extensions-contrib/k8s-jobs/index.html
new file mode 100644
index 000000000..c3d655c41
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/k8s-jobs/index.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/k8s-jobs" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">MM-less Druid in K8s | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<code>druid.indexer.runner.type: k8s</code> and <code>druid.indexer.task.encapsulatedTask: true</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dynamic-config">Dynamic config<a href="#dynamic-config" class="hash-link" aria-label="Direct link to Dynamic config" title="Direct link to Dynamic config">​</a></h3><p>Druid operators can dynamically tune certain features within this extension. You don&#x27;t need to restart the Overlord
+service for these changes to take effect.</p><p>Druid can dynamically tune <a href="#pod-template-selection">pod template selection</a>, which allows you to configure the pod
+template based on the task to be run. To enable dynamic pod template selection, first configure the
+<a href="#custom-template-pod-adapter">custom template pod adapter</a>.</p><p>Use the following APIs to view and update the dynamic configuration for the Kubernetes task runner.</p><p>To use these APIs, ensure you have read and write permissions for the CONFIG resource type with the resource name
+&quot;CONFIG&quot;. For more information on permissions, see
+<a href="/docs/31.0.0/operations/security-user-auth#config">User authentication and authorization</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="get-dynamic-configuration">Get dynamic configuration<a href="#get-dynamic-configuration" class="hash-link" aria-label="Direct link to Get dynamic configuration" title="Direct link to Get dynamic configuration">​</a></h4><p>Retrieves the current dynamic execution config for the Kubernetes task runner.
+Returns a JSON object with the dynamic configuration properties.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="url">URL<a href="#url" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h5><p><code>GET</code> <code>/druid/indexer/v1/k8s/taskrunner/executionconfig</code></p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="responses">Responses<a href="#responses" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Response [...]
+an empty array if there are no history records available.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="url-2">URL<a href="#url-2" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h5><p><code>GET</code> <code>/druid/indexer/v1/k8s/taskrunner/executionconfig/history</code></p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="query-parameters">Query parameters<a href="#query-parameters" class="hash-link" aria-label="Direct link to Query parameter [...]
+Dockerfile:
+<code>ENTRYPOINT: [&quot;foo.sh&quot;]</code></p><p>and in your sidecar specs:</p><div class="language-container: codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-container: codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">        name: foo</span><br></span><span cla [...]
+*<em>Even for sidecars like Istio which are dynamically created by the service mesh, this needs to happen.</em></p><p>Instead, do the following:
+You can keep your Dockerfile the same but you must have a sidecar spec like so:</p><div class="language-container: codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-container: codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">        name: foo</span><br></span><span cl [...]
+<code>druid.indexer.runner.labels: &#x27;{&quot;key&quot;:&quot;value&quot;}&#x27;</code>
+Annotations are the same with:
+<code>druid.indexer.runner.annotations: &#x27;{&quot;key&quot;:&quot;value&quot;}&#x27;</code></p><p>All other configurations you had for the middle manager tasks must be moved under the overlord with one caveat, you must specify javaOpts as an array:
+<code>druid.indexer.runner.javaOptsArray</code>, <code>druid.indexer.runner.javaOpts</code> is no longer supported.</p><p>If you are running without a middle manager you need to also use <code>druid.processing.intermediaryData.storage.type=deepstore</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="custom-template-pod-adapter">Custom Template Pod Adapter<a href="#custom-template-pod-adapter" class="hash-link" aria-label="Direct link to Custom Template Pod Adapter" title="Direc [...]
+implementing the behavior that maps templates to specific task types. This is the default pod template selection
+strategy. To explicitly select this strategy, set the <code>podTemplateSelectStrategy</code> in the dynamic execution config to</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" s [...]
+<code>druid.indexer.runner.k8s.podTemplate.{taskType}: /path/to/taskSpecificPodSpec.yaml</code> where {taskType} is the name of the
+task type. For example, <code>index_parallel</code>.</p><p>If you are trying to use the default image&#x27;s environment variable parsing feature to set runtime properties, you need to add a extra escape underscore when specifying pod templates.
+For example, set the environment variable <code>druid_indexer_runner_k8s_podTemplate_index__kafka</code> when you set the runtime property <code>druid.indexer.runner.k8s.podTemplate.index_kafka</code></p><p>The following example shows a configuration for task-based pod template selection:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="pr [...]
+which pod template to use to run the task. Pod  templates are configured in the runtime properties like
+<code>druid.indexer.runner.k8s.podTemplate.&lt;selectionKey&gt;=...</code>.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class= [...]
+match any selector in the list, it will use the <code>base</code> pod template.</p><p>For a task to match a selector, all the conditions within the selector must match. A selector can match on</p><ul><li><code>type</code>: Type of the task</li><li><code>dataSource</code>: Destination datasource of the task.</li><li><code>context.tags</code>: Tags passed in the task&#x27;s context.</li></ul><h5 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-l [...]
+Druid selects the pod template <code>podSpecWithHighMemRequests.yaml</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="properties">Properties<a href="#properties" class="hash-link" aria-label="Direct link to Properties" title="Direct link to Properties">​</a></h3><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th><th>required</th></tr></thead><tbody><tr><td><code>druid.indexer.runner.debugJobs</code></td><td><code>boolean</code></td [...]
+<code>druid.indexer.runner.type: k8sAndWorker</code> (instead of <code>druid.indexer.runner.type: k8s</code>)</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="additional-configurations">Additional Configurations<a href="#additional-configurations" class="hash-link" aria-label="Direct link to Additional Configurations" title="Direct link to Additional Configurations">​</a></h3><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th><th>required< [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/kafka-emitter.html/index.html b/docs/31.0.0/development/extensions-contrib/kafka-emitter.html/index.html
new file mode 100644
index 000000000..4a9b38234
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/kafka-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/kafka-emitter">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/kafka-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/kafka-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/kafka-emitter/index.html b/docs/31.0.0/development/extensions-contrib/kafka-emitter/index.html
new file mode 100644
index 000000000..3445f261a
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/kafka-emitter/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/kafka-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Kafka Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/develo [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Currently, Kafka has not only their nice ecosystem but also consumer API readily available.
+So, If you currently use Kafka, It&#x27;s easy to integrate various tool or UI
+to monitor the status of your Druid cluster with this extension.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>All the configuration parameters for the Kafka emitter are under <code>druid.emitter.kafka</code>.</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody> [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/kafka-simple.html/index.html b/docs/31.0.0/development/extensions-contrib/kafka-simple.html/index.html
new file mode 100644
index 000000000..45c547baa
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/kafka-simple.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/materialized-view.html/index.html b/docs/31.0.0/development/extensions-contrib/materialized-view.html/index.html
new file mode 100644
index 000000000..6349d9c14
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/materialized-view.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/materialized-view">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/materialized-view" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/materialized-view' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/materialized-view/index.html b/docs/31.0.0/development/extensions-contrib/materialized-view/index.html
new file mode 100644
index 000000000..6db92ea9c
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/materialized-view/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/materialized-view" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Materialized View | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The <code>derivativeDataSource</code> supervisor is used to keep the timeline of derived-dataSource consistent with base-dataSource. Each <code>derivativeDataSource</code> supervisor  is responsible for one derived-dataSource.</p><p>A sample derivativeDataSource supervisor spec is shown below:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="pri [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles.html/index.html b/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles.html/index.html
new file mode 100644
index 000000000..15d25bd30
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles/index.html b/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles/index.html
new file mode 100644
index 000000000..0b94c4157
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/momentsketch-quantiles/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/momentsketch-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Moment Sketches for Approximate Quantiles module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https:// [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The momentsketch provides coarse quantile estimates with less space and aggregation time overheads than traditional sketches, approaching the performance of counts and sums by reconstructing distributions from computed statistics.</p><p>To use this Apache Druid extension, <a href="/docs/31.0.0/configuration/extensions#loading-extensions">include</a> in the extensions load list.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aggregator">Aggregator<a href="#aggregator" class="hash-l [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/moving-average-query.html/index.html b/docs/31.0.0/development/extensions-contrib/moving-average-query.html/index.html
new file mode 100644
index 000000000..f0e54c563
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/moving-average-query.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/moving-average-query">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/moving-average-query" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/moving-average-query' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/moving-average-query/index.html b/docs/31.0.0/development/extensions-contrib/moving-average-query/index.html
new file mode 100644
index 000000000..09c5c2daa
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/moving-average-query/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/moving-average-query" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Moving Average Query | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Using a MeanNoNulls averager is useful when the interval starts at the dataset beginning time.
+In that case, the first records will ignore missing buckets and average won&#x27;t be artificially low.
+However, this also means that empty days in a sparse dataset will also be ignored.</p><p>Example of usage:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199,  [...]
+A prime example would be weekly buckets, resulting in a Day of Week calculation. (Other examples: Month of year, Hour of day).</p><p>I.e. when using these parameters:</p><ul><li><em>granularity</em>: period=P1D (daily)</li><li><em>buckets</em>: 28</li><li><em>cycleSize</em>: 7</li></ul><p>Within each output record, the averager will compute the result over the following buckets: current (#0), #7, #14, #21.
+Whereas without specifying cycleSize it would have computed over all 28 buckets.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples">​</a></h2><p>All examples are based on the Wikipedia dataset provided in the Druid <a href="/docs/31.0.0/tutorials/">tutorials</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="basic-example">Basic example<a href="#basic-ex [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/opentsdb-emitter.html/index.html b/docs/31.0.0/development/extensions-contrib/opentsdb-emitter.html/index.html
new file mode 100644
index 000000000..2e358a212
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/opentsdb-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/opentsdb-emitter">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/opentsdb-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/opentsdb-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/opentsdb-emitter/index.html b/docs/31.0.0/development/extensions-contrib/opentsdb-emitter/index.html
new file mode 100644
index 000000000..9946f8718
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/opentsdb-emitter/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/opentsdb-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">OpenTSDB Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+If the user does not specify their own JSON file, a default file is used.  All metrics are expected to be configured in the JSON file. Metrics which are not configured will be logged.
+Desired metrics and dimensions is organized using the following schema:<code>&lt;druid metric name&gt; : [ &lt;dimension list&gt; ]</code><br>
+e.g.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;query/time&quot;</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> < [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/orc.html/index.html b/docs/31.0.0/development/extensions-contrib/orc.html/index.html
new file mode 100644
index 000000000..21d6f881a
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/orc.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/orc">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/orc" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/orc' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/parquet.html/index.html b/docs/31.0.0/development/extensions-contrib/parquet.html/index.html
new file mode 100644
index 000000000..94f8502a3
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/parquet.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/parquet">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/parquet" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/parquet' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/prometheus.html/index.html b/docs/31.0.0/development/extensions-contrib/prometheus.html/index.html
new file mode 100644
index 000000000..ac0713dcf
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/prometheus.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/prometheus">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/prometheus" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/prometheus' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/prometheus/index.html b/docs/31.0.0/development/extensions-contrib/prometheus/index.html
new file mode 100644
index 000000000..6149cdb62
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/prometheus/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/prometheus" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Prometheus Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+So, these tasks need to be configured to use <code>pushgateway</code> strategy to push metrics from Druid to prometheus gateway.</p><p>If this emitter is configured to use <code>exporter</code> strategy globally, some of the above configurations need to be overridden in the middle manager so that spawned peon tasks can still use the <code>pushgateway</code> strategy.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><d [...]
+be provided as a JSON file.  Additionally, this mapping specifies which dimensions should be included for each metric.  Prometheus expects
+histogram timers to use Seconds as the base unit.  Timers which do not use seconds as a base unit can use the <code>conversionFactor</code> to set
+the base time unit. If the user does not specify their own JSON file, a default mapping is used.  All
+metrics are expected to be mapped. Metrics which are not mapped will not be tracked.</p><p>Prometheus metric path is organized using the following schema:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span  [...]
+the service name. For example:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;druid/coordinator-segment/count&quot;</span><span class="token plain"> </span><span class="toke [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion.html/index.html b/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion.html/index.html
new file mode 100644
index 000000000..9d39edea2
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion/index.html b/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion/index.html
new file mode 100644
index 000000000..be2b27a64
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/rabbit-super-stream-injestion/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/rabbit-super-stream-injestion" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">RabbitMQ superstream ingestion | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+These indexing tasks read events from a rabbit super-stream. The supervisor oversees the state of the indexing tasks to:</p><ul><li><p>coordinate handoffs</p></li><li><p>manage failures</p></li><li><p>ensure that Druid maintains scalability and replication requirements</p><p>To use the rabbit stream indexing service, load the <code>druid-rabbit-indexing-service</code> community druid extension.
+See <a href="/docs/31.0.0/configuration/extensions#loading-community-extensions">Loading community extensions</a> for more information.</p></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="submitting-a-supervisor-spec">Submitting a supervisor spec<a href="#submitting-a-supervisor-spec" class="hash-link" aria-label="Direct link to Submitting a supervisor spec" title="Direct link to Submitting a supervisor spec">​</a></h2><p>To use the rabbit stream indexing service, load the <c [...]
+For all supervisor APIs, check <a href="/docs/31.0.0/api-reference/supervisor-api">Supervisor APIs</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rabbitmq-authentication">RabbitMQ authentication<a href="#rabbitmq-authentication" class="hash-link" aria-label="Direct link to RabbitMQ authentication" title="Direct link to RabbitMQ authentication">​</a></h3><p>To authenticate with RabbitMQ securely, you must provide a username and password, as well as configure
+a certificate if you aren&#x27;t using a standard certificate provider.</p><p>In order to configure these, use the dynamic configuration provider of the ioConfig:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class= [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/rabbitmq.html/index.html b/docs/31.0.0/development/extensions-contrib/rabbitmq.html/index.html
new file mode 100644
index 000000000..45c547baa
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/rabbitmq.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/redis-cache.html/index.html b/docs/31.0.0/development/extensions-contrib/redis-cache.html/index.html
new file mode 100644
index 000000000..d4b15aee7
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/redis-cache.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/redis-cache">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/redis-cache" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/redis-cache' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/redis-cache/index.html b/docs/31.0.0/development/extensions-contrib/redis-cache/index.html
new file mode 100644
index 000000000..ec4a48843
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/redis-cache/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/redis-cache" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid Redis Cache | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/rocketmq.html/index.html b/docs/31.0.0/development/extensions-contrib/rocketmq.html/index.html
new file mode 100644
index 000000000..45c547baa
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/rocketmq.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.0/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/scan-query.html/index.html b/docs/31.0.0/development/extensions-contrib/scan-query.html/index.html
new file mode 100644
index 000000000..dac775b35
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/scan-query.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/querying/scan-query">
+    <link rel="canonical" href="/docs/31.0.0/querying/scan-query" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/querying/scan-query' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/spectator-histogram.html/index.html b/docs/31.0.0/development/extensions-contrib/spectator-histogram.html/index.html
new file mode 100644
index 000000000..840b6a6fc
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/spectator-histogram.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/spectator-histogram">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/spectator-histogram" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/spectator-histogram' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/spectator-histogram/index.html b/docs/31.0.0/development/extensions-contrib/spectator-histogram/index.html
new file mode 100644
index 000000000..e71f0755b
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/spectator-histogram/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/spectator-histogram" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Spectator Histogram module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+post-aggregators based on Spectator fixed-bucket histograms.</p><p>Consider SpectatorHistogram to compute percentile approximations. This extension has a reduced storage footprint compared to the <a href="/docs/31.0.0/development/extensions-core/datasketches-extension">DataSketches extension</a>, which results in smaller segment sizes, faster loading from deep storage, and lower memory usage. This extension provides fast and accurate queries on large datasets at low storage cost.</p><p>T [...]
+adds 48 bytes per row. This represents an eightfold reduction in additional storage size for spectator histograms.</p><p><img loading="lazy" alt="Comparison of datasource sizes in web console" src="/assets/images/spectator-histogram-size-comparison-665af4720d1b302515a31f758b824f26.png" width="689" height="225" class="img_ev3q"></p><p>As rollup improves, so does the size savings. For example, when you ingest the Wikipedia dataset
+with day-grain query granularity and remove all dimensions except <code>countryName</code>,
+this results in a segment that has just 106 rows. The base segment has 87 bytes per row.
+Compare the following bytes per row for SpectatorHistogram versus DataSketches:</p><ul><li>An additional <code>spectatorHistogram</code> column adds 27 bytes per row on average.</li><li>An additional <code>quantilesDoublesSketch</code> column adds 255 bytes per row.</li></ul><p>SpectatorHistogram reduces the additional storage size by 9.4 times in this example.
+Storage gains will differ per dataset depending on the variance and rollup of the data.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="background">Background<a href="#background" class="hash-link" aria-label="Direct link to Background" title="Direct link to Background">​</a></h2><p><a href="https://netflix.github.io/atlas-docs/spectator/" target="_blank" rel="noopener noreferrer">Spectator</a> is a simple library
+for instrumenting code to record dimensional time series data.
+It was built, primarily, to work with <a href="https://netflix.github.io/atlas-docs/" target="_blank" rel="noopener noreferrer">Atlas</a>.
+Atlas was developed by Netflix to manage dimensional time series data for near
+real-time operational insight.</p><p>With the <a href="https://github.com/Netflix-Skunkworks/iep-apps/tree/main/atlas-druid" target="_blank" rel="noopener noreferrer">Atlas-Druid</a>
+service, it&#x27;s possible to use the power of Atlas queries, backed by Druid as a
+data store to benefit from high-dimensionality and high-cardinality data.</p><p>SpectatorHistogram is designed for efficient parallel aggregations while still
+allowing for filtering and grouping by dimensions.
+It provides similar functionality to the built-in DataSketches <code>quantilesDoublesSketch</code> aggregator, but is
+opinionated to maintain higher absolute accuracy at smaller values.
+Larger values have lower absolute accuracy; however, relative accuracy is maintained across the range.
+See <a href="#histogram-bucket-boundaries">Bucket boundaries</a> for more information.
+The SpectatorHistogram is optimized for typical measurements from cloud services and web apps,
+such as page load time, transferred bytes, response time, and request latency.</p><p>Through some trade-offs SpectatorHistogram provides a significantly more compact
+representation with the same aggregation performance and accuracy as
+DataSketches Quantiles Sketch. Note that results depend on the dataset.
+Also see the <!-- -->[limitations]<!-- -->(#limitations] of this extension.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="limitations">Limitations<a href="#limitations" class="hash-link" aria-label="Direct link to Limitations" title="Direct link to Limitations">​</a></h2><ul><li>Supports positive long integer values within the range of [0, 2^53). Negatives are
+coerced to 0.</li><li>Does not support decimals.</li><li>Does not support Druid SQL queries, only native queries.</li><li>Does not support vectorized queries.</li><li>Generates 276 fixed buckets with increasing bucket widths. In practice, the observed error of computed percentiles ranges from 0.1% to 3%, exclusive. See <a href="#histogram-bucket-boundaries">Bucket boundaries</a> for the full list of bucket boundaries.</li></ul><div class="theme-admonition theme-admonition-tip alert alert [...]
+values as well as aggregating or combining pre-aggregated histograms generated using
+the SpectatorHistogram aggregator itself.
+While you can generate histograms on the fly at query time, it is generally more
+performant to generate histograms during ingestion and then combine them at
+query time. This is especially true where rollup is enabled. It may be misleading or
+incorrect to generate histograms from already rolled-up summed data.</p><p>The module provides postAggregators, <code>percentileSpectatorHistogram</code> (singular) and
+<code>percentilesSpectatorHistogram</code> (plural), to compute approximate
+percentiles from histograms generated by the SpectatorHistogram aggregator.
+Again, these postAggregators can be used to compute percentiles from raw numeric
+values via the SpectatorHistogram aggregator or from pre-aggregated histograms.</p><blockquote><p>If you&#x27;re only using the aggregator to compute percentiles from raw numeric values,
+then you can use the built-in quantilesDoublesSketch aggregator instead. The performance
+and accuracy are comparable. However, the DataSketches aggregator supports negative values,
+and you don&#x27;t need to download an additional extension.</p></blockquote><p>An aggregated SpectatorHistogram can also be queried using a <code>longSum</code> or <code>doubleSum</code>
+aggregator to retrieve the population of the histogram. This is effectively the count
+of the number of values that were aggregated into the histogram. This flexibility can
+avoid the need to maintain a separate metric for the count of values.</p><p>For high-frequency measurements, you may need to pre-aggregate data at the client prior
+to sending into Druid. For example, if you&#x27;re measuring individual image render times
+on an image-heavy website, you may want to aggregate the render times for a page-view
+into a single histogram prior to sending to Druid in real-time. This can reduce the
+amount of data that&#x27;s needed to send from the client across the wire.</p><p>SpectatorHistogram supports ingesting pre-aggregated histograms in real-time and batch.
+They can be sent as a JSON map, keyed by the spectator bucket ID and the value is the
+count of values. This is the same format as the serialized JSON representation of the
+histogram. The keys need not be ordered or contiguous. For example:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token p [...]
+the raw data, or from combining pre-aggregated histograms. The result is represented in
+JSON format where the keys are the bucket index and the values are the count of entries
+in that bucket.</p><p>The buckets are defined as per the Spectator <a href="https://github.com/Netflix/spectator/blob/main/spectator-api/src/main/java/com/netflix/spectator/api/histogram/PercentileBuckets.java" target="_blank" rel="noopener noreferrer">PercentileBuckets</a> specification.
+See <a href="#histogram-bucket-boundaries">Histogram bucket boundaries</a> for the full list of bucket boundaries.</p><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="to [...]
+underlying implementation. If you use the Atlas-Druid service, the different types
+signal the service on how to handle the resulting data from a query.</p><ul><li>spectatorHistogramTimer signals that the histogram is representing
+a collection of timer values. It is recommended to normalize timer values to nanoseconds
+at, or prior to, ingestion. If queried via the Atlas-Druid service, it will
+normalize timers to second resolution at query time as a more natural unit of time
+for human consumption.</li><li>spectatorHistogram and spectatorHistogramDistribution are generic histograms that
+can be used to represent any measured value without units. No normalization is
+required or performed.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="spectatorhistogram-aggregator"><code>spectatorHistogram</code> aggregator<a href="#spectatorhistogram-aggregator" class="hash-link" aria-label="Direct link to spectatorhistogram-aggregator" title="Direct link to spectatorhistogram-aggregator">​</a></h3><p>Alias: <code>spectatorHistogramDistribution</code>, <code>spectatorHistogramTimer</code></p><p>To aggregate at query time:</p><div class="codeBlockContai [...]
+than to request individual percentiles in separate queries. This array-based
+helper is provided for convenience and has a marginal performance benefit over
+using the singular percentile post-aggregator multiple times within a query.
+The more expensive part of the query is the aggregation of the histogram.
+The post-aggregation calculations all happen on the same aggregated histogram.</p></blockquote><p>The results contain arrays matching the length and order of the requested
+array of percentiles.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&quot;percentilesAdded&quot;: [</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    0 [...]
+The first bucket index is 0 and the last bucket index is 275.
+The bucket widths increase as the bucket index increases. This leads to a greater absolute error for larger values, but maintains a relative error of rough percentage across the number range.
+For example, the maximum error at value 10 is zero since the bucket width is 1 (the difference of <code>11-10</code>). For a value of 16,000,000,000, the bucket width is 1,431,655,768 (from <code>17179869184-15748213416</code>). This gives an error of up to ~8.9%, from <code>1,431,655,768/16,000,000,000*100</code>. In practice, the observed error of computed percentiles is in the range of (0.1%, 3%).</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-co [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/sqlserver.html/index.html b/docs/31.0.0/development/extensions-contrib/sqlserver.html/index.html
new file mode 100644
index 000000000..93d7c6d9a
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/sqlserver.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/sqlserver">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/sqlserver" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/sqlserver' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/sqlserver/index.html b/docs/31.0.0/development/extensions-contrib/sqlserver/index.html
new file mode 100644
index 000000000..24c15b161
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/sqlserver/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/sqlserver" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Microsoft SQLServer | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+with the location (host name and port) of the database.</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.metadata.storage.type=sqlserver</span><br></span><span class= [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/statsd.html/index.html b/docs/31.0.0/development/extensions-contrib/statsd.html/index.html
new file mode 100644
index 000000000..c0ca16d1a
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/statsd.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/statsd">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/statsd" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/statsd' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/statsd/index.html b/docs/31.0.0/development/extensions-contrib/statsd/index.html
new file mode 100644
index 000000000..2600e5ee0
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/statsd/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/statsd" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">StatsD Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/devel [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+(<a href="https://github.com/etsy/statsd" target="_blank" rel="noopener noreferrer">https://github.com/etsy/statsd</a>)
+(<a href="https://github.com/armon/statsite" target="_blank" rel="noopener noreferrer">https://github.com/armon/statsite</a>)</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>All the configuration parameters for the StatsD emitter are under <code>druid.emitter.statsd</code>.</p><table><thead><tr><th>property</th><th>descri [...]
+be provided as a JSON file.  Additionally, this mapping specifies which dimensions should be included for each metric.
+StatsD expects that metric values be integers.  Druid emits some metrics with values between the range 0 and 1. To accommodate these metrics they are converted
+into the range 0 to 100.  This conversion can be enabled by setting the optional &quot;convertRange&quot; field true in the JSON mapping file.
+If the user does not specify their own JSON file, a default mapping is used.  All
+metrics are expected to be mapped. Metrics which are not mapped will log an error.
+StatsD metric path is organized using the following schema:
+<code>&lt;druid metric name&gt; : { &quot;dimensions&quot; : &lt;dimension list&gt;, &quot;type&quot; : &lt;StatsD type&gt;, &quot;convertRange&quot; : true/false}</code>
+e.g.
+<code>query/time&quot; : { &quot;dimensions&quot; : [&quot;dataSource&quot;, &quot;type&quot;], &quot;type&quot; : &quot;timer&quot;}</code></p><p>For metrics which are emitted from multiple services with different dimensions, the metric name is prefixed with
+the service name.
+e.g.
+<code>&quot;druid/coordinator-segment/count&quot; : { &quot;dimensions&quot; : [&quot;dataSource&quot;], &quot;type&quot; : &quot;gauge&quot; },
+ &quot;druid/historical-segment/count&quot; : { &quot;dimensions&quot; : [&quot;dataSource&quot;, &quot;tier&quot;, &quot;priority&quot;], &quot;type&quot; : &quot;gauge&quot; }</code></p><p>For most use-cases, the default mapping is sufficient.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-content [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles.html/index.html b/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles.html/index.html
new file mode 100644
index 000000000..9f6fc6960
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles/index.html b/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles/index.html
new file mode 100644
index 000000000..0b4407475
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/tdigestsketch-quantiles/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/tdigestsketch-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">T-Digest Quantiles Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+T-Digest (<a href="https://github.com/tdunning/t-digest" target="_blank" rel="noopener noreferrer">https://github.com/tdunning/t-digest</a>) is a popular data structure for accurate on-line accumulation of
+rank-based statistics such as quantiles and trimmed means.
+The data structure is also designed for parallel programming use cases like distributed aggregations or map reduce jobs by making combining two intermediate t-digests easy and efficient.</p><p>The tDigestSketch aggregator is capable of generating sketches from raw numeric values as well as
+aggregating/combining pre-generated T-Digest sketches generated using the tDigestSketch aggregator itself.
+While one can generate sketches on the fly during the query time itself, it generally is more performant
+to generate sketches during ingestion time itself and then combining them during query time.
+The module also provides a postAggregator, quantilesFromTDigestSketch, that can be used to compute approximate
+quantiles from T-Digest sketches generated by the tDigestSketch aggregator.</p><p>To use this aggregator, make sure you <a href="/docs/31.0.0/configuration/extensions#loading-extensions">include</a> the extension in your config file:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlock [...]
+combining pre-generated T-Digest sketches.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span>< [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/thrift.html/index.html b/docs/31.0.0/development/extensions-contrib/thrift.html/index.html
new file mode 100644
index 000000000..2f1463c8b
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/thrift.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/thrift">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/thrift" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/thrift' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/thrift/index.html b/docs/31.0.0/development/extensions-contrib/thrift/index.html
new file mode 100644
index 000000000..a6720c56b
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/thrift/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/thrift" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Thrift | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/development/e [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/time-min-max.html/index.html b/docs/31.0.0/development/extensions-contrib/time-min-max.html/index.html
new file mode 100644
index 000000000..713c5a0e7
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/time-min-max.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-contrib/time-min-max">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-contrib/time-min-max" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-contrib/time-min-max' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-contrib/time-min-max/index.html b/docs/31.0.0/development/extensions-contrib/time-min-max/index.html
new file mode 100644
index 000000000..5bcd22400
--- /dev/null
+++ b/docs/31.0.0/development/extensions-contrib/time-min-max/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/time-min-max" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Timestamp Min/Max aggregators | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+To use this feature, a &quot;timeMin&quot; or &quot;timeMax&quot; aggregator must be included at indexing time.
+They can apply to any columns that can be converted to timestamp, which include Long, DateTime, Timestamp, and String types.</p><p>For example, when a data set consists of timestamp, dimension, and metric value like followings.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_ [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/approximate-histograms.html/index.html b/docs/31.0.0/development/extensions-core/approximate-histograms.html/index.html
new file mode 100644
index 000000000..7078bd821
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/approximate-histograms.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/approximate-histograms">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/approximate-histograms" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/approximate-histograms' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/approximate-histograms/index.html b/docs/31.0.0/development/extensions-core/approximate-histograms/index.html
new file mode 100644
index 000000000..d559f53e5
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/approximate-histograms/index.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/approximate-histograms" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Approximate Histogram aggregators | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.or [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<a href="http://jmlr.org/papers/volume11/ben-haim10a/ben-haim10a.pdf" target="_blank" rel="noopener noreferrer">http://jmlr.org/papers/volume11/ben-haim10a/ben-haim10a.pdf</a>
+to compute approximate histograms, with the following modifications:</p><ul><li>some tradeoffs in accuracy were made in the interest of speed (see below)</li><li>the sketch maintains the exact original data as long as the number of
+distinct data points is fewer than the resolutions (number of centroids),
+increasing accuracy when there are few data points, or when dealing with
+discrete data points. You can find some of the details in <a href="https://metamarkets.com/2013/histograms/" target="_blank" rel="noopener noreferrer">this post</a>.</li></ul><p>Here are a few things to note before using approximate histograms:</p><ul><li>As indicated in the original paper, there are no formal error bounds on the
+approximation. In practice, the approximation gets worse if the distribution
+is skewed.</li><li>The algorithm is order-dependent, so results can vary for the same query, due
+to variations in the order in which results are merged.</li><li>In general, the algorithm only works well if the data that comes is randomly
+distributed (i.e. if data points end up sorted in a column, approximation
+will be horrible)</li><li>We traded accuracy for aggregation speed, taking some shortcuts when adding
+histograms together, which can lead to pathological cases if your data is
+ordered in some way, or if your distribution has long tails. It should be
+cheaper to increase the resolution of the sketch to get the accuracy you need.</li></ul><p>That being said, those sketches can be useful to get a first order approximation
+when averages are not good enough. Assuming most rows in your segment store
+fewer data points than the resolution of histogram, you should be able to use
+them for monitoring purposes and detect meaningful variations with a few
+hundred centroids. To get good accuracy readings on 95th percentiles with
+millions of rows of data, you may want to use several thousand centroids,
+especially with long tails, since that&#x27;s where the approximation will be worse.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="creating-approximate-histogram-sketches-at-ingestion-time">Creating approximate histogram sketches at ingestion time<a href="#creating-approximate-histogram-sketches-at-ingestion-time" class="hash-link" aria-label="Direct link to Creating approximate histogram sketches at ingestion time" title="Direct link to Creating approximate histogram sketches at [...]
+indexing time. The ingestion aggregator can only apply to numeric values. If you use &quot;approxHistogram&quot;
+then any input rows missing the value will be considered to have a value of 0, while with &quot;approxHistogramFold&quot;
+such rows will be ignored.</p><p>To query for results, an &quot;approxHistogramFold&quot; aggregator must be included in the
+query.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color [...]
+into bucketed histogram representations, as well as to compute various
+distribution metrics such as quantiles, min, and max.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="equal-buckets-post-aggregator">Equal buckets post-aggregator<a href="#equal-buckets-post-aggregator" class="hash-link" aria-label="Direct link to Equal buckets post-aggregator" title="Direct link to Equal buckets post-aggregator">​</a></h3><p>Computes a visual representation of the approximate histogram with a given number of equal-sized bins.
+Bucket intervals are based on the range of the underlying data. This aggregator is not supported for the fixed buckets histogram.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/avro.html/index.html b/docs/31.0.0/development/extensions-core/avro.html/index.html
new file mode 100644
index 000000000..3f30dcd52
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/avro.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/avro">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/avro" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/avro' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/avro/index.html b/docs/31.0.0/development/extensions-core/avro/index.html
new file mode 100644
index 000000000..d2b13fba7
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/avro/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/avro" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Avro | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/developm [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/azure.html/index.html b/docs/31.0.0/development/extensions-core/azure.html/index.html
new file mode 100644
index 000000000..e885d11c0
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/azure.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/azure">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/azure" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/azure' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/azure/index.html b/docs/31.0.0/development/extensions-core/azure/index.html
new file mode 100644
index 000000000..0a19c4dbb
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/azure/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/azure" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Microsoft Azure | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/deve [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/bloom-filter.html/index.html b/docs/31.0.0/development/extensions-core/bloom-filter.html/index.html
new file mode 100644
index 000000000..b88ec3c53
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/bloom-filter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/bloom-filter">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/bloom-filter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/bloom-filter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/bloom-filter/index.html b/docs/31.0.0/development/extensions-core/bloom-filter/index.html
new file mode 100644
index 000000000..6b8f88468
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/bloom-filter/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/bloom-filter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Bloom Filter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/develop [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+against a bloom filter. A Bloom filter is a probabilistic data structure for performing a set membership check. A bloom
+filter is a good candidate to use with Druid for cases where an explicit filter is impossible, e.g. filtering a query
+against a set of millions of values.</p><p>Following are some characteristics of Bloom filters:</p><ul><li>Bloom filters are highly space efficient when compared to using a HashSet.</li><li>Because of the probabilistic nature of bloom filters, false positive results are possible (element was not actually
+inserted into a bloom filter during construction, but <code>test()</code> says true)</li><li>False negatives are not possible (if element is present then <code>test()</code> will never say false).</li><li>The false positive probability of this implementation is currently fixed at 5%, but increasing the number of entries
+that the filter can hold can decrease this false positive rate in exchange for overall size.</li><li>Bloom filters are sensitive to number of elements that will be inserted in the bloom filter. During the creation of bloom filter expected number of entries must be specified. If the number of insertions exceed
+the specified initial number of entries then false positive probability will increase accordingly.</li></ul><p>This extension is currently based on <code>org.apache.hive.common.util.BloomKFilter</code> from <code>hive-storage-api</code>. Internally,
+this implementation uses Murmur3 as the hash algorithm.</p><p>To construct a BloomKFilter externally with Java to use as a filter in a Druid query:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class=" [...]
+with the SQL operator.</p><div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">bloom_filter_test</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="toke [...]
+important to set a reasonable value for the <code>maxNumEntries</code> parameter, which is the maximum number of distinct entries
+that the bloom filter can represent without increasing the false positive rate. It may be worth performing a query using
+one of the unique count sketches to calculate the value for this parameter in order to build a bloom filter appropriate
+for the query.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="json-specification-of-bloom-filter-aggregator">JSON Specification of Bloom Filter Aggregator<a href="#json-specification-of-bloom-filter-aggregator" class="hash-link" aria-label="Direct link to JSON Specification of Bloom Filter Aggregator" title="Direct link to JSON Specification of Bloom Filter Aggregator">​</a></h3><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--pris [...]
+linear scan <em>of the filter itself</em> to count the number of set bits as a means of approximating how many items have been
+added to the set. As such, ordering by an alternate aggregation is recommended if possible.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="sql-bloom-filter-aggregator">SQL Bloom Filter Aggregator<a href="#sql-bloom-filter-aggregator" class="hash-link" aria-label="Direct link to SQL Bloom Filter Aggregator" title="Direct link to SQL Bloom Filter Aggregator">​</a></h3><p>Bloom filters can be computed in SQL expressions with the <code>bloom_filter</code> aggregator:</p><div class="la [...]
+response are serialized into a base64 string, which can then be used in subsequent queries as a filter.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#filtering-queries-with-a-bloom-filter" class="table-of-contents__link toc-highlight">Filtering queries with a Bl [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/caffeine-cache.html/index.html b/docs/31.0.0/development/extensions-core/caffeine-cache.html/index.html
new file mode 100644
index 000000000..f3e52e4d5
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/caffeine-cache.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/configuration/">
+    <link rel="canonical" href="/docs/31.0.0/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-extension.html/index.html b/docs/31.0.0/development/extensions-core/datasketches-extension.html/index.html
new file mode 100644
index 000000000..5bcf35c5d
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-extension.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/datasketches-extension">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/datasketches-extension" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/datasketches-extension' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-extension/index.html b/docs/31.0.0/development/extensions-core/datasketches-extension/index.html
new file mode 100644
index 000000000..2ac36b366
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-extension/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-extension" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-hll.html/index.html b/docs/31.0.0/development/extensions-core/datasketches-hll.html/index.html
new file mode 100644
index 000000000..a0c151629
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-hll.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/datasketches-hll">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/datasketches-hll" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/datasketches-hll' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-hll/index.html b/docs/31.0.0/development/extensions-core/datasketches-hll/index.html
new file mode 100644
index 000000000..90376ae4f
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-hll/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-hll" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches HLL Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+the estimate of the number of distinct values presented to the sketch. You can also use post aggregators to produce a union of sketch columns in the same row.
+You can use the HLL sketch aggregator on any column to estimate its cardinality.</p><p>To use this aggregator, make sure you <a href="/docs/31.0.0/configuration/extensions#loading-extensions">include</a> the extension in your config file:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="code [...]
+When applied at query time on an existing dimension, you can use the resulting column as an intermediate dimension by the <a href="#post-aggregators">post-aggregators</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1  [...]
+The result will be an array containing three double values: estimate, lower bound and upper bound.
+The bounds are provided at a given number of standard deviations (optional, defaults to 1).
+This must be an integer value of 1, 2 or 3 corresponding to approximately 68.3%, 95.4% and 99.7% confidence intervals.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">{</span><br></span><span class [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-kll.html/index.html b/docs/31.0.0/development/extensions-core/datasketches-kll.html/index.html
new file mode 100644
index 000000000..2488a608e
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-kll.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/datasketches-kll">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/datasketches-kll" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/datasketches-kll' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-kll/index.html b/docs/31.0.0/development/extensions-core/datasketches-kll/index.html
new file mode 100644
index 000000000..688439c80
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-kll/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-kll" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches KLL Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-quantiles.html/index.html b/docs/31.0.0/development/extensions-core/datasketches-quantiles.html/index.html
new file mode 100644
index 000000000..086a16763
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/datasketches-quantiles">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/datasketches-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/datasketches-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-quantiles/index.html b/docs/31.0.0/development/extensions-core/datasketches-quantiles/index.html
new file mode 100644
index 000000000..e25a8bbdd
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-quantiles/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches Quantiles Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-theta.html/index.html b/docs/31.0.0/development/extensions-core/datasketches-theta.html/index.html
new file mode 100644
index 000000000..def6413e3
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-theta.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/datasketches-theta">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/datasketches-theta" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/datasketches-theta' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-theta/index.html b/docs/31.0.0/development/extensions-core/datasketches-theta/index.html
new file mode 100644
index 000000000..b0e6d7052
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-theta/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-theta" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches Theta Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Sketch algorithms are approximate. For more information, see <a href="https://datasketches.apache.org/docs/Theta/ThetaAccuracy.html" target="_blank" rel="noopener noreferrer">Accuracy</a> in the DataSketches documentation.</p><p>At ingestion time, the Theta sketch aggregator creates Theta sketch objects which are stored in Druid segments. Logically speaking, a Theta sketch object can be thought of as a Set data structure. At query time, sketches are read and aggregated (set unioned) toge [...]
+How many unique users visited both product A and product B?</p><p>to answer above questions, you would index your data using following aggregator.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="t [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-tuple.html/index.html b/docs/31.0.0/development/extensions-core/datasketches-tuple.html/index.html
new file mode 100644
index 000000000..4d2149dd6
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-tuple.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/datasketches-tuple">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/datasketches-tuple" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/datasketches-tuple' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/datasketches-tuple/index.html b/docs/31.0.0/development/extensions-core/datasketches-tuple/index.html
new file mode 100644
index 000000000..b22a2d1cd
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/datasketches-tuple/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-tuple" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches Tuple Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-aws-rds.html/index.html b/docs/31.0.0/development/extensions-core/druid-aws-rds.html/index.html
new file mode 100644
index 000000000..f42faf61c
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-aws-rds.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/druid-aws-rds">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/druid-aws-rds" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/druid-aws-rds' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-aws-rds/index.html b/docs/31.0.0/development/extensions-core/druid-aws-rds/index.html
new file mode 100644
index 000000000..605d450b8
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-aws-rds/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-aws-rds" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid AWS RDS Module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+See <a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.html" target="_blank" rel="noopener noreferrer">AWS Guide</a>.</p><p>To use this extension, make sure you <a href="/docs/31.0.0/configuration/extensions#loading-extensions">include</a> it in your config file along with other extensions e.g.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex" [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-basic-security.html/index.html b/docs/31.0.0/development/extensions-core/druid-basic-security.html/index.html
new file mode 100644
index 000000000..f91c7dfed
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-basic-security.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/druid-basic-security">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/druid-basic-security" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/druid-basic-security' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-basic-security/index.html b/docs/31.0.0/development/extensions-core/druid-basic-security/index.html
new file mode 100644
index 000000000..23b916d5c
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-basic-security/index.html
@@ -0,0 +1,156 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-basic-security" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Basic Security | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/devel [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+See <a href="/docs/31.0.0/operations/security-overview#enable-an-authenticator">Security overview</a> for an example configuration for HTTP basic authentication.</p><p>Visit <a href="/docs/31.0.0/operations/auth">Authentication and Authorization</a> for more information on the implemented extension interfaces and for an example configuration.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct lin [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 60000</p><p><strong><code>druid.auth.basic.common.maxRandomDelay</code></strong></p><p>Defines in milliseconds the amount of random delay to add to the pollingPeriod, to spread polling requests across time.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 6000</p><p><strong><code>druid.auth.basic.common.maxSyncRetries</code></strong></p><p>Determines how many times a service will retry if the authentication/authorization Druid metadata store state sync with the Coordinator fails.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 10</p><p><strong><code>druid.auth.basic.common.cacheDirectory</code></strong></p><p>If defined, snapshots of the basic Authenticator and Authorizer Druid metadata store caches will be stored on disk in this directory. If this property is defined, when a service is starting, it will attempt to initialize its caches from these on-disk snapshots, if the service is unable to initialize  [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="authenticator">Authenticator<a href="#authenticator" class="hash-link" aria-label="Direct link to Authenticator" title="Direct link to Authenticator">​</a></h3><p>To use the Basic authenticator, add an authenticator with type <code>basic</code> to the authenticatorChain.
+The default credentials validator (<code>credentialsValidator</code>) is <code>metadata</code>. To use the LDAP validator, define a credentials validator with a type of &#x27;ldap&#x27;.</p><p>Use the following syntax to configure a named authenticator:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><c [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.initialInternalClientPassword</code></strong></p><p>Initial <a href="/docs/31.0.0/operations/password-provider">Password Provider</a> for the default internal system user, used for internal process communication. If no password is specified, the default internal system user will not be created. If the def [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.enableCacheNotifications</code></strong></p><p>If true, the Coordinator will notify Druid processes whenever a configuration change to this Authenticator occurs, allowing them to immediately update their state without waiting for polling.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: True</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.credentialIterations</code></strong></p><p>Number of iterations to use for password hashing. See <a href="#credential-iterations-and-api-performance">Credential iterations and API performance</a><br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 10000</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.credentialsValidator.type</code></strong></p><p>The type of credentials store (metadata) to validate requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.skipOnFailure</code></strong></p><p>If true and the request credential doesn&#x27;t exists or isn&#x27;t fully configured in the credentials store, the request will proceed to next Authenticator in the chain.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: false</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.authorizerName</code></strong></p><p>Authorizer that requests should be directed to.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="credential-iterations-and-api-performance">Credential iterations and API performance<a href="#credential-iterations-and-api-performance" class="hash-link" aria-label="Direct link to Credential iterations and API performance" title="Direct link to Credential iterations and API performance">​</a></h5><p>As noted above, the valu [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.initialInternalClientPassword</code></strong></p><p>Initial <a href="/docs/31.0.0/operations/password-provider">Password Provider</a> for the default internal system user, used for internal process communication. If no password is specified, the default internal system user will not be created. If the default [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.enableCacheNotifications</code></strong></p><p>If true, the Coordinator will notify Druid processes whenever a configuration change to this Authenticator occurs, allowing them to immediately update their state without waiting for polling.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: true</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialIterations</code></strong></p><p>Number of iterations to use for password hashing.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 10000</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.type</code></strong></p><p>The type of credentials store (ldap) to validate requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.url</code></strong></p><p>URL of the LDAP server.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.bindUser</code></strong></p><p>LDAP bind user username.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.bindPassword</code></strong></p><p><a href="/docs/31.0.0/operations/password-provider">Password Provider</a> LDAP bind user password.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.baseDn</code></strong></p><p>The point from where the LDAP server will search for users.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.userSearch</code></strong></p><p>The filter/expression to use for the search. For example, (&amp;(sAMAccountName=%s)(objectClass=user))<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.userAttribute</code></strong></p><p>The attribute id identifying the attribute that will be returned as part of the search. For example, sAMAccountName.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialVerifyDuration</code></strong></p><p>The duration in seconds for how long valid credentials are verifiable within the cache when not requested.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 600</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialMaxDuration</code></strong></p><p>The max duration in seconds for valid credentials that can reside in cache regardless of how often they are requested.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 3600</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialCacheSize</code></strong></p><p>The valid credentials cache size. The cache uses a LRU policy.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 100</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.skipOnFailure</code></strong></p><p>If true and the request credential doesn&#x27;t exists or isn&#x27;t fully configured in the credentials store, the request will proceed to next Authenticator in the chain.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: false</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.authorizerName</code></strong></p><p>Authorizer that requests should be directed to.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="escalator">Escalator<a href="#escalator" class="hash-link" aria-label="Direct link to Escalator" title="Direct link to Escalator">​</a></h3><p>The Escalator determines the authentication scheme to use for internal Druid cluster communications, for example, when a Broker service communicates with a Historical service during qu [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.escalator.internalClientPassword</code></strong></p><p>The escalator will use this <a href="/docs/31.0.0/operations/password-provider">Password Provider</a> for requests made as the internal system user.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.escalator.authorizerName</code></strong></p><p>Authorizer that requests should be directed to.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="authorizer">Authorizer<a href="#authorizer" class="hash-link" aria-label="Direct link to Authorizer" title="Direct link to Authorizer">​</a></h3><p>To use the Basic authorizer, add an authorizer with type <code>basic</code> to the authorizers list.</p><p>Use the following syntax to configure a named authorizer:</p><div class= [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: true</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.initialAdminUser</code></strong></p><p>The initial admin user with role defined in initialAdminRole property if specified, otherwise the default admin role will be assigned.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.initialAdminRole</code></strong></p><p>The initial admin role to create if it doesn&#x27;t already exists.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.roleProvider.type</code></strong></p><p>The type of role provider to authorize requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="properties-for-ldap-user-authorization">Properties for LDAP user authorization<a href="#properties-for-ldap-user-authorization" class="hash-link" aria-label="Direct link to Properties for LDAP user authorization" title="Direct link to Properties for LDAP user authorization">​</a></h4><p><strong><code>druid.auth.authorize [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: true</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminUser</code></strong></p><p>The initial admin user with role defined in initialAdminRole property if specified, otherwise the default admin role will be assigned.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminRole</code></strong></p><p>The initial admin role to create if it doesn&#x27;t already exists.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminGroupMapping</code></strong></p><p>The initial admin group mapping with role defined in initialAdminRole property if specified, otherwise the default admin role will be assigned. The name of this initial admin group mapping will be set to adminGroupMapping<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.roleProvider.type</code></strong></p><p>The type of role provider (ldap) to authorize requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.roleProvider.groupFilters</code></strong></p><p>Array of LDAP group filters used to filter out the allowed set of groups returned from LDAP search. Filters can be begin with <em>, or end with ,</em> to provide configurational flexibility to limit or filter allowed set of groups available to LDAP Authorizer.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="properties-for-ldaps">Properties for LDAPS<a href="#properties-for-ldaps" class="hash-link" aria-label="Direct link to Properties for LDAPS" title="Direct link to Properties for LDAPS">​</a></h4><p>Use the following properties to configure Druid authentication with LDAP over TLS (LDAPS). See <a href="/docs/31.0.0/operations/ [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: tls</p><p><strong><code>druid.auth.basic.ssl.trustStorePath</code></strong></p><p>Path to the trust store file.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.auth.basic.ssl.trustStorePassword</code></strong></p><p>Password to access the trust store file.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.auth.basic.ssl.trustStoreType</code></strong></p><p>Format of the trust store file. For Java the format is jks.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: jks</p><p><strong><code>druid.auth.basic.ssl.trustStoreAlgorithm</code></strong></p><p>Algorithm used by the trust manager to validate certificate chains.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.auth.basic.ssl.trustStorePassword</code></strong></p><p>Password details that enable access to the truststore.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p>Example LDAPS configuration:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="to [...]
+Return a list of all user names.</p><p><code>GET(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName})</code><br>
+Return the name and credentials information of the user with name {userName}</p><p><code>POST(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName})</code><br>
+Create a new user with name {userName}</p><p><code>DELETE(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName})</code><br>
+Delete the user with name {userName}</p><p><code>POST(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName}/credentials)</code><br>
+Assign a password used for HTTP basic authentication for {userName}
+Content: JSON password request object</p><p>Example request body:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">{</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="toke [...]
+Return the current load status of the local caches of the authentication Druid metadata store.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="authorization-api">Authorization API<a href="#authorization-api" class="hash-link" aria-label="Direct link to Authorization API" title="Direct link to Authorization API">​</a></h4><p>Root path: <code>/druid-ext/basic-security/authorization</code><br></p><p>Each API endpoint includes {authorizerName}, specifying which Authorizer instance is b [...]
+Return a list of all user names.</p><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName})</code><br>
+Return the name and role information of the user with name {userName}</p><p>Example output:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</s [...]
+Create a new user with name {userName}</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName})</code><br>
+Delete the user with name {userName}</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="group-mapping-creationdeletion">Group mapping Creation/Deletion<a href="#group-mapping-creationdeletion" class="hash-link" aria-label="Direct link to Group mapping Creation/Deletion" title="Direct link to Group mapping Creation/Deletion">​</a></h5><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings)</code><br>
+Return a list of all group mappings.</p><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName})</code><br>
+Return the group mapping and role information of the group mapping with name {groupMappingName}</p><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName})</code><br>
+Create a new group mapping with name {groupMappingName}
+Content: JSON group mapping object
+Example request body:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">{</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    &quot;name&quot;: &quot;user&qu [...]
+Delete the group mapping with name {groupMappingName}</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="role-creationdeletion">Role Creation/Deletion<a href="#role-creationdeletion" class="hash-link" aria-label="Direct link to Role Creation/Deletion" title="Direct link to Role Creation/Deletion">​</a></h4><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/roles)</code><br>
+Return a list of all role names.</p><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName})</code><br>
+Return name and permissions for the role named {roleName}.</p><p>Example output:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span c [...]
+Create a new role with name {roleName}.
+Content: username string</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName})</code><br>
+Delete the role with name {roleName}.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="role-assignment">Role Assignment<a href="#role-assignment" class="hash-link" aria-label="Direct link to Role Assignment" title="Direct link to Role Assignment">​</a></h4><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}/roles/{roleName})</code><br>
+Assign role {roleName} to user {userName}.</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}/roles/{roleName})</code><br>
+Unassign role {roleName} from user {userName}</p><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}/roles/{roleName})</code><br>
+Assign role {roleName} to group mapping {groupMappingName}.</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}/roles/{roleName})</code><br>
+Unassign role {roleName} from group mapping {groupMappingName}</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="permissions">Permissions<a href="#permissions" class="hash-link" aria-label="Direct link to Permissions" title="Direct link to Permissions">​</a></h4><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName}/permissions)</code><br>
+Set the permissions of {roleName}. This replaces the previous set of permissions on the role.</p><p>Content: List of JSON Resource-Action objects, e.g.:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token pla [...]
+Return the current load status of the local caches of the authorization Druid metadata store.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a><ul><li><a href="#general-properties" class= [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-kerberos.html/index.html b/docs/31.0.0/development/extensions-core/druid-kerberos.html/index.html
new file mode 100644
index 000000000..b04e79b29
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-kerberos.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/druid-kerberos">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/druid-kerberos" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/druid-kerberos' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-kerberos/index.html b/docs/31.0.0/development/extensions-core/druid-kerberos/index.html
new file mode 100644
index 000000000..587565869
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-kerberos/index.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-kerberos" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Kerberos | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/development [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This extension adds an Authenticator which is used to protect HTTP Endpoints using the simple and protected GSSAPI negotiation mechanism <a href="https://en.wikipedia.org/wiki/SPNEGO" target="_blank" rel="noopener noreferrer">SPNEGO</a>.
+Make sure to <a href="/docs/31.0.0/configuration/extensions#loading-extensions">include</a> <code>druid-kerberos</code> in the extensions load list.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="creating-an-authenticator">Creating an Authenticator<a href="#creating-an-auth [...]
+The special string _HOST will be replaced automatically with the value of config <code>druid.host</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="druidauthauthenticatorkerberosexcludedpaths"><code>druid.auth.authenticator.kerberos.excludedPaths</code><a href="#druidauthauthenticatorkerberosexcludedpaths" class="hash-link" aria-label="Direct link to druidauthauthenticatorkerberosexcludedpaths" title="Direct link to druidauthauthenticatorkerberosexcludedpaths">​</a></h3><p>In  [...]
+The syntax for mapping rules is <code>RULE:\[n:string](regexp)s/pattern/replacement/g</code>. The integer n indicates how many components the target principal should have. If this matches, then a string will be formed from string, substituting the realm of the principal for $0 and the nth component of the principal for $n. e.g. if the principal was druid/admin then <code>\[2:$2$1suffix]</code> would result in the string <code>admindruidsuffix</code>.
+If this string matches regexp, then the s//<!-- -->[<!-- -->g] substitution command will be run over the string. The optional g will cause the substitution to be global over the string, instead of replacing only the first match in the string.
+If required, multiple rules can be joined by newline character and specified as a String.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="increasing-http-header-size-for-large-spnego-negotiate-header">Increasing HTTP Header size for large SPNEGO negotiate header<a href="#increasing-http-header-size-for-large-spnego-negotiate-header" class="hash-link" aria-label="Direct link to Increasing HTTP Header size for large SPNEGO negotiate header" title="Direct link to Increasing HTTP Heade [...]
+which includes all security groups for the user. In some cases when the user belongs to many security groups the header to grow beyond what druid can handle by default.
+In such cases, max request header size that druid can handle can be increased by setting <code>druid.server.http.maxRequestHeaderSize</code> (default 8KiB) and <code>druid.router.http.maxRequestBufferSize</code> (default 8KiB).</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuring-kerberos-escalated-client">Configuring Kerberos Escalated Client<a href="#configuring-kerberos-escalated-client" class="hash-link" aria-label="Direct link to Configuring Kerberos Escalated Client" t [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-lookups.html/index.html b/docs/31.0.0/development/extensions-core/druid-lookups.html/index.html
new file mode 100644
index 000000000..0897387f2
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-lookups.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/druid-lookups">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/druid-lookups" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/druid-lookups' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-lookups/index.html b/docs/31.0.0/development/extensions-core/druid-lookups/index.html
new file mode 100644
index 000000000..4f1796e72
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-lookups/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-lookups" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Cached Lookup Module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The main goal of this cache is to speed up the access to a high latency lookup sources and to provide a caching isolation for every lookup source.
+Thus user can define various caching strategies or and implementation per lookup, even if the source is the same.
+This module can be used side to side with other lookup module like the global cached lookup module.</p><p>To use this Apache Druid extension, <a href="/docs/31.0.0/configuration/extensions#loading-extensions">include</a> <code>druid-lookups-cached-single</code> in the extensions load list.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule=" [...]
+For Postgres, the connector JAR is already included.
+See the MySQL extension documentation for instructions to obtain <a href="/docs/31.0.0/development/extensions-core/mysql#installing-the-mysql-connector-library">MySQL</a> or <a href="/docs/31.0.0/development/extensions-core/mysql#alternative-installing-the-mariadb-connector-library">MariaDB</a> connector libraries.
+Copy or symlink the downloaded file to <code>extensions/druid-lookups-cached-single</code> under the distribution root directory.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="architecture">Architecture<a href="#architecture" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture">​</a></h2><p>Generally speaking this module can be divided into two main component, namely, the data fetcher layer and caching layer.</p><h3 class="anc [...]
+For instance <code>JdbcDataFetcher</code> provides an implementation of <code>DataFetcher</code> that can be used to fetch key/value from a RDBMS via JDBC driver.
+If you need new type of data fetcher, all you need to do, is to implement the interface <code>DataFetcher</code> and load it via another druid module.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="caching-layer">Caching layer<a href="#caching-layer" class="hash-link" aria-label="Direct link to Caching layer" title="Direct link to Caching layer">​</a></h3><p>This extension comes with two different caching strategies. First strategy is a poll based and the second is a load based.</ [...]
+Hence, user should make sure that the cache can fit all the data.
+The current implementation provides 2 type of poll cache, the first is on-heap (uses immutable map), while the second uses MapDB based off-heap map.
+User can also implement a different lookup polling cache by implementing <code>PollingCacheFactory</code> and <code>PollingCache</code> interfaces.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="loading-lookup">Loading lookup<a href="#loading-lookup" class="hash-link" aria-label="Direct link to Loading lookup" title="Direct link to Loading lookup">​</a></h4><p>Loading cache strategy will load the key/value pair upon request on the key it self, the general algorithm is load key if absent.
+Once the key/value  pair is loaded eviction will occur according to the cache eviction policy.
+This module comes with two loading lookup implementation, the first is on-heap backed by a Guava cache implementation, the second is MapDB off-heap implementation.
+Both implementations offer various eviction strategies.
+Same for Loading cache, developer can implement a new type of loading cache by implementing <code>LookupLoadingCache</code> interface.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-and-operation">Configuration and Operation:<a href="#configuration-and-operation" class="hash-link" aria-label="Direct link to Configuration and Operation:" title="Direct link to Configuration and Operation:">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="polling-lookup">Pol [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-pac4j.html/index.html b/docs/31.0.0/development/extensions-core/druid-pac4j.html/index.html
new file mode 100644
index 000000000..381f90f34
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-pac4j.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/druid-pac4j">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/druid-pac4j" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/druid-pac4j' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-pac4j/index.html b/docs/31.0.0/development/extensions-core/druid-pac4j/index.html
new file mode 100644
index 000000000..ab1a5fa97
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-pac4j/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-pac4j" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid pac4j based Security extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This can be used  with any authentication server that supports same e.g. <a href="https://developer.okta.com/" target="_blank" rel="noopener noreferrer">Okta</a>.
+The pac4j authenticator should only be used at the router node to enable a group of users in existing authentication server to interact with Druid cluster, using the <a href="/docs/31.0.0/operations/web-console">web console</a>. </p><p>This extension also provides a JWT authenticator that validates <a href="https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken" target="_blank" rel="noopener noreferrer">ID Tokens</a> associated with a request. ID Tokens are attached to the req [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-ranger-security.html/index.html b/docs/31.0.0/development/extensions-core/druid-ranger-security.html/index.html
new file mode 100644
index 000000000..64f517a85
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-ranger-security.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/druid-ranger-security">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/druid-ranger-security" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/druid-ranger-security' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/druid-ranger-security/index.html b/docs/31.0.0/development/extensions-core/druid-ranger-security/index.html
new file mode 100644
index 000000000..588f425bb
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/druid-ranger-security/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-ranger-security" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Ranger Security | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/examples.html/index.html b/docs/31.0.0/development/extensions-core/examples.html/index.html
new file mode 100644
index 000000000..a2cc62830
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/examples.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/examples">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/examples" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/examples' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/blog/index.html b/docs/31.0.0/development/extensions-core/examples/index.html
similarity index 58%
copy from blog/index.html
copy to docs/31.0.0/development/extensions-core/examples/index.html
index 67ba54693..d7fc2b6b3 100644
--- a/blog/index.html
+++ b/docs/31.0.0/development/extensions-core/examples/index.html
@@ -1,9 +1,9 @@
 <!doctype html>
-<html lang="en" dir="ltr" class="mdx-wrapper mdx-page plugin-pages plugin-id-default" data-has-hydrated="false">
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/examples" data-has-hydrated="false">
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.3">
-<title data-rh="true">Redirecting... | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/blog"><meta data- [...]
+<title data-rh="true">Extension Examples | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0/d [...]
 <link rel="preconnect" href="https://www.googletagmanager.com">
 <script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
 <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
@@ -14,13 +14,13 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.85c8c984.js" as="script">
-<link rel="preload" href="/assets/js/main.d3731f75.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.85c8c984.js"></script>
-<script src="/assets/js/main.d3731f75.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.7d8e1a79.js"></script>
+<script src="/assets/js/main.f9c13e33.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/google.html/index.html b/docs/31.0.0/development/extensions-core/google.html/index.html
new file mode 100644
index 000000000..0619d3cbb
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/google.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.0/development/extensions-core/google">
+    <link rel="canonical" href="/docs/31.0.0/development/extensions-core/google" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.0/development/extensions-core/google' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.0/development/extensions-core/google/index.html b/docs/31.0.0/development/extensions-core/google/index.html
new file mode 100644
index 000000000..aaff32162
--- /dev/null
+++ b/docs/31.0.0/development/extensions-core/google/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/google" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Google Cloud Storage | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.7d8e1a79.js" as="script">
+<link rel="preload" href="/assets/js/main.f9c13e33.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
... 12137 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org