update for latest releases
diff --git a/_jettyVersions.php b/_jettyVersions.php
index d72ac83..0beb6ca 100644
--- a/_jettyVersions.php
+++ b/_jettyVersions.php
@@ -27,24 +27,24 @@
     'tgz.sha1' => '1f61ece21ad87c9835be9d9440725698b6928baa',
   ),
  'jetty_9.4' => array (
-    'version' => '9.4.44.v20210927',
-    'zip.md5' => '5406e501325ddedc41b90b9fbb3f6016',
-    'zip.sha1' => '50840fbd559e447445041106bdc7e1c4202b5939',
-    'tgz.md5' => '17b28653aa4cda125b6b90d0376d1a2e',
-    'tgz.sha1' => 'fbbe459c6c686ae1e4b4db00bc93a854ecd243ec',
+    'version' => '9.4.45.v20220203',
+    'zip.md5' => 'fe1d312fedad5569d452e3974d751e86',
+    'zip.sha1' => '92d85c6c2e6f369e06d0500d5f4eff8483605fb4',
+    'tgz.md5' => '5a9821a24eafce629fd47bd575f89c3e',
+    'tgz.sha1' => '97fb0b0456d21ba18df4b89707157e02ebbc1a60',
   ),
  'jetty_10.0' => array (
-    'version' => '10.0.7',
-    'zip.md5' => '1372d07b3497c7b3e3a8b142087a2562',
-    'zip.sha1' => 'b8a11176f73ea85449654cd94c8c33d887822935',
-    'tgz.md5' => 'c523f8893a36eb7d92801e8812b44917',
-    'tgz.sha1' => 'ac25294fd61e10e8f17f89aaec9fc4a2bc8886df',
+    'version' => '10.0.8',
+    'zip.md5' => 'd41e498b5c1b58a74bbe0e066e27c46c',
+    'zip.sha1' => '20d9c2a985c42e688b942dc96f2584afe05511b1',
+    'tgz.md5' => '8677eb6b7361d64c17b04b2e3606cc83',
+    'tgz.sha1' => '170221c1ee45729b485f5bca2253d3c925eb65e1',
   ),
  'jetty_11.0' => array (
-    'version' => '11.0.7',
-    'zip.md5' => '938f23ff6f8c957db25863d1044102a9',
-    'zip.sha1' => '6176a7282c8e662eee4998d7b76b1bc28fe3ca26',
-    'tgz.md5' => 'b37a168e3e7240a013c922c8adc85767',
-    'tgz.sha1' => 'af3675855ba6aa20c5f3a8d1a9635df77b02d9d7',
+    'version' => '11.0.8',
+    'zip.md5' => '74ca3095f4238c7b7f36754ea1fc4247',
+    'zip.sha1' => '60c63d9d7e149c6f6e392dcdfe1ff2613e18926a',
+    'tgz.md5' => '5081a1ad699db3aa91ded34e10dccac3',
+    'tgz.sha1' => '8d92dd68c5079a43b138d442e7e30dbdd8c1368e',
   )
 );
diff --git a/_jettyVersions.txt b/_jettyVersions.txt
index d6e8d0e..538a1c8 100644
--- a/_jettyVersions.txt
+++ b/_jettyVersions.txt
@@ -1,5 +1,5 @@
-11.0.7
-10.0.7
-9.4.44.v20210927
+11.0.8
+10.0.8
+9.4.45.v20220203
 9.3.29.v20201019
 9.2.30.v20200428
diff --git a/documentation/contribution-guide/asciidoctor.css b/documentation/contribution-guide/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/contribution-guide/asciidoctor.css
+++ b/documentation/contribution-guide/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/contribution-guide/coderay-asciidoctor.css b/documentation/contribution-guide/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/contribution-guide/coderay-asciidoctor.css
+++ b/documentation/contribution-guide/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/contribution-guide/index.html b/documentation/contribution-guide/index.html
index 9e020b0..ab5c71c 100644
--- a/documentation/contribution-guide/index.html
+++ b/documentation/contribution-guide/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Contribution Guide</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -17,8 +18,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 10.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 10.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Contribution Guide</div>
@@ -937,7 +938,7 @@
 <div class="content">
 <pre>//
 // ========================================================================
-// Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+// Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //
 // This program and the accompanying materials are made available under the
 // terms of the Eclipse Public License v. 2.0 which is available at
@@ -1095,8 +1096,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 10.0.7<br>
-Last updated 2021-02-19 12:22:22 -0600
+Version 10.0.8<br>
+Last updated 2022-02-01 18:50:48 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-10/asciidoctor.css b/documentation/jetty-10/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-10/asciidoctor.css
+++ b/documentation/jetty-10/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-10/contribution-guide/asciidoctor.css b/documentation/jetty-10/contribution-guide/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-10/contribution-guide/asciidoctor.css
+++ b/documentation/jetty-10/contribution-guide/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-10/contribution-guide/coderay-asciidoctor.css b/documentation/jetty-10/contribution-guide/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-10/contribution-guide/coderay-asciidoctor.css
+++ b/documentation/jetty-10/contribution-guide/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-10/contribution-guide/index.html b/documentation/jetty-10/contribution-guide/index.html
index 9e020b0..ab5c71c 100644
--- a/documentation/jetty-10/contribution-guide/index.html
+++ b/documentation/jetty-10/contribution-guide/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Contribution Guide</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -17,8 +18,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 10.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 10.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Contribution Guide</div>
@@ -937,7 +938,7 @@
 <div class="content">
 <pre>//
 // ========================================================================
-// Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+// Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //
 // This program and the accompanying materials are made available under the
 // terms of the Eclipse Public License v. 2.0 which is available at
@@ -1095,8 +1096,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 10.0.7<br>
-Last updated 2021-02-19 12:22:22 -0600
+Version 10.0.8<br>
+Last updated 2022-02-01 18:50:48 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-10/index.html b/documentation/jetty-10/index.html
index ad5e954..07e0b41 100644
--- a/documentation/jetty-10/index.html
+++ b/documentation/jetty-10/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty Documentation</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -16,8 +17,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 10.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 10.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Table of Contents</div>
@@ -68,8 +69,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 10.0.7<br>
-Last updated 2021-02-19 12:22:22 -0600
+Version 10.0.8<br>
+Last updated 2022-02-01 18:50:48 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-10/old_docs/asciidoctor.css b/documentation/jetty-10/old_docs/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-10/old_docs/asciidoctor.css
+++ b/documentation/jetty-10/old_docs/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-10/old_docs/coderay-asciidoctor.css b/documentation/jetty-10/old_docs/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-10/old_docs/coderay-asciidoctor.css
+++ b/documentation/jetty-10/old_docs/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-10/old_docs/index.html b/documentation/jetty-10/old_docs/index.html
index 9fd3d28..d970715 100644
--- a/documentation/jetty-10/old_docs/index.html
+++ b/documentation/jetty-10/old_docs/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Old Documentation</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -17,8 +18,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 10.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 10.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Old Jetty Documentation</div>
@@ -885,15 +886,6 @@
 <li><a href="#deprecated-parameters">Deprecated Parameters</a></li>
 </ul>
 </li>
-<li><a href="#configuring-jetty-request-logs">Configuring Jetty Request Logs</a>
-<ul class="sectlevel3">
-<li><a href="#constructing-request-log-entry">Constructing a Request Log Entry</a></li>
-<li><a href="#implementing-request-log">Implementing a Request Log</a></li>
-<li><a href="#configuring-request-log">Configuring the Request Log module</a></li>
-<li><a href="#request-log-custom-writer">Introducing RequestLog.Writer</a></li>
-<li><a href="#configuring-separate-request-log-for-web-application">Configuring a Separate Request Log For a Web Application</a></li>
-</ul>
-</li>
 <li><a href="#configuring-logging-modules">Jetty Logging Integrations (SLF4J, Log4j, Logback, JCL, JUL)</a>
 <ul class="sectlevel3">
 <li><a href="#example-logging-slf4j">Logging with SLF4J</a></li>
@@ -1430,7 +1422,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in annotations/quick-annotations-setup.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ServerWithAnnotations.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in annotations/quick-annotations-setup.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ServerWithAnnotations.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -2830,7 +2822,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">[mybase] java -jar $JETTY_HOME/start.jar
 2017-08-31 10:19:58.855:INFO::main: Logging initialized @372ms to org.eclipse.jetty.util.log.StdErrLog
-2017-08-31 10:19:59.076:INFO:oejs.Server:main: jetty-10.0.7
+2017-08-31 10:19:59.076:INFO:oejs.Server:main: jetty-10.0.8
 2017-08-31 10:19:59.125:INFO:oejs.AbstractConnector:main: Started ServerConnector@421e98e0{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2017-08-31 10:19:59.150:INFO:oejus.SslContextFactory:main: x509=X509@5315b42e(jetty,h=[jetty.eclipse.org],w=[]) for SslContextFactory@2ef9b8bc(file:///var/my-jetty-base/etc/keystore,file:///var/my-jetty-base/etc/keystore)
 2017-08-31 10:19:59.151:INFO:oejus.SslContextFactory:main: x509=X509@5d624da6(mykey,h=[],w=[]) for SslContextFactory@2ef9b8bc(file:///var/my-jetty-base/etc/keystore,file:///var/my-jetty-base/etc/keystore)
@@ -2899,7 +2891,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">[my-base]$ java -jar /path/to/jetty-home/start.jar
 2017-08-31 10:31:32.955:INFO::main: Logging initialized @366ms to org.eclipse.jetty.util.log.StdErrLog
-2017-08-31 10:31:33.109:INFO:oejs.Server:main: jetty-10.0.7
+2017-08-31 10:31:33.109:INFO:oejs.Server:main: jetty-10.0.8
 2017-08-31 10:31:33.146:INFO:oejs.AbstractConnector:main: Started ServerConnector@2ef9b8bc{HTTP/1.1,[http/1.1]}{0.0.0.0:5231}
 ...
 2017-08-31 10:31:33.263:INFO:oejs.Server:main: Started @675ms</code></pre>
@@ -5006,7 +4998,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
     <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
     <span class="tag">&lt;artifactId&gt;</span>jetty-quickstart<span class="tag">&lt;/artifactId&gt;</span>
-    <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+    <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -5175,7 +5167,7 @@
 <div class="paragraph">
 <p>Jetty is decomposed into many jars and dependencies to achieve a minimal footprint by selecting the minimal set of jars.
 Typically it is best to use something like <a href="#jetty-maven-helloworld">Maven</a> to manage jars, however this tutorial uses an aggregate Jar that contains all of the required Jetty classes in one Jar.
-You can manually download the aggregate <a href="https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/10.0.7/jetty-all-10.0.7-uber.jar"><code>jetty-all.jar</code></a> using <code>curl</code> or a browser.</p>
+You can manually download the aggregate <a href="https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/10.0.8/jetty-all-10.0.8-uber.jar"><code>jetty-all.jar</code></a> using <code>curl</code> or a browser.</p>
 </div>
 <div class="quoteblock">
 <blockquote>
@@ -5218,7 +5210,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">&gt; mkdir Demo
 &gt; cd Demo
-&gt; curl -o jetty-all-uber.jar https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/10.0.7/jetty-all-10.0.7-uber.jar</code></pre>
+&gt; curl -o jetty-all-uber.jar https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/10.0.8/jetty-all-10.0.8-uber.jar</code></pre>
 </div>
 </div>
 </div>
@@ -5231,7 +5223,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/jetty-helloworld.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/jetty-helloworld.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5324,7 +5316,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SimplestServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SimplestServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5360,7 +5352,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5394,7 +5386,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5468,7 +5460,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5490,7 +5482,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5522,7 +5514,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5556,7 +5548,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5565,7 +5557,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5577,7 +5569,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5590,7 +5582,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5634,7 +5626,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5672,7 +5664,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-file-server.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-file-server.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5704,7 +5696,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-split-file-server.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-split-file-server.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5744,7 +5736,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-many-connectors.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-many-connectors.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5786,7 +5778,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5799,7 +5791,7 @@
 <h5 id="_the-realm-properties-file"><a class="anchor" href="#_the-realm-properties-file"></a><a class="link" href="#_the-realm-properties-file">The Realm Properties File</a></h5>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="properties">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../examples/embedded/src/test/resources/realm.properties[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="properties">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../examples/embedded/src/test/resources/realm.properties[]</code></pre>
 </div>
 </div>
 </div>
@@ -5829,7 +5821,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-minimal-servlet.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-minimal-servlet.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5870,7 +5862,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-one-webapp.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-one-webapp.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5904,7 +5896,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedded-examples.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebAppWithJsp.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedded-examples.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebAppWithJsp.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -7149,7 +7141,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in extras/resource-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in extras/resource-handler.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -7658,7 +7650,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../jetty-rewrite/src/main/config/etc/jetty-rewrite.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../jetty-rewrite/src/main/config/etc/jetty-rewrite.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -7669,7 +7661,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../demos/demo-jetty-webapp/src/main/config/modules/demo.d/demo-rewrite-rules.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../demos/demo-jetty-webapp/src/main/config/modules/demo.d/demo-rewrite-rules.xml[]</code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -8803,7 +8795,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
 </div>
 </div>
 </div>
@@ -8997,7 +8989,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -9867,7 +9859,7 @@
 <pre class="CodeRay highlight"><code data-lang="screen">[2093] java -jar start.jar
 
 2013-07-26 15:47:53.480:INFO:oejs.Server:main: jetty-9.0.4.v20130625
-2013-07-26 15:47:53.549:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/jetty-home-10.0.7/webapps/] at interval 1
+2013-07-26 15:47:53.549:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/jetty-home-10.0.8/webapps/] at interval 1
 Jul 26, 2013 3:47:53 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
 INFO: WSSERVLET12: JAX-WS context listener initializing
 Jul 26, 2013 3:47:56 PM com.sun.xml.ws.server.MonitorBase createRoot
@@ -10651,7 +10643,7 @@
 <pre class="CodeRay highlight"><code data-lang="screen">$ java -jar start.jar
 2017-09-20 15:45:11.986:INFO::main: Logging initialized @683ms to org.eclipse.jetty.util.log.StdErrLog
 2017-09-20 15:45:12.197:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended.  See documentation at https://www.eclipse.org/jetty/documentation/current/startup.html
-2017-09-20 15:45:12.243:INFO:oejs.Server:main: 10.0.7
+2017-09-20 15:45:12.243:INFO:oejs.Server:main: 10.0.8
 2017-09-20 15:45:12.266:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///installs/repository/jetty/webapps/] at interval 1
 2017-09-20 15:45:12.298:INFO:oejs.AbstractConnector:main: Started ServerConnector@39c0f4a{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2017-09-20 15:45:12.298:INFO:oejs.Server:main: Started @995ms</code></pre>
@@ -10698,14 +10690,14 @@
 [my-base]$ java -jar /path/to/jetty-home/start.jar
 2017-09-20 16:23:03.563:INFO::main: Logging initialized @429ms to org.eclipse.jetty.util.log.StdErrLog
 2017-09-20 16:23:03.802:WARN::main: demo test-realm is deployed. DO NOT USE IN PRODUCTION!
-2017-09-20 16:23:03.804:INFO:oejs.Server:main: 10.0.7
+2017-09-20 16:23:03.804:INFO:oejs.Server:main: 10.0.8
 2017-09-20 16:23:03.819:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///installs/repository/jetty/demo-base/webapps/] at interval 1
 2017-09-20 16:23:04.098:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=102ms
 2017-09-20 16:23:04.103:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!
 2017-09-20 16:23:04.267:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
 2017-09-20 16:23:04.267:INFO:oejs.session:main: No SessionScavenger set, using defaults
 2017-09-20 16:23:04.268:INFO:oejs.session:main: Scavenging every 660000ms
-2017-09-20 16:23:04.306:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@371a67ec{/async-rest,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/WEB-INF/lib/example-async-rest-jar-10.0.7.jar!/META-INF/resources],AVAILABLE}{/async-rest.war}
+2017-09-20 16:23:04.306:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@371a67ec{/async-rest,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/WEB-INF/lib/example-async-rest-jar-10.0.8.jar!/META-INF/resources],AVAILABLE}{/async-rest.war}
 2017-09-20 16:23:04.429:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=53ms
 2017-09-20 16:23:04.432:WARN::main: test webapp is deployed. DO NOT USE IN PRODUCTION!
 2017-09-20 16:23:04.511:INFO:oejsh.ManagedAttributeListener:main: update PushFilter null-&gt;org.eclipse.jetty.servlets.PushCacheFilter@2362f559 on o.e.j.w.WebAppContext@35e2d654{/test,file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test.war-_test-any-6279588879522983394.dir/webapp/,STARTING}{/test.war}
@@ -10722,7 +10714,7 @@
 2017-09-20 16:23:05.098:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@506ae4d4{/test-jaas,file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-jaas.war-_test-jaas-any-8067423971450448377.dir/webapp/,AVAILABLE}{/test-jaas.war}
 2017-09-20 16:23:05.182:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=37ms
 2017-09-20 16:23:05.184:WARN::main: test-spec webapp is deployed. DO NOT USE IN PRODUCTION!
-2017-09-20 16:23:05.243:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@45099dd3{/test-spec,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/WEB-INF/lib/test-web-fragment-10.0.7.jar!/META-INF/resources],AVAILABLE}{/test-spec.war}
+2017-09-20 16:23:05.243:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@45099dd3{/test-spec,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/WEB-INF/lib/test-web-fragment-10.0.8.jar!/META-INF/resources],AVAILABLE}{/test-spec.war}
 2017-09-20 16:23:05.247:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.MovedContextHandler@3e08ff24{/oldContextPath,null,AVAILABLE}
 2017-09-20 16:23:05.274:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=18ms
 2017-09-20 16:23:05.296:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@5ddeb7cb{/,file:///installs/repository/jetty/demo-base/webapps/ROOT/,AVAILABLE}{/ROOT}
@@ -10859,7 +10851,7 @@
 2015-06-04 11:10:16.460:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///tmp/mybase/webapps/] at interval 1
 2015-06-04 11:10:16.581:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!
 2015-06-04 11:10:16.589:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
-2015-06-04 11:10:16.628:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@1a407d53{/,[file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/, jar:file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/WEB-INF/lib/example-async-rest-jar-10.0.7.jar!/META-INF/resources],AVAILABLE}{/ROOT.war}
+2015-06-04 11:10:16.628:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@1a407d53{/,[file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/, jar:file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/WEB-INF/lib/example-async-rest-jar-10.0.8.jar!/META-INF/resources],AVAILABLE}{/ROOT.war}
 2015-06-04 11:10:16.645:INFO:oejs.ServerConnector:main: Started ServerConnector@3abbfa04{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2015-06-04 11:10:16.646:INFO:oejs.Server:main: Started @634ms</code></pre>
 </div>
@@ -11210,7 +11202,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -11429,7 +11421,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/test-realm.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/test-realm.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -13674,7 +13666,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="plain">Unresolved directive in jsp/configuring-jsp.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../jetty-home/src/main/resources/modules/jsp.mod[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="plain">Unresolved directive in jsp/configuring-jsp.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../jetty-home/src/main/resources/modules/jsp.mod[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -14445,7 +14437,7 @@
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">2016-10-21 15:31:01.248:INFO::main: Logging initialized @332ms to org.eclipse.jetty.util.log.StdErrLog
-2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-10.0.7
+2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-10.0.8
 2016-10-21 15:31:01.400:INFO:oejs.AbstractConnector:main: Started ServerConnector@2c330fbc{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2016-10-21 15:31:01.400:INFO:oejs.Server:main: Started @485ms</code></pre>
 </div>
@@ -14456,7 +14448,7 @@
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">2016-10-21 15:31:35.020:INFO::main: Logging initialized @340ms to org.eclipse.jetty.util.log.StdErrLog
-2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-10.0.7
+2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-10.0.8
 2016-10-21 15:31:35.174:INFO:org.eclipse.jetty.server.AbstractConnector:main: Started ServerConnector@edf4efb{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2016-10-21 15:31:35.175:INFO:org.eclipse.jetty.server.Server:main: Started @495ms</code></pre>
 </div>
@@ -14515,165 +14507,6 @@
 </div>
 </div>
 <div class="sect2">
-<h3 id="configuring-jetty-request-logs"><a class="anchor" href="#configuring-jetty-request-logs"></a><a class="link" href="#configuring-jetty-request-logs">Configuring Jetty Request Logs</a></h3>
-<div class="paragraph">
-<p>Request logs are a record of the requests that the server has processed.
-There is one entry per request received, and commonly in the standard NCSA format, so you can use tools like <a href="http://en.wikipedia.org/wiki/Webalizer">Webalizer</a> to analyze them conveniently.</p>
-</div>
-<div class="sect3">
-<h4 id="constructing-request-log-entry"><a class="anchor" href="#constructing-request-log-entry"></a><a class="link" href="#constructing-request-log-entry">Constructing a Request Log Entry</a></h4>
-<div class="paragraph">
-<p>A standard request log entry includes the client IP address, date, method, URL, result, size, referrer, user agent and latency.
-For example:</p>
-</div>
-<div class="literalblock">
-<div class="content">
-<pre>123.4.5.6 - - [20/Jul/2016:10:16:17 +0000]
-  "GET /jetty/tut/XmlConfiguration.html HTTP/1.1"
-  200 76793 "http://localhost:8080/jetty/tut/logging.html"
-  "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8" 342</pre>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="implementing-request-log"><a class="anchor" href="#implementing-request-log"></a><a class="link" href="#implementing-request-log">Implementing a Request Log</a></h4>
-<div class="paragraph">
-<p>Jetty provides an implementation called <code>NCSARequestLog</code> which supports the NCSA format in files that will roll over on a daily basis.</p>
-</div>
-<div class="paragraph">
-<p>The <a href="http://logback.qos.ch/">Logback Project</a> offers <a href="http://logback.qos.ch/access.html">another implementation</a> of a <code>RequestLog</code> interface, providing rich and powerful HTTP-access log functionality.</p>
-</div>
-<div class="paragraph">
-<p>If neither of these options meets your needs, you can implement a custom request logger by implementing Jetty&#8217;s <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/server/RequestLog.html"><code>RequestLog.java</code></a> interface and plugging it in similar to the <code>NCSARequestLog</code>, as shown below.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="configuring-request-log"><a class="anchor" href="#configuring-request-log"></a><a class="link" href="#configuring-request-log">Configuring the Request Log module</a></h4>
-<div class="paragraph">
-<p>To enable the Request Log module for the entire server via the Jetty distribution, it first needs to be enabled on the command line:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">[my-base]$ java -jar /path/to/jetty-home/start.jar --add-to-start=requestlog
-
-INFO: requestlog      initialised in ${jetty.base}/start.d/requestlog.ini
-MKDIR: ${jetty.base}/logs
-INFO: Base directory was modified</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>The above command will add a new <code>requestlog.ini</code> file to your <a href="#start-vs-startd"><code>{$jetty.base}/start.d</code> directory</a>.</p>
-</div>
-<div class="quoteblock">
-<blockquote>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-By default, request logs are not set to be appended, meaning a the log file is wiped clean upon sever restart.
-You can change this setting by editing the <code>requestlog.ini</code> and un-commenting the line that reads <code>jetty.requestlog.append=true</code>.
-</td>
-</tr>
-</table>
-</div>
-</blockquote>
-</div>
-<div class="paragraph">
-<p>The equivalent code for embedded usages of Jetty is:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">NCSARequestLog requestLog = <span class="keyword">new</span> NCSARequestLog(<span class="string"><span class="delimiter">&quot;</span><span class="content">/var/logs/jetty/jetty-yyyy_mm_dd.request.log</span><span class="delimiter">&quot;</span></span>);
-requestLog.setAppend(<span class="predefined-constant">true</span>);
-requestLog.setExtended(<span class="predefined-constant">false</span>);
-requestLog.setLogTimeZone(<span class="string"><span class="delimiter">&quot;</span><span class="content">GMT</span><span class="delimiter">&quot;</span></span>);
-requestLog.setLogLatency(<span class="predefined-constant">true</span>);
-requestLog.setRetainDays(<span class="string"><span class="delimiter">&quot;</span><span class="content">90</span><span class="delimiter">&quot;</span></span>);
-
-server.setRequestLog(requestLog);</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>This configures a request log in <code>{$jetty.home}/logs</code> with filenames including the date.
-Existing log files are appended to and the extended NCSA format is used in the GMT time zone.</p>
-</div>
-<div class="paragraph">
-<p>The above configuration enables Log Latency, which is the amount of time it took the server to handle the request.
-This value is measured in milliseconds and is appended to the the log file for each request.</p>
-</div>
-<div class="paragraph">
-<p>You can also customize the number of days you wish to keep request logs.
-By default, log files are kept for 90 days before being deleted.
-The value for <code>retainDays</code> (xml) or <code>setRetainDays</code> (Java) should be configured as <em>1 + n</em> days.
-For example, if you wanted to keep the logs for the current day and the day prior you would set the <code>retainDays</code> (or <code>setRetainDays</code>) value to 2.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="request-log-custom-writer"><a class="anchor" href="#request-log-custom-writer"></a><a class="link" href="#request-log-custom-writer">Introducing RequestLog.Writer</a></h4>
-<div class="paragraph">
-<p>The concept of a <code>RequestLog.Writer</code>, introduced in Jetty 9.4.15, manages the writing to a log the string generated by the <code>RequestLog</code>.
-This allows the <code>CustomRequestLog</code> to match the functionality of other <code>RequestLogger</code> implementations by plugging in any <code>RequestLog.Writer</code> and a custom format string.
-Jetty currently has implementations of <code>RequestLog.Writer</code>, <code>RequestLogWriter</code>, <code>AsyncRequestLogWriter</code>, and <code>Slf4jRequestLogWriter</code>.</p>
-</div>
-<div class="paragraph">
-<p>So, the way to create an asynchronous <code>RequestLog</code> using the extended NCSA format has been changed from:</p>
-</div>
-<div class="paragraph">
-<p><code>new AsyncNcsaRequestLog(filename)</code></p>
-</div>
-<div class="paragraph">
-<p>to:</p>
-</div>
-<div class="paragraph">
-<p><code>new CustomRequestLog(new AsyncRequestLogWriter(filename), CustomRequestLog.EXTENDED_NCSA_FORMAT)</code></p>
-</div>
-<div class="paragraph">
-<p>Additionally, there are now two settings for the log timezone to be configured.
-There is the configuration for logging the request time, which is set in the <code>timeZone</code> parameter in the <code>%t</code> format code of the string, given in the format <code>%{format|timeZone|locale}t</code>.</p>
-</div>
-<div class="paragraph">
-<p>The other <code>timeZone</code> parameter relates to the generation of the log file name (both at creation and roll over).
-This is configured in the <code>requestlog</code> module file, or can be used as a setter on <code>RequestLogWriter</code> via XML.</p>
-</div>
-<div class="paragraph">
-<p>Both timezones are set to GMT by default.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="configuring-separate-request-log-for-web-application"><a class="anchor" href="#configuring-separate-request-log-for-web-application"></a><a class="link" href="#configuring-separate-request-log-for-web-application">Configuring a Separate Request Log For a Web Application</a></h4>
-<div class="paragraph">
-<p>To configure a separate request log for specific a web application, add the following to the context XML file.</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;Configure</span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.webapp.WebAppContext</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-  ...
-  <span class="tag">&lt;Call</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">insertHandler</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-    <span class="tag">&lt;Arg&gt;</span>
-      <span class="tag">&lt;New</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">RequestLog</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.server.handler.RequestLogHandler</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-        <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">requestLog</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-          <span class="tag">&lt;New</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">RequestLogImpl</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.server.NCSARequestLog</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">filename</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span><span class="tag">&lt;Property</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">jetty.logs</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">default</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">./logs</span><span class="delimiter">&quot;</span></span><span class="tag">/&gt;</span>/test-yyyy_mm_dd.request.log<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">filenameDateFormat</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>yyyy_MM_dd<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">LogTimeZone</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>GMT<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">retainDays</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>90<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">append</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>true<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">LogLatency</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>true<span class="tag">&lt;/Set&gt;</span>
-          <span class="tag">&lt;/New&gt;</span>
-        <span class="tag">&lt;/Set&gt;</span>
-      <span class="tag">&lt;/New&gt;</span>
-    <span class="tag">&lt;/Arg&gt;</span>
-  <span class="tag">&lt;/Call&gt;</span>
-  ...
-<span class="tag">&lt;/Configure&gt;</span></code></pre>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
 <h3 id="configuring-logging-modules"><a class="anchor" href="#configuring-logging-modules"></a><a class="link" href="#configuring-logging-modules">Jetty Logging Integrations (SLF4J, Log4j, Logback, JCL, JUL)</a></h3>
 <div class="paragraph">
 <p>Jetty provides support for several logging frameworks including SLF4J, Java Commons Logging (JCL), Java Util Logging (JUL), Log4j (including version 2), and Logback.
@@ -15189,7 +15022,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">[my-base]$ java -jar /path/to/jetty-home/start.jar
 419  [main] INFO  org.eclipse.jetty.util.log - Logging initialized @508ms to org.eclipse.jetty.util.log.Slf4jLog
-540  [main] INFO  org.eclipse.jetty.server.Server - jetty-10.0.7
+540  [main] INFO  org.eclipse.jetty.server.Server - jetty-10.0.8
 575  [main] INFO  o.e.jetty.server.AbstractConnector - Started ServerConnector@3c0ecd4b{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 575  [main] INFO  org.eclipse.jetty.server.Server - Started @668ms</code></pre>
 </div>
@@ -15626,8 +15459,8 @@
 Downloading JDK...
 Copying openjdk-1.7.0_21.tar.gz from the buildpack cache ...
 Unpacking JDK to .jdk
-Downloading Jetty: jetty-home-10.0.7.tar.gz
-Downloading jetty-home-10.0.7.tar.gz from http://repo2.maven.org/maven2/org/eclipse/jetty/jetty-home/10.0.0.v202012xx/ ...
+Downloading Jetty: jetty-home-10.0.8.tar.gz
+Downloading jetty-home-10.0.8.tar.gz from http://repo2.maven.org/maven2/org/eclipse/jetty/jetty-home/10.0.0.v202012xx/ ...
 Unpacking Jetty to .jetty
 -&gt; Uploading staged droplet (36M)
 -&gt; Uploaded droplet
@@ -16886,7 +16719,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in security/authentication.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in security/authentication.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -16903,7 +16736,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in security/authentication.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../jetty-jaspi/src/main/config/etc/jaspi/jaspi-demo.xml[tags=documentation]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in security/authentication.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../jetty-jaspi/src/main/config/etc/jaspi/jaspi-demo.xml[tags=documentation]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -17111,7 +16944,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp lib/jetty-util-10.0.7.jar org.eclipse.jetty.util.security.Password
+<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp lib/jetty-util-10.0.8.jar org.eclipse.jetty.util.security.Password
 
 Usage - java org.eclipse.jetty.util.security.Password [&lt;user&gt;] &lt;password&gt;
 If the password is ?, the user will be prompted for the password</code></pre>
@@ -17122,7 +16955,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-10.0.7.jar org.eclipse.jetty.util.security.Password username password
+<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-10.0.8.jar org.eclipse.jetty.util.security.Password username password
 2017-12-13 11:19:27.928:INFO::main: Logging initialized @95ms to org.eclipse.jetty.util.log.StdErrLog
 password
 OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v
@@ -17163,7 +16996,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-10.0.7.jar org.eclipse.jetty.util.security.Password username username:realm:password
+<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-10.0.8.jar org.eclipse.jetty.util.security.Password username username:realm:password
 2017-12-13 11:34:33.263:INFO::main: Logging initialized @97ms to org.eclipse.jetty.util.log.StdErrLog
 username:realm:password
 OBF:1w281yf41v1x1z7e1xmi1v1p1tvv1v901c3j1x8k1ugo1ri71uh21x8a1c3j1v9m1tv71v2p1xms1z7o1v2h1yf21w1a
@@ -18306,24 +18139,24 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/downloads/jetty-home-10.0.7.tar.gz
-[/opt/jetty]# cd jetty-home-10.0.7/
-[/opt/jetty/jetty-home-10.0.7]# ls
+<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/downloads/jetty-home-10.0.8.tar.gz
+[/opt/jetty]# cd jetty-home-10.0.8/
+[/opt/jetty/jetty-home-10.0.8]# ls
 bin        lib                         modules      resources  start.jar
 demo-base  license-eplv10-aslv20.html  notice.html  start.d    VERSION.txt
 etc        logs                        README.TXT   start.ini  webapps
 
-[/opt/jetty/jetty-home-10.0.7]# cp bin/jetty.sh /etc/init.d/jetty
-[/opt/jetty/jetty-home-10.0.7]# echo JETTY_HOME=`pwd` &gt; /etc/default/jetty
-[/opt/jetty/jetty-home-10.0.7]# cat /etc/default/jetty
-JETTY_HOME=/opt/jetty/jetty-home-10.0.7
+[/opt/jetty/jetty-home-10.0.8]# cp bin/jetty.sh /etc/init.d/jetty
+[/opt/jetty/jetty-home-10.0.8]# echo JETTY_HOME=`pwd` &gt; /etc/default/jetty
+[/opt/jetty/jetty-home-10.0.8]# cat /etc/default/jetty
+JETTY_HOME=/opt/jetty/jetty-home-10.0.8
 
-[/opt/jetty/jetty-home-10.0.7]# service jetty start
+[/opt/jetty/jetty-home-10.0.8]# service jetty start
 Starting Jetty: OK Wed Nov 20 10:26:53 MST 2013</code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>From this demonstration we can see that Jetty started successfully as a Unix Service from the <code>/opt/jetty/jetty-home-10.0.7</code> directory.</p>
+<p>From this demonstration we can see that Jetty started successfully as a Unix Service from the <code>/opt/jetty/jetty-home-10.0.8</code> directory.</p>
 </div>
 <div class="paragraph">
 <p>This configuration works well but it is running Jetty as the root user.</p>
@@ -18431,9 +18264,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/Downloads/jetty-home-10.0.7.tar.gz
+<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/Downloads/jetty-home-10.0.8.tar.gz
 [/opt/jetty]# ls -F
-jetty-home-10.0.7/
+jetty-home-10.0.8/
 [/opt/jetty]# mkdir /opt/jetty/temp</code></pre>
 </div>
 </div>
@@ -18469,7 +18302,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen"># cd /opt/web/mybase/
 [/opt/web/mybase]# ls
-[/opt/web/mybase]# java -jar /opt/jetty/jetty-home-10.0.7/start.jar \
+[/opt/web/mybase]# java -jar /opt/jetty/jetty-home-10.0.8/start.jar \
    --add-to-start=deploy,http,console-capture
    INFO  : webapp          transitively enabled, ini template available with --add-to-start=webapp
    INFO  : server          transitively enabled, ini template available with --add-to-start=server
@@ -18548,8 +18381,8 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen"># cp /opt/jetty/jetty-home-10.0.7/bin/jetty.sh /etc/init.d/jetty
-# echo &quot;JETTY_HOME=/opt/jetty/jetty-home-10.0.7&quot; &gt; /etc/default/jetty
+<pre class="CodeRay highlight"><code data-lang="screen"># cp /opt/jetty/jetty-home-10.0.8/bin/jetty.sh /etc/init.d/jetty
+# echo &quot;JETTY_HOME=/opt/jetty/jetty-home-10.0.8&quot; &gt; /etc/default/jetty
 # echo &quot;JETTY_BASE=/opt/web/mybase&quot; &gt;&gt; /etc/default/jetty
 # echo &quot;TMPDIR=/opt/jetty/temp&quot; &gt;&gt; /etc/default/jetty</code></pre>
 </div>
@@ -18562,32 +18395,32 @@
 <pre class="CodeRay highlight"><code data-lang="screen"># service jetty status
 Checking arguments to Jetty:
 START_INI      =  /opt/web/mybase/start.ini
-JETTY_HOME     =  /opt/jetty/jetty-home-10.0.7
+JETTY_HOME     =  /opt/jetty/jetty-home-10.0.8
 JETTY_BASE     =  /opt/web/mybase
-JETTY_CONF     =  /opt/jetty/jetty-home-10.0.7/etc/jetty.conf
+JETTY_CONF     =  /opt/jetty/jetty-home-10.0.8/etc/jetty.conf
 JETTY_PID      =  /var/run/jetty.pid
-JETTY_START    =  /opt/jetty/jetty-home-10.0.7/start.jar
+JETTY_START    =  /opt/jetty/jetty-home-10.0.8/start.jar
 CLASSPATH      =
 JAVA           =  /usr/bin/java
 JAVA_OPTIONS   =  -Djetty.state=/opt/web/mybase/jetty.state
        -Djetty.logs=/opt/web/mybase/logs
-       -Djetty.home=/opt/jetty/jetty-home-10.0.7
+       -Djetty.home=/opt/jetty/jetty-home-10.0.8
        -Djetty.base=/opt/web/mybase
        -Djava.io.tmpdir=/opt/jetty/temp
 JETTY_ARGS     =  console-capture.xml jetty-started.xml
 RUN_CMD        =  /usr/bin/java
        -Djetty.state=/opt/web/mybase/jetty.state
        -Djetty.logs=/opt/web/mybase/logs
-       -Djetty.home=/opt/jetty/jetty-home-10.0.7
+       -Djetty.home=/opt/jetty/jetty-home-10.0.8
        -Djetty.base=/opt/web/mybase
        -Djava.io.tmpdir=/opt/jetty/temp
-       -jar /opt/jetty/jetty-home-10.0.7/start.jar
+       -jar /opt/jetty/jetty-home-10.0.8/start.jar
        console-capture.xml
        jetty-started.xml</code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>You now have a configured <code>${jetty.base}</code> in <code>/opt/web/mybase</code> and a <code>${jetty.home}</code> in <code>/opt/jetty/jetty-home-10.0.7</code>, along with the service level files necessary to start the service.</p>
+<p>You now have a configured <code>${jetty.base}</code> in <code>/opt/web/mybase</code> and a <code>${jetty.home}</code> in <code>/opt/jetty/jetty-home-10.0.8</code>, along with the service level files necessary to start the service.</p>
 </div>
 <div class="paragraph">
 <p>Test the service to make sure it starts up and runs successfully.</p>
@@ -18696,7 +18529,7 @@
 <p>Download a copy of the ZIP distribution from the <a href="#jetty-downloading">Official Eclipse Download Site</a></p>
 </div>
 <div class="paragraph">
-<p>Extract the contents of the <code>jetty-home-10.0.7</code> directory to <code>C:\opt\jetty</code></p>
+<p>Extract the contents of the <code>jetty-home-10.0.8</code> directory to <code>C:\opt\jetty</code></p>
 </div>
 <div class="paragraph">
 <p>Once complete, the contents of the <code>C:\opt\jetty</code> directory should look like this:</p>
@@ -19673,7 +19506,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in tuning/limit-load.adoc - include::/Users/joakim/Code/Jetty/jetty.project-10.0.x/documentation/jetty-documentation/../jetty-server/src/main/config/etc/jetty-lowresources.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in tuning/limit-load.adoc - include::/home/simon/opensource/jetty/10.0/documentation/jetty-documentation/../jetty-server/src/main/config/etc/jetty-lowresources.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19727,7 +19560,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyEchoServlet.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyEchoServlet.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19770,7 +19603,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoCreator.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoCreator.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19779,7 +19612,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">10.0</span>.x/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoServlet.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/home/simon/opensource/jetty/<span class="float">10.0</span>/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoServlet.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19826,8 +19659,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 10.0.7<br>
-Last updated 2021-02-19 12:22:22 -0600
+Version 10.0.8<br>
+Last updated 2022-02-01 18:50:48 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache
index 70baea4..1d69159 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache
@@ -1 +1 @@
-{"checksum":"0f37d1d5b12f280e1587df6f3d528998","options":{"size_limit":"4096"},"width":351,"height":245}
\ No newline at end of file
+{"checksum":"0f37d1d5b12f280e1587df6f3d528998","options":{"size_limit":"4096"},"width":367,"height":260}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache
index 2882c0a..8677da7 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache
@@ -1 +1 @@
-{"checksum":"176305f848d18dc8b0c4ef7bd331705d","options":{"size_limit":"4096"},"width":374,"height":267}
\ No newline at end of file
+{"checksum":"176305f848d18dc8b0c4ef7bd331705d","options":{"size_limit":"4096"},"width":393,"height":348}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache
index a240360..b1aa0b4 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache
@@ -1 +1 @@
-{"checksum":"2830e38460d606111888c5df2a645163","options":{"size_limit":"4096"},"width":332,"height":623}
\ No newline at end of file
+{"checksum":"2830e38460d606111888c5df2a645163","options":{"size_limit":"4096"},"width":328,"height":623}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache
index a032db4..2475634 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache
@@ -1 +1 @@
-{"checksum":"70817cc5c7137abc9759cdcd3edbb658","options":{"size_limit":"4096"},"width":219,"height":397}
\ No newline at end of file
+{"checksum":"70817cc5c7137abc9759cdcd3edbb658","options":{"size_limit":"4096"},"width":216,"height":397}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache
index 172db00..d195447 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache
@@ -1 +1 @@
-{"checksum":"7387dfbb6f9fb9cfa951a697aca488a8","options":{"size_limit":"4096"},"width":135,"height":284}
\ No newline at end of file
+{"checksum":"7387dfbb6f9fb9cfa951a697aca488a8","options":{"size_limit":"4096"},"width":133,"height":284}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache
index cb6c307..18f5414 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache
@@ -1 +1 @@
-{"checksum":"792f4cd700f2b5af8fedd7b0249d25b4","options":{"size_limit":"4096"},"width":686,"height":174}
\ No newline at end of file
+{"checksum":"792f4cd700f2b5af8fedd7b0249d25b4","options":{"size_limit":"4096"},"width":685,"height":174}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache
index f0c6bf5..279f8df 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache
@@ -1 +1 @@
-{"checksum":"8a7fb4bb9c84453a4bf01a24558e8026","options":{"size_limit":"4096"},"width":413,"height":420}
\ No newline at end of file
+{"checksum":"8a7fb4bb9c84453a4bf01a24558e8026","options":{"size_limit":"4096"},"width":407,"height":417}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache
index fcf8f5f..3065b25 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache
@@ -1 +1 @@
-{"checksum":"cb8a854642d32c964b17f0a090ef16e3","options":{"size_limit":"4096"},"width":445,"height":430}
\ No newline at end of file
+{"checksum":"cb8a854642d32c964b17f0a090ef16e3","options":{"size_limit":"4096"},"width":445,"height":429}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache
index 1bad91c..43357d7 100644
--- a/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache
+++ b/documentation/jetty-10/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache
@@ -1 +1 @@
-{"checksum":"e2488cc783b3434076c5a44ee7f19a2b","options":{"size_limit":"4096"},"width":376,"height":420}
\ No newline at end of file
+{"checksum":"e2488cc783b3434076c5a44ee7f19a2b","options":{"size_limit":"4096"},"width":372,"height":417}
\ No newline at end of file
diff --git a/documentation/jetty-10/operations-guide/asciidoctor.css b/documentation/jetty-10/operations-guide/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-10/operations-guide/asciidoctor.css
+++ b/documentation/jetty-10/operations-guide/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-10/operations-guide/coderay-asciidoctor.css b/documentation/jetty-10/operations-guide/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-10/operations-guide/coderay-asciidoctor.css
+++ b/documentation/jetty-10/operations-guide/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-10/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png b/documentation/jetty-10/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png
index cbaac46..a3c811b 100644
--- a/documentation/jetty-10/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png
+++ b/documentation/jetty-10/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png b/documentation/jetty-10/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png
index c8cd925..6c45887 100644
--- a/documentation/jetty-10/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png
+++ b/documentation/jetty-10/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png b/documentation/jetty-10/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png
index 4369313..9b3af95 100644
--- a/documentation/jetty-10/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png
+++ b/documentation/jetty-10/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png b/documentation/jetty-10/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png
index 2f67b61..8033f2f 100644
--- a/documentation/jetty-10/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png
+++ b/documentation/jetty-10/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png b/documentation/jetty-10/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png
index 84c7c97..c485cd7 100644
--- a/documentation/jetty-10/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png
+++ b/documentation/jetty-10/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png b/documentation/jetty-10/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png
index dba400e..7dfc0a2 100644
--- a/documentation/jetty-10/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png
+++ b/documentation/jetty-10/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png b/documentation/jetty-10/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png
index 37859ca..af8ccd7 100644
--- a/documentation/jetty-10/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png
+++ b/documentation/jetty-10/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png b/documentation/jetty-10/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png
index 6f6202a..7a990b1 100644
--- a/documentation/jetty-10/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png
+++ b/documentation/jetty-10/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png b/documentation/jetty-10/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png
index 0bfa71e..1a9ae7d 100644
--- a/documentation/jetty-10/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png
+++ b/documentation/jetty-10/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png b/documentation/jetty-10/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png
index c182024..35d2d7c 100644
--- a/documentation/jetty-10/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png
+++ b/documentation/jetty-10/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png
Binary files differ
diff --git a/documentation/jetty-10/operations-guide/index.html b/documentation/jetty-10/operations-guide/index.html
index 7340dbd..51a7ab7 100644
--- a/documentation/jetty-10/operations-guide/index.html
+++ b/documentation/jetty-10/operations-guide/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Operations Guide</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -20,8 +21,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 10.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 10.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Operations Guide</div>
@@ -59,6 +60,7 @@
 <li><a href="#og-start-configure-enable">Enabling Modules</a></li>
 <li><a href="#og-start-configure-disable">Disabling Modules</a></li>
 <li><a href="#og-start-configure-edit-ini">Editing <code>*.ini</code> Files</a></li>
+<li><a href="#og-start-configure-enable-command-line">Enabling Modules on Command Line</a></li>
 <li><a href="#og-start-configure-custom-module">Adding Your Own Modules</a></li>
 <li><a href="#og-start-configure-custom-module-exec">Custom Module with JVM Options</a></li>
 <li><a href="#og-start-configure-display">Displaying the Configuration</a></li>
@@ -115,10 +117,11 @@
 <li><a href="#og-modules-custom-create">Creating a New Module</a></li>
 </ul>
 </li>
-<li><a href="#og-modules-standard">Standard Modules</a></li>
-<li><a href="#og-module-alpn">Module <code>alpn</code></a>
+<li><a href="#og-modules-standard">Standard Modules</a>
 <ul class="sectlevel4">
+<li><a href="#og-module-alpn">Module <code>alpn</code></a></li>
 <li><a href="#og-module-bytebufferpool">Module <code>bytebufferpool</code></a></li>
+<li><a href="#og-module-console-capture">Module <code>console-capture</code></a></li>
 <li><a href="#og-module-deploy">Module <code>deploy</code></a></li>
 <li><a href="#og-module-http">Module <code>http</code></a>
 <ul class="sectlevel5">
@@ -128,9 +131,11 @@
 </li>
 <li><a href="#og-module-http2">Module <code>http2</code></a></li>
 <li><a href="#og-module-http2c">Module <code>http2c</code></a></li>
+<li><a href="#og-module-http3">Module <code>http3</code></a></li>
 <li><a href="#og-module-http-forwarded">Module <code>http-forwarded</code></a></li>
 <li><a href="#og-module-https">Module <code>https</code></a></li>
 <li><a href="#og-module-jmx-remote">Module <code>jmx-remote</code></a></li>
+<li><a href="#og-module-requestlog">Module <code>requestlog</code></a></li>
 <li><a href="#og-module-server">Module <code>server</code></a>
 <ul class="sectlevel5">
 <li><a href="#og-module-server-http-config">HTTP Configuration Properties</a></li>
@@ -148,7 +153,7 @@
 <li><a href="#og-module-ssl-reload">Module <code>ssl-reload</code></a></li>
 <li><a href="#og-module-test-keystore">Module <code>test-keystore</code></a></li>
 <li><a href="#og-module-threadpool">Module <code>threadpool</code></a></li>
-<li><a href="#og-module-console-capture">Module <code>console-capture</code></a></li>
+<li><a href="#og-module-well-known">Module <code>well-known</code></a></li>
 </ul>
 </li>
 </ul>
@@ -180,6 +185,7 @@
 <li><a href="#og-secure-vs-clear-text-http2">Secure vs Clear-Text HTTP/2</a></li>
 <li><a href="#og-protocols-http2s">Secure HTTP/2</a></li>
 <li><a href="#og-protocols-http2c">Clear-Text HTTP/2</a></li>
+<li><a href="#og-protocols-http3">HTTP/3</a></li>
 <li><a href="#og-protocols-ssl">Configuring Secure Protocols</a>
 <ul class="sectlevel4">
 <li><a href="#og-protocols-ssl-customize">Customizing KeyStore and SSL/TLS Configuration</a>
@@ -438,7 +444,7 @@
 <li><a href="#og-logging-server-custom">Custom Configuration</a>
 <ul class="sectlevel5">
 <li><a href="#og-logging-server-custom-logback">Logging with LogBack</a></li>
-<li><a href="#og-logging-server-custom-log4j2">Logging with Log4J2</a></li>
+<li><a href="#og-logging-server-custom-log4j2">Logging with Log4j2</a></li>
 </ul>
 </li>
 <li><a href="#og-logging-server-bridges">Bridging Logging to SLF4J</a>
@@ -467,6 +473,7 @@
 <li><a href="#og-troubleshooting-logging-subpackages">Enabling DEBUG Logging for SubPackages</a></li>
 </ul>
 </li>
+<li><a href="#og-troubleshooting-debugging">Remote Debugging</a></li>
 </ul>
 </li>
 <li><a href="#og-xml">Jetty XML</a>
@@ -573,7 +580,7 @@
 <div class="sect3">
 <h4 id="og-begin-install"><a class="anchor" href="#og-begin-install"></a><a class="link" href="#og-begin-install">Installing Jetty</a></h4>
 <div class="paragraph">
-<p>After the download, unpacking Eclipse Jetty will extract the files into a directory called <code>jetty-home-VERSION</code>, where <code>VERSION</code> is the version that you downloaded, for example <code>10.0.7</code>, so that the directory is called <code>jetty-home-10.0.7</code>.</p>
+<p>After the download, unpacking Eclipse Jetty will extract the files into a directory called <code>jetty-home-VERSION</code>, where <code>VERSION</code> is the version that you downloaded, for example <code>10.0.8</code>, so that the directory is called <code>jetty-home-10.0.8</code>.</p>
 </div>
 <div class="paragraph">
 <p>Unpack Eclipse Jetty compressed file in a convenient location, for example under <code>/opt</code>.</p>
@@ -694,9 +701,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:47:58.474:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:47:58.526:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@2fd05ff<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}</mark>
-<strong>2021-10-06 14:47:58.542:</strong>INFO :oejs.Server:main: Started Server@48524010{STARTING}[10.0.7,sto=5000] @800ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:03.859:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:03.886:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@470734c3<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}</mark>
+<strong>2022-02-07 11:50:03.892:</strong>INFO :oejs.Server:main: Started Server@28f3b248{STARTING}[10.0.8,sto=5000] @462ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -782,9 +789,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:47:59.768:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:47:59.820:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@65d07359<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:9999}</mark>
-<strong>2021-10-06 14:47:59.835:</strong>INFO :oejs.Server:main: Started Server@48524010{STARTING}[10.0.7,sto=5000] @795ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:04.661:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:04.688:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@470734c3<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:9999}</mark>
+<strong>2022-02-07 11:50:04.694:</strong>INFO :oejs.Server:main: Started Server@28f3b248{STARTING}[10.0.8,sto=5000] @455ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -797,7 +804,7 @@
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-If you want to enable support for different protocols such as secure HTTP/1.1 or HTTP/2, or configured Jetty behind a load balancer, read <a href="#og-protocols">this section</a>.
+If you want to enable support for different protocols such as secure HTTP/1.1 or HTTP/2 or HTTP/3, or configure Jetty behind a load balancer, read <a href="#og-protocols">this section</a>.
 </td>
 </tr>
 </table>
@@ -912,7 +919,7 @@
 <p>The <code>deploy</code> module only provides the feature of deploying web applications.</p>
 </div>
 <div class="paragraph">
-<p>Whether these web applications are served via clear-text HTTP/1.1, or secure HTTP/1.1, or secure HTTP/2 (or even all of these protocols) depends on whether the correspondent Jetty modules have been enabled.
+<p>Whether these web applications are served via clear-text HTTP/1.1, or secure HTTP/1.1, or secure HTTP/2, or HTTP/3 (or even all of these protocols) depends on whether the correspondent Jetty modules have been enabled.
 Refer to the <a href="#og-protocols">section about protocols</a> for further information.</p>
 </div>
 </td>
@@ -952,13 +959,13 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:48:02.593:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:48:02.647:</strong>INFO :oejdp.ScanningAppProvider:main: Deployment monitor [file:///path/to/jetty.base/webapps/]
-<strong>2021-10-06 14:48:02.774:</strong>INFO :oejw.StandardDescriptorProcessor:main: NO JSP Support for /demo-simple, did not find org.eclipse.jetty.jsp.JettyJspServlet
-<strong>2021-10-06 14:48:02.785:</strong>INFO :oejss.DefaultSessionIdManager:main: Session workerName=node0
-<mark><strong>2021-10-06 14:48:02.818:</strong>INFO :oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@610f7aa{Simple Web Application,/demo-simple,file:///path/to/jetty.base/work/jetty-0_0_0_0-8080-demo-simple_war-_demo-simple-any-/webapp/,AVAILABLE}{/path/to/jetty.base/webapps/demo-simple.war}</mark>
-<strong>2021-10-06 14:48:02.831:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@72aa181d{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
-<strong>2021-10-06 14:48:02.849:</strong>INFO :oejs.Server:main: Started Server@10e31a9a{STARTING}[10.0.7,sto=5000] @1099ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:06.324:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:06.346:</strong>INFO :oejdp.ScanningAppProvider:main: Deployment monitor [file:///path/to/jetty.base/webapps/]
+<strong>2022-02-07 11:50:06.399:</strong>INFO :oejw.StandardDescriptorProcessor:main: NO JSP Support for /demo-simple, did not find org.eclipse.jetty.jsp.JettyJspServlet
+<strong>2022-02-07 11:50:06.404:</strong>INFO :oejss.DefaultSessionIdManager:main: Session workerName=node0
+<mark><strong>2022-02-07 11:50:06.418:</strong>INFO :oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@1f81aa00{Simple Web Application,/demo-simple,file:///path/to/jetty.base/work/jetty-0_0_0_0-8080-demo-simple_war-_demo-simple-any-/webapp/,AVAILABLE}{/path/to/jetty.base/webapps/demo-simple.war}</mark>
+<strong>2022-02-07 11:50:06.427:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@2e733b38{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
+<strong>2022-02-07 11:50:06.433:</strong>INFO :oejs.Server:main: Started Server@480d3575{STARTING}[10.0.8,sto=5000] @553ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -994,7 +1001,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-cb8a854642d32c964b17f0a090ef16e3.png" alt="Diagram" width="445" height="430">
+<img src="images/diag-cb8a854642d32c964b17f0a090ef16e3.png" alt="Diagram" width="445" height="429">
 </div>
 </div>
 <div class="paragraph">
@@ -1037,7 +1044,7 @@
 </div>
 <div class="paragraph">
 <p>For example, if you enable only the <code>http</code> Jetty module, then your Jetty standalone server will only be able to listen to a network port for clear-text HTTP requests.
-It will not be able to process secure HTTP (i.e. <code>https</code>) requests, it will not be able to process WebSocket, or HTTP/2 or any other protocol because the correspondent modules have not been enabled.</p>
+It will not be able to process secure HTTP (i.e. <code>https</code>) requests, it will not be able to process WebSocket, or HTTP/2, or HTTP/3 or any other protocol because the correspondent modules have not been enabled.</p>
 </div>
 <div class="paragraph">
 <p>You can even start a Jetty server <em>without</em> listening on a network port&#8201;&#8212;&#8201;for example because you have enabled a custom module you wrote that provides the features you need.</p>
@@ -1186,6 +1193,9 @@
 <p><a href="#og-protocols-http2">HTTP/2 Support</a></p>
 </li>
 <li>
+<p><a href="#og-protocols-http3">HTTP/3 Support</a></p>
+</li>
+<li>
 <p><a href="#og-protocols-websocket">WebSocket Support</a></p>
 </li>
 </ul>
@@ -1269,6 +1279,9 @@
 <p><a href="#og-protocols-http2s">Configure Secure HTTP/2</a></p>
 </li>
 <li>
+<p><a href="#og-protocols-http3">Configure HTTP/3</a></p>
+</li>
+<li>
 <p><a href="#og-protocols-proxy">Configure Jetty Behind a Load Balancer or Reverse Proxy</a></p>
 </li>
 <li>
@@ -1348,7 +1361,7 @@
 <div class="sect4">
 <h5 id="og-start-configure-enable"><a class="anchor" href="#og-start-configure-enable"></a><a class="link" href="#og-start-configure-enable">Enabling Modules</a></h5>
 <div class="paragraph">
-<p>You can enable Jetty modules with the <code>--add-modules</code> command:</p>
+<p>You can enable Jetty modules persistently across restarts with the <code>--add-modules</code> command:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -1461,6 +1474,46 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-start-configure-enable-command-line"><a class="anchor" href="#og-start-configure-enable-command-line"></a><a class="link" href="#og-start-configure-enable-command-line">Enabling Modules on Command Line</a></h5>
+<div class="paragraph">
+<p>You can also enable a module transiently, only for the current execution of the <code>java -jar $JETTY_HOME/start.jar</code> command.</p>
+</div>
+<div class="paragraph">
+<p>If you have an empty <code>$JETTY_BASE</code>, the following command enables the <code>server</code> and <code>http</code> modules, but does not create any <code>$JETTY_BASE/start.d/*.ini</code> files.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --module=server,http</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Since there are no <code>$JETTY_BASE/start.d/*.ini</code> files, you can only customize the properties via the command line, for example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --module=server,http jetty.http.port=9876</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Enabling modules on the command line is useful to verify that the modules work as expected, or to try different configurations.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+It is possible to enable some module persistently via <code>--add-modules</code> and some other module transiently via <code>--module</code>.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Remember that once the current execution terminates, the modules enabled transiently on the command line via <code>--module</code> and their configuration are not saved and will not be enabled on the next execution (unless you specify them again on the command line).</p>
+</div>
+</div>
+<div class="sect4">
 <h5 id="og-start-configure-custom-module"><a class="anchor" href="#og-start-configure-custom-module"></a><a class="link" href="#og-start-configure-custom-module">Adding Your Own Modules</a></h5>
 <div class="admonitionblock note">
 <table>
@@ -1608,40 +1661,39 @@
 <div class="content">
 <pre class="CodeRay highlight nowrap"><code>Enabled Modules:
 ----------------
-    0) resources       transitive provider of resources for logging-jetty
-    1) logging/slf4j   transitive provider of logging/slf4j for logging-jetty
-                       dynamic dependency of logging-jetty
-    2) logging-jetty   transitive provider of logging for threadpool
-                       transitive provider of logging for bytebufferpool
-                       transitive provider of logging for server
-    3) bytebufferpool  transitive provider of bytebufferpool for server
-                       init template available with --add-module=bytebufferpool
-    4) threadpool      transitive provider of threadpool for server
-                       init template available with --add-module=threadpool
-    5) jvm             ${jetty.base}/start.d/jvm.ini
-    6) server          ${jetty.base}/start.d/server.ini
-    7) http            ${jetty.base}/start.d/http.ini
-    8) postgresql      ${jetty.base}/start.d/postgresql.ini
+  0) bytebufferpool            transitive provider of bytebufferpool for server
+                               ini template available with --add-module=bytebufferpool
+  1) resources                 transitive provider of resources for logging-jetty
+  2) logging/slf4j             transitive provider of logging/slf4j for logging-jetty
+                               dynamic dependency of logging-jetty
+  3) logging-jetty             transitive provider of logging for threadpool
+                               transitive provider of logging for server
+  4) threadpool                transitive provider of threadpool for server
+                               ini template available with --add-module=threadpool
+  5) jvm                       ${jetty.base}/start.d/jvm.ini
+  6) server                    ${jetty.base}/start.d/server.ini
+  7) http                      ${jetty.base}/start.d/http.ini
+  8) postgresql                ${jetty.base}/start.d/postgresql.ini
 
 Java Environment:
 -----------------
- java.home = /path/to/java.home (null)
- java.vm.vendor = Eclipse Adoptium (null)
- java.vm.version = 17+35 (null)
- java.vm.name = OpenJDK 64-Bit Server VM (null)
- java.vm.info = mixed mode, sharing (null)
- java.runtime.name = OpenJDK Runtime Environment (null)
- java.runtime.version = 17+35 (null)
- java.io.tmpdir = /path/to/jetty.base/work (null)
- user.dir = /path/to/jetty.base (null)
- user.language = en (null)
- user.country = US (null)
+ java.home = /path/to/java.home
+ java.vm.vendor = Eclipse Adoptium
+ java.vm.version = 11.0.14+9
+ java.vm.name = OpenJDK 64-Bit Server VM
+ java.vm.info = mixed mode
+ java.runtime.name = OpenJDK Runtime Environment
+ java.runtime.version = 11.0.14+9
+ java.io.tmpdir = /path/to/jetty.base/work
+ user.dir = /path/to/jetty.base
+ user.language = en
+ user.country = US
 
 Jetty Environment:
 ------------------
- jetty.version = 10.0.7
- jetty.tag.version = jetty-10.0.7
- jetty.build = da8a4553af9dd84080931fa0f8c678cd2d60f3d9
+ jetty.version = 10.0.8
+ jetty.tag.version = jetty-10.0.8
+ jetty.build = 716c7afd8e40d8f645b32aff06945a249d6eb511
  jetty.home = /path/to/jetty.home
  jetty.base = /path/to/jetty.base
 
@@ -1662,11 +1714,11 @@
 
 Properties:
 -----------
- java.version = 17
- java.version.major = 17
- java.version.micro = 0
+ java.version = 11.0.14
+ java.version.major = 11
+ java.version.micro = 14
  java.version.minor = 0
- java.version.platform = 17
+ java.version.platform = 11
  jetty.base = /path/to/jetty.base
  jetty.base.uri = file:///path/to/jetty.base
  jetty.home = /path/to/jetty.home
@@ -1683,13 +1735,13 @@
       changes to the --module=name command line options will be reflected here.
  0:                    (dir) | ${jetty.base}/resources
  1:             2.0.0-alpha5 | ${jetty.home}/lib/logging/slf4j-api-2.0.0-alpha5.jar
- 2:                   10.0.7 | ${jetty.home}/lib/logging/jetty-slf4j-impl-10.0.7.jar
+ 2:                   10.0.8 | ${jetty.home}/lib/logging/jetty-slf4j-impl-10.0.8.jar
  3:                    4.0.6 | ${jetty.home}/lib/jetty-servlet-api-4.0.6.jar
- 4:                   10.0.7 | ${jetty.home}/lib/jetty-http-10.0.7.jar
- 5:                   10.0.7 | ${jetty.home}/lib/jetty-server-10.0.7.jar
- 6:                   10.0.7 | ${jetty.home}/lib/jetty-xml-10.0.7.jar
- 7:                   10.0.7 | ${jetty.home}/lib/jetty-util-10.0.7.jar
- 8:                   10.0.7 | ${jetty.home}/lib/jetty-io-10.0.7.jar
+ 4:                   10.0.8 | ${jetty.home}/lib/jetty-http-10.0.8.jar
+ 5:                   10.0.8 | ${jetty.home}/lib/jetty-server-10.0.8.jar
+ 6:                   10.0.8 | ${jetty.home}/lib/jetty-xml-10.0.8.jar
+ 7:                   10.0.8 | ${jetty.home}/lib/jetty-util-10.0.8.jar
+ 8:                   10.0.8 | ${jetty.home}/lib/jetty-io-10.0.8.jar
  9:                  42.2.18 | ${jetty.base}/lib/postgresql-42.2.18.jar
 
 Jetty Active XMLs:
@@ -1766,13 +1818,13 @@
 -Xmx1g \
 -Xlog:gc*,gc+stats=off:file=logs/gc.log:time,level,tags \
 --class-path \
-/path/to/jetty.base/resources:/path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.7.jar:/path/to/jetty.home/lib/jetty-servlet-api-4.0.6.jar:/path/to/jetty.home/lib/jetty-http-10.0.7.jar:/path/to/jetty.home/lib/jetty-server-10.0.7.jar:/path/to/jetty.home/lib/jetty-xml-10.0.7.jar:/path/to/jetty.home/lib/jetty-util-10.0.7.jar:/path/to/jetty.home/lib/jetty-io-10.0.7.jar \
+/path/to/jetty.base/resources:/path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.8.jar:/path/to/jetty.home/lib/jetty-servlet-api-4.0.6.jar:/path/to/jetty.home/lib/jetty-http-10.0.8.jar:/path/to/jetty.home/lib/jetty-server-10.0.8.jar:/path/to/jetty.home/lib/jetty-xml-10.0.8.jar:/path/to/jetty.home/lib/jetty-util-10.0.8.jar:/path/to/jetty.home/lib/jetty-io-10.0.8.jar \
 org.eclipse.jetty.xml.XmlConfiguration \
-java.version=17 \
-java.version.major=17 \
-java.version.micro=0 \
+java.version=11.0.14 \
+java.version.major=11 \
+java.version.micro=14 \
 java.version.minor=0 \
-java.version.platform=17 \
+java.version.platform=11 \
 jetty.base=/path/to/jetty.base \
 jetty.base.uri=file:///path/to/jetty.base \
 jetty.home=/path/to/jetty.home \
@@ -1843,13 +1895,13 @@
 <pre class="CodeRay highlight nowrap"><code>--class-path \
 /path/to/jetty.base/resources:\
 /path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:\
-/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.7.jar:\
+/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.8.jar:\
 /path/to/jetty.home/lib/jetty-servlet-api-4.0.6.jar:\
-/path/to/jetty.home/lib/jetty-http-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-server-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-xml-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-util-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-io-10.0.7.jar</code></pre>
+/path/to/jetty.home/lib/jetty-http-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-server-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-xml-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-util-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-io-10.0.8.jar</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -1864,13 +1916,13 @@
 <div class="content">
 <pre class="CodeRay highlight nowrap"><code>--module-path \
 /path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:\
-/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.7.jar:\
+/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.8.jar:\
 /path/to/jetty.home/lib/jetty-servlet-api-4.0.6.jar:\
-/path/to/jetty.home/lib/jetty-http-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-server-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-xml-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-util-10.0.7.jar:\
-/path/to/jetty.home/lib/jetty-io-10.0.7.jar \
+/path/to/jetty.home/lib/jetty-http-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-server-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-xml-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-util-10.0.8.jar:\
+/path/to/jetty.home/lib/jetty-io-10.0.8.jar \
 --class-path \
 /path/to/jetty.base/resources \
 --add-modules \
@@ -1917,11 +1969,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code>java.version=17 \
-java.version.major=17 \
-java.version.micro=0 \
+<pre class="CodeRay highlight nowrap"><code>java.version=11.0.14 \
+java.version.major=11 \
+java.version.micro=14 \
 java.version.minor=0 \
-java.version.platform=17 \
+java.version.platform=11 \
 jetty.base=/path/to/jetty.base \
 jetty.base.uri=file:///path/to/jetty.base \
 jetty.home=/path/to/jetty.home \
@@ -2004,7 +2056,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-0f37d1d5b12f280e1587df6f3d528998.png" alt="Diagram" width="351" height="245">
+<img src="images/diag-0f37d1d5b12f280e1587df6f3d528998.png" alt="Diagram" width="367" height="260">
 </div>
 </div>
 <div class="paragraph">
@@ -2017,7 +2069,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-176305f848d18dc8b0c4ef7bd331705d.png" alt="Diagram" width="374" height="267">
+<img src="images/diag-176305f848d18dc8b0c4ef7bd331705d.png" alt="Diagram" width="393" height="348">
 </div>
 </div>
 <div class="paragraph">
@@ -2259,10 +2311,10 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><mark>STOP.KEY=2wb4vri7f2o0</mark>
-<strong>2021-10-06 14:48:18.126:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:48:18.168:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@bef2d72{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
-<strong>2021-10-06 14:48:18.180:</strong>INFO :oejs.Server:main: Started Server@6295d394{STARTING}[10.0.7,sto=5000] @823ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><mark>STOP.KEY=ecm9v5ukfxmo</mark>
+<strong>2022-02-07 11:50:13.631:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:13.654:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@1ca3b418{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
+<strong>2022-02-07 11:50:13.661:</strong>INFO :oejs.Server:main: Started Server@5fbdfdcf{STARTING}[10.0.8,sto=5000] @431ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -3643,10 +3695,8 @@
 </div>
 <div class="sect3">
 <h4 id="og-modules-standard"><a class="anchor" href="#og-modules-standard"></a><a class="link" href="#og-modules-standard">Standard Modules</a></h4>
-
-</div>
-<div class="sect3">
-<h4 id="og-module-alpn"><a class="anchor" href="#og-module-alpn"></a><a class="link" href="#og-module-alpn">Module <code>alpn</code></a></h4>
+<div class="sect4">
+<h5 id="og-module-alpn"><a class="anchor" href="#og-module-alpn"></a><a class="link" href="#og-module-alpn">Module <code>alpn</code></a></h5>
 <div class="paragraph">
 <p>The <code>alpn</code> module enables support for the ALPN negotiation mechanism of the TLS protocol.</p>
 </div>
@@ -3667,6 +3717,7 @@
 # jetty.alpn.defaultProtocol=http/1.1</pre>
 </div>
 </div>
+</div>
 <div class="sect4">
 <h5 id="og-module-bytebufferpool"><a class="anchor" href="#og-module-bytebufferpool"></a><a class="link" href="#og-module-bytebufferpool">Module <code>bytebufferpool</code></a></h5>
 <div class="paragraph">
@@ -3692,8 +3743,8 @@
 <pre>[description]
 Configures the ByteBufferPool used by ServerConnectors.
 
-[depends]
-logging
+[tags]
+bytebufferpool
 
 [xml]
 etc/jetty-bytebufferpool.xml
@@ -3715,11 +3766,11 @@
 ## Maximum queue length for each bucket (-1 for unbounded).
 #jetty.byteBufferPool.maxQueueLength=-1
 
-## Maximum heap memory retainable by the pool (-1 for unlimited).
-#jetty.byteBufferPool.maxHeapMemory=-1
+## Maximum heap memory retainable by the pool (0 for heuristic, -1 for unlimited).
+#jetty.byteBufferPool.maxHeapMemory=0
 
-## Maximum direct memory retainable by the pool (-1 for unlimited).
-#jetty.byteBufferPool.maxDirectMemory=-1</pre>
+## Maximum direct memory retainable by the pool (0 for heuristic, -1 for unlimited).
+#jetty.byteBufferPool.maxDirectMemory=0</pre>
 </div>
 </div>
 <div class="paragraph">
@@ -3739,6 +3790,34 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-module-console-capture"><a class="anchor" href="#og-module-console-capture"></a><a class="link" href="#og-module-console-capture">Module <code>console-capture</code></a></h5>
+<div class="paragraph">
+<p>The <code>console-capture</code> module captures <code>System.out</code> and <code>System.err</code> output and appends it to a rolling file.</p>
+</div>
+<div class="paragraph">
+<p>The file is rolled every day at the midnight of the configured timezone.
+Old, rolled files are kept for the number of days specified by the <code>jetty.console-capture.retainDays</code> property.</p>
+</div>
+<div class="paragraph">
+<p>The module properties are:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>## Logging directory (relative to $JETTY_BASE).
+# jetty.console-capture.dir=./logs
+
+## Whether to append to existing file.
+# jetty.console-capture.append=true
+
+## How many days to retain old log files.
+# jetty.console-capture.retainDays=90
+
+## Timezone ID of the log timestamps, as specified by java.time.ZoneId.
+# jetty.console-capture.timezone=GMT</pre>
+</div>
+</div>
+</div>
+<div class="sect4">
 <h5 id="og-module-deploy"><a class="anchor" href="#og-module-deploy"></a><a class="link" href="#og-module-deploy">Module <code>deploy</code></a></h5>
 <div class="paragraph">
 <p>The <code>deploy</code> module provides the deployment feature through a <code>DeploymentManager</code> component that watches a directory for changes (see <a href="#og-deploy">how to deploy web applications</a> for more information).</p>
@@ -3910,7 +3989,7 @@
 <p>For a single NIO selector, the ratio between the average number of selected connections over the total number of connections for every <code>select()</code> call depends heavily on the protocol but also on the application.</p>
 </div>
 <div class="paragraph">
-<p>Multiplexed protocols such as HTTP/2 tend to be busier than duplex protocols such as HTTP/1.1, leading to a higher ratio.</p>
+<p>Multiplexed TCP protocols such as HTTP/2 tend to be busier than duplex protocols such as HTTP/1.1, leading to a higher ratio.</p>
 </div>
 <div class="paragraph">
 <p>REST applications that exchange many little JSON messages tend to be busier than file server applications, leading to a higher ratio.</p>
@@ -3997,6 +4076,39 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-module-http3"><a class="anchor" href="#og-module-http3"></a><a class="link" href="#og-module-http3">Module <code>http3</code></a></h5>
+<div class="paragraph">
+<p>The <code>http3</code> module enables support for the HTTP/3 protocol.</p>
+</div>
+<div class="paragraph">
+<p>The module properties are:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>## The host/address to bind the connector to.
+# jetty.quic.host=0.0.0.0
+
+## The port the connector listens on.
+# jetty.quic.port=8444
+
+## The connector idle timeout, in milliseconds.
+# jetty.quic.idleTimeout=30000
+
+## Specifies the maximum number of concurrent requests per session.
+# jetty.quic.maxBidirectionalRemoteStreams=128
+
+## Specifies the session receive window (client to server) in bytes.
+# jetty.quic.sessionRecvWindow=4194304
+
+## Specifies the stream receive window (client to server) in bytes.
+# jetty.quic.bidirectionalStreamRecvWindow=2097152
+
+## Specifies the stream idle timeout, in milliseconds.
+# jetty.http3.streamIdleTimeout=30000</pre>
+</div>
+</div>
+</div>
+<div class="sect4">
 <h5 id="og-module-http-forwarded"><a class="anchor" href="#og-module-http-forwarded"></a><a class="link" href="#og-module-http-forwarded">Module <code>http-forwarded</code></a></h5>
 <div class="paragraph">
 <p>The <code>http-forwarded</code> module provides support for processing the <code>Forwarded</code> HTTP header (defined in <a href="https://tools.ietf.org/html/rfc7239">RFC 7239</a>) and the now obsoleted <code>X-Forwarded-*</code> HTTP headers.</p>
@@ -4133,6 +4245,332 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-module-requestlog"><a class="anchor" href="#og-module-requestlog"></a><a class="link" href="#og-module-requestlog">Module <code>requestlog</code></a></h5>
+<div class="paragraph">
+<p>The <code>requestlog</code> module provides HTTP request/response logging in the standard <a href="https://en.wikipedia.org/wiki/Common_Log_Format">NCSA format</a>, or in a custom format of your choice.</p>
+</div>
+<div class="paragraph">
+<p>The module properties are:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>## Request log line format string.
+# jetty.requestlog.formatString=%a - %u %{dd/MMM/yyyy:HH:mm:ss ZZZ|GMT}t "%r" %s %B "%{Referer}i" "%{User-Agent}i" "%C"
+
+## The logging directory (relative to $JETTY_BASE).
+# jetty.requestlog.dir=logs
+
+## The request log file path (may be absolute and/or outside $JETTY_BASE).
+# jetty.requestlog.filePath=${jetty.requestlog.dir}/yyyy_MM_dd.request.log
+
+## Date format for the files that are rolled over (uses SimpleDateFormat syntax).
+# jetty.requestlog.filenameDateFormat=yyyy_MM_dd
+
+## How many days to retain old log files.
+# jetty.requestlog.retainDays=90
+
+## Whether to append to existing file or create a new one.
+# jetty.requestlog.append=false
+
+## The timezone of the log file name.
+# jetty.requestlog.timezone=GMT</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The property <code>jetty.requestlog.formatString</code> can be customized using format codes.</p>
+</div>
+<div class="paragraph">
+<p>Format codes are specified with the syntax <code>%MODIFIERS{PARAM}CODE</code> as follows:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>MODIFIERS</code></dt>
+<dd>
+<p>Optional list of comma separated HTTP status codes which may be preceded by a single "!" to indicate
+negation. If the status code is not in the list the literal string "-" will be logged instead of
+the resulting value from the percent code.</p>
+</dd>
+<dt class="hdlist1"><code>{PARAM}</code></dt>
+<dd>
+<p>Parameter string which may be optional depending on the percent code used.</p>
+</dd>
+<dt class="hdlist1"><code>CODE</code></dt>
+<dd>
+<p>A one or two character code specified by the table of format codes below.</p>
+</dd>
+</dl>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. Format Codes</caption>
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 75%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Format String</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">X</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The X character.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%%</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The percent character.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{format}a</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The address or host name.</p>
+</div>
+<div class="paragraph">
+<p>Valid format values are: "server", "client", "local", "remote".
+The format parameter is optional and defaults to "server".</p>
+</div>
+<div class="paragraph">
+<p>Values "server" and "client" are the logical addresses which can be modified in the request headers,
+while "local" and "remote" are the physical addresses so may be the addresses of a proxy between
+the end-user and the server.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{format}p</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The port.</p>
+</div>
+<div class="paragraph">
+<p>Valid format values are: "server", "client", "local", "remote".
+The format parameter is optional and defaults to "server".</p>
+</div>
+<div class="paragraph">
+<p>Values "server" and "client" are the logical ports which can be modified in the request headers,
+while "local" and "remote" are the physical ports so may be the ports of a proxy between
+the end-user and the server.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{CLF}I</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The size of request in bytes, excluding HTTP headers.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "CLF" the Common Log Format is used, i.e. a <code>-</code> rather than a <code>0</code>
+when no bytes are present.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{CLF}O</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The size of response in bytes, excluding HTTP headers.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "CLF" the Common Log Format is used, i.e. a <code>-</code> rather than a <code>0</code>
+when no bytes are present.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{CLF}S</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The bytes transferred (received and sent). This is the combination of <code>%I</code> and <code>%O</code>.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "CLF" the Common Log Format is used, i.e. a <code>-</code> rather than a <code>0</code>
+when no bytes are present.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}C</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the request cookie VARNAME.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+Only version 0 cookies are fully supported.
+When the parameter is missing, all request cookies will be logged.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%D</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The time taken to serve the request, in microseconds.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}e</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the environment variable VARNAME.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%f</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The file system path of the requested resource.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%H</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The name and version of the request protocol, such as "HTTP/1.1".</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}i</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME request header.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%k</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The number of requests handled on a connection.</p>
+</div>
+<div class="paragraph">
+<p>The initial request on a connection yields a value 0, the first request after the initial on the same connection
+yields the value 1, the second request on the same connection yields the value 2, etc.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%m</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The HTTP request method.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}o</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME response header.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%q</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The query string, prepended with a ? if a query string exists, otherwise an empty string.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%r</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>First line of an HTTP/1.1 request (or equivalent information for HTTP/2 or later).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%R</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The name of the Handler or Servlet generating the response (if any).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%s</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The HTTP response status code.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{format|timeZone|locale}t</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The time at which the request was received.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional and may have the following values: {format}, {format|timeZone} or {format|timeZone|locale}.</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>format</code></dt>
+<dd>
+<p>Default is e.g. [18/Sep/2011:19:18:28 -0400] where the last number indicates the timezone offset from GMT.
+Must be in a format supported by the <code>java.time</code> package.</p>
+</dd>
+<dt class="hdlist1"><code>timeZone</code></dt>
+<dd>
+<p>Default is GMT.
+Must be in a format supported by the <code>java.time</code> package.</p>
+</dd>
+<dt class="hdlist1"><code>locale</code></dt>
+<dd>
+<p>Default is the JVM default locale.
+Must be in a format supported by <code>java.util.Locale.forLanguageTag()</code>.</p>
+</dd>
+</dl>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{UNIT}T</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The time taken to serve the request.</p>
+</div>
+<div class="paragraph">
+<p>The parameter UNIT is optional and defaults to "s".
+The parameter UNIT indicates the unit of time: "s" for seconds, "ms" for milliseconds, "us" for microseconds.
+<code>%{us}T</code> is identical to <code>%D</code>.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{d}u</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The remote user if the request was authenticated with servlet authentication.</p>
+</div>
+<div class="paragraph">
+<p>May be an invalid value if response status code (<code>%s</code>) is 401 (unauthorized).</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "d", deferred authentication will also be checked.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%U</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The URL path requested, not including any query string.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%X</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The connection status when response is completed:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>X</code></dt>
+<dd>
+<p>The connection is aborted before the response completed.</p>
+</dd>
+<dt class="hdlist1"><code>+</code></dt>
+<dd>
+<p>The connection may be kept alive after the response is sent.</p>
+</dd>
+<dt class="hdlist1"><code>-</code></dt>
+<dd>
+<p>The connection will be closed after the response is sent.</p>
+</dd>
+</dl>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}ti</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME request trailer.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}to</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME response trailer.</p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect4">
 <h5 id="og-module-server"><a class="anchor" href="#og-module-server"></a><a class="link" href="#og-module-server">Module <code>server</code></a></h5>
 <div class="paragraph">
 <p>The <code>server</code> module provides generic server support, and configures generic HTTP properties that apply to all HTTP protocols, the scheduler properties and the server specific properties.</p>
@@ -4148,7 +4586,7 @@
 </td>
 <td class="content">
 <div class="paragraph">
-<p>The <code>server</code> module configures the shared parameters for generic HTTP handline, but does not enable any specific network protocol.  You have to explicitly enable the protocols you want to support by enabling, for example, the <a href="#og-module-http"><code>http</code> module</a> for clear-text HTTP/1.1 support, or the <a href="#og-module-http2"><code>http2</code> module</a> for secure HTTP/2 support, etc.</p>
+<p>The <code>server</code> module configures the shared parameters for generic HTTP handling, but does not enable any specific network protocol.  You have to explicitly enable the protocols you want to support by enabling, for example, the <a href="#og-module-http"><code>http</code> module</a> for clear-text HTTP/1.1 support, or the <a href="#og-module-http2"><code>http2</code> module</a> for secure HTTP/2 support, etc.</p>
 </div>
 <div class="paragraph">
 <p>See also the <a href="#og-protocols">protocols section</a> for more information about the supported protocols.</p>
@@ -4160,7 +4598,7 @@
 <div class="sect5">
 <h6 id="og-module-server-http-config"><a class="anchor" href="#og-module-server-http-config"></a><a class="link" href="#og-module-server-http-config">HTTP Configuration Properties</a></h6>
 <div class="paragraph">
-<p>The module properties to configure generic HTTP properties are listed below. Mostly they frequently apply to both HTTP/1 and HTTP/2, but some parameters are version specific:</p>
+<p>The module properties to configure generic HTTP properties are listed below. Mostly they frequently apply to HTTP/1, HTTP/2 and HTTP/3, but some parameters are version specific:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -4226,7 +4664,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">HTTP/1.1 200 OK
 Content-Length: 0
-Server: Jetty(10.0.7)</code></pre>
+Server: Jetty(10.0.8)</code></pre>
 </div>
 </div>
 </dd>
@@ -4632,17 +5070,19 @@
 [files]
 maven://org.bouncycastle/bcpkix-jdk15on/${bouncycastle.version}|lib/bouncycastle/bcpkix-jdk15on-${bouncycastle.version}.jar
 maven://org.bouncycastle/bcprov-jdk15on/${bouncycastle.version}|lib/bouncycastle/bcprov-jdk15on-${bouncycastle.version}.jar
+maven://org.bouncycastle/bcutil-jdk15to18/${bouncycastle.version}|lib/bouncycastle/bcutil-jdk15on-${bouncycastle.version}.jar
 
 [lib]
 lib/jetty-keystore-${jetty.version}.jar
 lib/bouncycastle/bcpkix-jdk15on-${bouncycastle.version}.jar
 lib/bouncycastle/bcprov-jdk15on-${bouncycastle.version}.jar
+lib/bouncycastle/bcutil-jdk15on-${bouncycastle.version}.jar
 
 [xml]
 etc/jetty-test-keystore.xml
 
 [ini]
-bouncycastle.version?=1.62
+bouncycastle.version?=1.70
 jetty.webapp.addServerClasses+=,${jetty.base.uri}/lib/bouncycastle/
 jetty.sslContext.keyStorePath?=etc/test-keystore.p12
 jetty.sslContext.keyStoreType?=PKCS12
@@ -4718,30 +5158,24 @@
 </div>
 </div>
 <div class="sect4">
-<h5 id="og-module-console-capture"><a class="anchor" href="#og-module-console-capture"></a><a class="link" href="#og-module-console-capture">Module <code>console-capture</code></a></h5>
+<h5 id="og-module-well-known"><a class="anchor" href="#og-module-well-known"></a><a class="link" href="#og-module-well-known">Module <code>well-known</code></a></h5>
 <div class="paragraph">
-<p>The <code>console-capture</code> module captures <code>System.out</code> and <code>System.err</code> output and appends it to a rolling file.</p>
+<p>The <code>well-known</code> Jetty module creates a <code>ResourceHandler</code> deployed at the <code>/.well-known</code> context path which serves files from a directory.
+By default, the directory created at <code>$JETTY_BASE/.well-known</code> is used, but it can be configured from <code>well-known.ini</code> to anywhere in the filesystem.
+Note that the <code>.well-known</code> directory may be seen as a hidden directory by the filesystem.</p>
 </div>
 <div class="paragraph">
-<p>The file is rolled every day at the midnight of the configured timezone.
-Old, rolled files are kept for the number of days specified by the <code>jetty.console-capture.retainDays</code> property.</p>
+<p>The concept of well-known URIs has been defined in <a href="https://datatracker.ietf.org/doc/html/rfc5785">RFC5785</a>.
+This module can be used for things like the automatic renewal of <a href="https://letsencrypt.org/">Let&#8217;s Encrypt</a> certificates.
+See <a href="https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml">IANA Well-Known URIs</a> for more possible examples of how this can be used.</p>
 </div>
 <div class="paragraph">
 <p>The module properties are:</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>## Logging directory (relative to $JETTY_BASE).
-# jetty.console-capture.dir=./logs
-
-## Whether to append to existing file.
-# jetty.console-capture.append=true
-
-## How many days to retain old log files.
-# jetty.console-capture.retainDays=90
-
-## Timezone ID of the log timestamps, as specified by java.time.ZoneId.
-# jetty.console-capture.timezone=GMT</pre>
+<pre>## Well Known Directory (relative to $JETTY_BASE if relative path, otherwise it is an absolute path).
+# jetty.wellknown.dir=.well-known</pre>
 </div>
 </div>
 </div>
@@ -5401,7 +5835,7 @@
 <p>Note that the <code>http</code> Jetty module depends on the <code>server</code> Jetty module.</p>
 </div>
 <div class="paragraph">
-<p>Some parameters that you may want to configure are in fact common HTTP parameters that are applied not only for clear-text HTTP/1.1, but also for secure HTTP/1.1 or for clear-text HTTP/2 or for encrypted HTTP/2, and these configuration parameters may be present in the <code>server</code> module configuration file.</p>
+<p>Some parameters that you may want to configure are in fact common HTTP parameters that are applied not only for clear-text HTTP/1.1, but also for secure HTTP/1.1 or for clear-text HTTP/2 or for encrypted HTTP/2, or for HTTP/3, and these configuration parameters may be present in the <code>server</code> module configuration file.</p>
 </div>
 <div class="paragraph">
 <p>You can force the creation of the <code>server.ini</code> file via:</p>
@@ -5498,8 +5932,9 @@
 <div class="content">
 <pre class="CodeRay highlight nowrap"><code>INFO  : test-keystore   initialized in ${jetty.base}/start.d/test-keystore.ini
 INFO  : mkdir ${jetty.base}/lib/bouncycastle
-INFO  : copy /path/to/maven.repository/org/bouncycastle/bcpkix-jdk15on/1.62/bcpkix-jdk15on-1.62.jar to ${jetty.base}/lib/bouncycastle/bcpkix-jdk15on-1.62.jar
-INFO  : copy /path/to/maven.repository/org/bouncycastle/bcprov-jdk15on/1.62/bcprov-jdk15on-1.62.jar to ${jetty.base}/lib/bouncycastle/bcprov-jdk15on-1.62.jar
+INFO  : copy /path/to/maven.repository/org/bouncycastle/bcpkix-jdk15on/1.70/bcpkix-jdk15on-1.70.jar to ${jetty.base}/lib/bouncycastle/bcpkix-jdk15on-1.70.jar
+INFO  : copy /path/to/maven.repository/org/bouncycastle/bcprov-jdk15on/1.70/bcprov-jdk15on-1.70.jar to ${jetty.base}/lib/bouncycastle/bcprov-jdk15on-1.70.jar
+INFO  : copy /path/to/maven.repository/org/bouncycastle/bcutil-jdk15to18/1.70/bcutil-jdk15to18-1.70.jar to ${jetty.base}/lib/bouncycastle/bcutil-jdk15on-1.70.jar
 INFO  : Base directory was modified</code></pre>
 </div>
 </div>
@@ -5528,11 +5963,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:48:22.408:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
-<strong>2021-10-06 14:48:23.051:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:48:23.160:</strong>INFO :oejus.SslContextFactory:main: x509=X509@7975d1d8(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@24105dc5[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
-<strong>2021-10-06 14:48:23.267:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@5c45d770<mark>{SSL, (ssl, http/1.1)}{0.0.0.0:8443}</mark>
-<strong>2021-10-06 14:48:23.282:</strong>INFO :oejs.Server:main: Started Server@72c8e7b{STARTING}[10.0.7,sto=5000] @1919ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:16.030:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 11:50:16.359:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:16.413:</strong>INFO :oejus.SslContextFactory:main: x509=X509@2f4205be(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@544820b7[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 11:50:16.467:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@41e350f1<mark>{SSL, (ssl, http/1.1)}{0.0.0.0:8443}</mark>
+<strong>2022-02-07 11:50:16.477:</strong>INFO :oejs.Server:main: Started Server@10b9db7b{STARTING}[10.0.8,sto=5000] @1082ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5587,7 +6022,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-e2488cc783b3434076c5a44ee7f19a2b.png" alt="Diagram" width="376" height="420">
+<img src="images/diag-e2488cc783b3434076c5a44ee7f19a2b.png" alt="Diagram" width="372" height="417">
 </div>
 </div>
 <div class="paragraph">
@@ -5595,7 +6030,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png" alt="Diagram" width="413" height="420">
+<img src="images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png" alt="Diagram" width="407" height="417">
 </div>
 </div>
 <div class="paragraph">
@@ -5613,7 +6048,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png" alt="Diagram" width="135" height="284">
+<img src="images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png" alt="Diagram" width="133" height="284">
 </div>
 </div>
 <div class="paragraph">
@@ -5621,7 +6056,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-70817cc5c7137abc9759cdcd3edbb658.png" alt="Diagram" width="219" height="397">
+<img src="images/diag-70817cc5c7137abc9759cdcd3edbb658.png" alt="Diagram" width="216" height="397">
 </div>
 </div>
 <div class="paragraph">
@@ -5629,7 +6064,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-2830e38460d606111888c5df2a645163.png" alt="Diagram" width="332" height="623">
+<img src="images/diag-2830e38460d606111888c5df2a645163.png" alt="Diagram" width="328" height="623">
 </div>
 </div>
 </div>
@@ -5683,11 +6118,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:48:25.851:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
-<strong>2021-10-06 14:48:26.408:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:48:26.537:</strong>INFO :oejus.SslContextFactory:main: x509=X509@7bf3a5d8(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@39b43d60[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
-<strong>2021-10-06 14:48:26.664:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@414cb560<mark>{SSL, (ssl, alpn, h2, http/1.1)}{0.0.0.0:8443}</mark>
-<strong>2021-10-06 14:48:26.681:</strong>INFO :oejs.Server:main: Started Server@730d2164{STARTING}[10.0.7,sto=5000] @1930ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:17.934:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 11:50:18.304:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:18.364:</strong>INFO :oejus.SslContextFactory:main: x509=X509@72ea6193(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@2a2c13a8[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 11:50:18.407:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@485a3466<mark>{SSL, (ssl, alpn, h2, http/1.1)}{0.0.0.0:8443}</mark>
+<strong>2022-02-07 11:50:18.415:</strong>INFO :oejs.Server:main: Started Server@3d97a632{STARTING}[10.0.8,sto=5000] @1158ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5739,9 +6174,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:48:28.384:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:48:28.443:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@40e233c3<mark>{HTTP/1.1, (http/1.1, h2c)}{0.0.0.0:8080}</mark>
-<strong>2021-10-06 14:48:28.458:</strong>INFO :oejs.Server:main: Started Server@45b9a632{STARTING}[10.0.7,sto=5000] @874ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:19.479:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:19.508:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@305ffe9e<mark>{HTTP/1.1, (http/1.1, h2c)}{0.0.0.0:8080}</mark>
+<strong>2022-02-07 11:50:19.515:</strong>INFO :oejs.Server:main: Started Server@4659191b{STARTING}[10.0.8,sto=5000] @505ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5801,13 +6236,76 @@
 </div>
 </div>
 <div class="sect3">
+<h4 id="og-protocols-http3"><a class="anchor" href="#og-protocols-http3"></a><a class="link" href="#og-protocols-http3">HTTP/3</a></h4>
+<div class="paragraph">
+<p>When you enable support for the HTTP/3 protocol, by default the secure HTTP/2 protocol is also enabled, so that browsers or clients that do not support HTTP/3 will be able to connect to your server.</p>
+</div>
+<div class="paragraph">
+<p>You need to enable:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>ssl</code> Jetty module, which provides the KeyStore and TLS configuration</p>
+</li>
+<li>
+<p>the <code>http3</code> Jetty module, which adds the HTTP/3 protocol on the HTTP/3 connector</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Use the following command (issued from within the <code>$JETTY_BASE</code> directory):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --add-modules=ssl,http3</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Enabling any module Jetty module that supports secure network communication requires a valid KeyStore (read <a href="#og-keystore">this section</a> to create your own KeyStore), that, as a quick example, you can enable with the <a href="#og-module-test-keystore"><code>test-keystore</code> module</a>, that creates on-the-fly a KeyStore containing a self-signed certificate:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --add-modules=test-keystore</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Starting Jetty yields:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar</pre>
+</div>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:20.759:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 11:50:21.085:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:21.143:</strong>INFO :oejus.SslContextFactory:main: x509=X509@26425897(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@56a4479a[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 11:50:21.182:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@71984c3{SSL, (ssl, alpn, h2)}{0.0.0.0:8443}
+<strong>2022-02-07 11:50:21.183:</strong>INFO :oejhs.HTTP3ServerConnector:main: HTTP/3+QUIC support is experimental and not suited for production use.
+<strong>2022-02-07 11:50:21.183:</strong>INFO :oejs.AbstractConnector:main: Started HTTP3ServerConnector@2364305a<mark>{h3, (h3)}{0.0.0.0:8444}</mark>
+<strong>2022-02-07 11:50:21.223:</strong>INFO :oejs.Server:main: Started Server@23d1e5d0{STARTING}[10.0.8,sto=5000] @1077ms</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note how Jetty is listening on port <code>8443</code> for HTTP/2 and on port <code>8444</code> for HTTP/3.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 protocol parameters can be configured by editing the <a href="#og-module-http3"><code>http3</code> module</a> properties.</p>
+</div>
+</div>
+<div class="sect3">
 <h4 id="og-protocols-ssl"><a class="anchor" href="#og-protocols-ssl"></a><a class="link" href="#og-protocols-ssl">Configuring Secure Protocols</a></h4>
 <div class="paragraph">
 <p>Secure protocols are normal protocols such as HTTP/1.1, HTTP/2 or WebSocket that are wrapped by the <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS protocol</a>.
-Any network protocol can be wrapped with TLS.</p>
+Any network protocol based on TCP can be wrapped with TLS.</p>
 </div>
 <div class="paragraph">
-<p>The <code>https</code> scheme used in URIs really means <code>tls+http/1.1</code> (or <code>tls+http/2</code>) and similarly the <code>wss</code> scheme used in URIs really means <code>tls+websocket</code>, etc.
+<p>QUIC, the protocol based on UDP that transports HTTP/3, uses TLS messages but not the TLS protocol framing.</p>
+</div>
+<div class="paragraph">
+<p>The <code>https</code> scheme used in URIs really means <code>tls+http/1.1</code> (or <code>tls+http/2</code>, or <code>quic+http/3</code>) and similarly the <code>wss</code> scheme used in URIs really means <code>tls+websocket</code>, etc.
 Senders wrap the underlying protocol bytes (e.g. HTTP bytes or WebSocket bytes) with the TLS protocol, while receivers first interpret the TLS protocol to obtain the underlying protocol bytes, and then interpret the wrapped bytes.</p>
 </div>
 <div class="paragraph">
@@ -6073,7 +6571,7 @@
 <p>Whether SNI is required at the TLS level, defaults to <code>false</code>.
 Its behavior is explained by the following table:</p>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 1. Behavior of the <code>jetty.sslContext.sniRequired</code> property</caption>
+<caption class="title">Table 2. Behavior of the <code>jetty.sslContext.sniRequired</code> property</caption>
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -6158,7 +6656,7 @@
 <p>Whether SNI is required at the HTTP level, defaults to <code>false</code>.
 Its behavior is similar to the <code>jetty.sslContext.sniRequired</code> property above, and is explained by the following table:</p>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 2. Behavior of the <code>jetty.ssl.sniRequired</code> property</caption>
+<caption class="title">Table 3. Behavior of the <code>jetty.ssl.sniRequired</code> property</caption>
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -6225,7 +6723,7 @@
 <p>Whether the certificate sent to the client matches the <code>Host</code> header, defaults to <code>true</code>.
 Its behavior is explained by the following table:</p>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 3. Behavior of the <code>jetty.ssl.sniHostCheck</code> property</caption>
+<caption class="title">Table 4. Behavior of the <code>jetty.ssl.sniHostCheck</code> property</caption>
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -6444,9 +6942,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:48:31.734:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:48:31.784:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@bef2d72<mark>{[proxy], ([proxy], http/1.1)}{0.0.0.0:8080}</mark>
-<strong>2021-10-06 14:48:31.797:</strong>INFO :oejs.Server:main: Started Server@b62fe6d{STARTING}[10.0.7,sto=5000] @815ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:23.070:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:23.096:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@1cf6d1be<mark>{[proxy], ([proxy], http/1.1)}{0.0.0.0:8080}</mark>
+<strong>2022-02-07 11:50:23.102:</strong>INFO :oejs.Server:main: Started Server@3232a28a{STARTING}[10.0.8,sto=5000] @446ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -6488,11 +6986,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 14:48:34.697:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
-<strong>2021-10-06 14:48:35.293:</strong>INFO :oejs.Server:main: jetty-10.0.7; built: 2021-10-06T19:34:02.766Z; git: da8a4553af9dd84080931fa0f8c678cd2d60f3d9; jvm 17+35
-<strong>2021-10-06 14:48:35.409:</strong>INFO :oejus.SslContextFactory:main: x509=X509@7d7758be(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@5f9edf14[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
-<strong>2021-10-06 14:48:35.520:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@332729ad<mark>{[proxy], ([proxy], ssl, http/1.1)}{0.0.0.0:8443}</mark>
-<strong>2021-10-06 14:48:35.535:</strong>INFO :oejs.Server:main: Started Server@4d14b6c2{STARTING}[10.0.7,sto=5000] @1882ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 11:50:24.813:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 11:50:25.179:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:25.237:</strong>INFO :oejus.SslContextFactory:main: x509=X509@6955cb39(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@5f7b97da[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 11:50:25.279:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@1ef3efa8<mark>{[proxy], ([proxy], ssl, http/1.1)}{0.0.0.0:8443}</mark>
+<strong>2022-02-07 11:50:25.287:</strong>INFO :oejs.Server:main: Started Server@4a194c39{STARTING}[10.0.8,sto=5000] @1052ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -9477,7 +9975,7 @@
 <p>There are many configuration parameters for the Apache Jasper JSP Servlet, here are some of them:</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 4. JSP Servlet Parameters</caption>
+<caption class="title">Table 5. JSP Servlet Parameters</caption>
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -11147,7 +11645,7 @@
 <p>This configuration is useful when you develop and test your Jetty server locally.</p>
 </div>
 <div class="paragraph">
-<p>JMX compliant tools such as <a href="https://adoptopenjdk.net/jmc.html">Java Mission Control (JMC)</a> can be started locally on your machine and can attach to other JVMs running on your machine, showing you the registered MBeans among which you will find the Jetty MBeans.</p>
+<p>JMX compliant tools such as <a href="https://adoptium.net/jmc.html">Java Mission Control (JMC)</a> can be started locally on your machine and can attach to other JVMs running on your machine, showing you the registered MBeans among which you will find the Jetty MBeans.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -11507,7 +12005,7 @@
 <p>JMX compliant tools that offer a graphical user interface also must be started specifying the TrustStore path and password.</p>
 </div>
 <div class="paragraph">
-<p>For example, to launch <a href="https://adoptopenjdk.net/jmc.html">Java Mission Control (JMC)</a>:</p>
+<p>For example, to launch <a href="https://adoptium.net/jmc.html">Java Mission Control (JMC)</a>:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -11662,7 +12160,7 @@
 </td>
 <td class="content">
 <div class="paragraph">
-<p>The <code>console-capture</code> Jetty module should be used only in conjunction with the <code>logging-jetty</code> module, as other SLF4J bindings such as LogBack or Log4J2 have their own, more sophisticated, rolling file appenders.</p>
+<p>The <code>console-capture</code> Jetty module should be used only in conjunction with the <code>logging-jetty</code> module, as other SLF4J bindings such as LogBack or Log4j2 have their own, more sophisticated, rolling file appenders.</p>
 </div>
 </td>
 </tr>
@@ -11682,10 +12180,10 @@
 <p><code>logging-logback</code>, to use the <a href="http://logback.qos.ch/">LogBack</a> binding</p>
 </li>
 <li>
-<p><code>logging-log4j2</code>, to use the <a href="https://logging.apache.org/log4j/2.x/">Log4J2</a> binding</p>
+<p><code>logging-log4j2</code>, to use the <a href="https://logging.apache.org/log4j/2.x/">Log4j2</a> binding</p>
 </li>
 <li>
-<p><code>logging-log4j1</code>, to use the <a href="https://logging.apache.org/log4j/1.2/">Log4J1</a> binding (note that Log4J 1.x is end-of-life)</p>
+<p><code>logging-log4j1</code>, to use the <a href="https://logging.apache.org/log4j/1.2/">Log4j1</a> binding (note that Log4j 1.x is end-of-life)</p>
 </li>
 <li>
 <p><code>logging-jul</code>, to use the <code>java.util.logging</code> binding</p>
@@ -11729,7 +12227,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="og-logging-server-custom-log4j2"><a class="anchor" href="#og-logging-server-custom-log4j2"></a><a class="link" href="#og-logging-server-custom-log4j2">Logging with Log4J2</a></h6>
+<h6 id="og-logging-server-custom-log4j2"><a class="anchor" href="#og-logging-server-custom-log4j2"></a><a class="link" href="#og-logging-server-custom-log4j2">Logging with Log4j2</a></h6>
 <div class="paragraph">
 <p>Similarly to <a href="#og-logging-server-custom-logback">logging with LogBack</a>, you can enable the <code>logging-log4j2</code> Jetty module in this way (from the <code>$JETTY_BASE</code> directory):</p>
 </div>
@@ -11739,7 +12237,7 @@
 </div>
 </div>
 <div class="paragraph">
-<p>After accepting the Log4J2 license, you will have the following directory structure:</p>
+<p>After accepting the Log4j2 license, you will have the following directory structure:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -11757,7 +12255,7 @@
 </div>
 </div>
 <div class="paragraph">
-<p>The Jetty module system downloaded the required Log4J2 <code>*.jar</code> files, and created a <code>$JETTY_BASE/resources/log4j2.xml</code> file that you can configure to customize your Log4J2 logging.</p>
+<p>The Jetty module system downloaded the required Log4j2 <code>*.jar</code> files, and created a <code>$JETTY_BASE/resources/log4j2.xml</code> file that you can configure to customize your Log4j2 logging.</p>
 </div>
 </div>
 </div>
@@ -11792,7 +12290,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png" alt="Diagram" width="686" height="174">
+<img src="images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png" alt="Diagram" width="685" height="174">
 </div>
 </div>
 <div class="paragraph">
@@ -11805,7 +12303,70 @@
 <div class="sect3">
 <h4 id="og-logging-request"><a class="anchor" href="#og-logging-request"></a><a class="link" href="#og-logging-request">Request Logging</a></h4>
 <div class="paragraph">
-<p>TODO</p>
+<p>HTTP requests and responses can be logged to provide data that can be later analyzed with other tools, that can provide information such as the most frequently accessed request URIs, the response status codes, the request/response content lengths, geographical information about the clients, etc.</p>
+</div>
+<div class="paragraph">
+<p>Request logging is enabled by enabling the <code>requestlog</code> Jetty module.
+In the example below, both the <code>http</code> Jetty module and the <code>requestlog</code> module are enabled, so that you can make HTTP requests to the server and have them logged:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ cd $JETTY_BASE
+$ java -jar $JETTY_HOME/start.jar --add-modules=http,requestlog</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>$JETTY_BASE</code> directory looks like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>$JETTY_BASE
+├── logs
+├── resources
+│   └── jetty-logging.properties
+└── start.d
+    ├── http.ini
+    └── requestlog.ini</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>$JETTY_BASE/start.d/requestlog.ini</code> file is the Jetty module configuration file that allows you to configure the <code>requestlog</code> module, see <a href="#og-module-requestlog">this section</a> for more details.</p>
+</div>
+<div class="paragraph">
+<p>By default the <code>requestlog</code> Jetty module produces the <code>$JETTY_BASE/logs/yyyy_MM_dd.request.log</code>, where the pattern <code>yyyy_MM_dd</code> is replaced with the current date, for example <code>2020_01_31</code>.</p>
+</div>
+<div class="paragraph">
+<p>The format of the request log lines is the result of a <em>format string</em> that uses formatting symbols to log relevant request/response data.</p>
+</div>
+<div class="paragraph">
+<p>The default format is the <a href="https://en.wikipedia.org/wiki/Common_Log_Format">NCSA Format</a> extended with referrer data and user-agent data.
+A typical log line looks like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight nowrap"><code>192.168.0.100 - - [31/Jan/2020:20:30:40 +0000] &quot;GET / HTTP/1.1&quot; 200 6789 &quot;-&quot; &quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36&quot;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The line above (that uses fake values) shows <code>192.168.0.100</code> for the client IP address, a hard-coded <code>-</code> for the identity, <code>-</code> for the authenticated user name, <code>[31/Jan/2020:20:30:40 +0000]</code> for the date and time with timezone, <code>"GET / HTTP/1.1"</code> for the HTTP request line, <code>200</code> for the HTTP response status code, <code>6789</code> for the HTTP response content length, <code>"-"</code> for the referrer and <code>"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"</code> for the user-agent.</p>
+</div>
+<div class="paragraph">
+<p>The format string can be customized as described in <a href="#og-module-requestlog">this section</a>.
+Request log files are rolled every day, and retained for customizable number of days, by default 90 days.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>When Jetty is behind a load balancer, you want to log the remote client IP address, not the load balancer IP address. Refer to <a href="#og-protocols-proxy">this section</a> to configure the load balancer and Jetty to retain the remote client IP address information.</p>
+</div>
+</td>
+</tr>
+</table>
 </div>
 </div>
 </div>
@@ -11953,287 +12514,298 @@
 </div>
 <div class="listingblock small">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code>Server@6295d394{STARTING}[10.0.7,sto=5000] - STARTING <i class="conum" data-value="1"></i><b>(1)</b>
-+= QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@57c758ac{reserved=0/8,pending=0}] - STARTED <i class="conum" data-value="2"></i><b>(2)</b>
-|  +- org.eclipse.jetty.util.thread.ThreadPoolBudget@a9cd3b1
-|  += ReservedThreadExecutor@57c758ac{reserved=0/8,pending=0} - STARTED
+<pre class="CodeRay highlight nowrap"><code>Server@5fbdfdcf{STARTING}[10.0.8,sto=5000] - STARTING <i class="conum" data-value="1"></i><b>(1)</b>
++= QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}] - STARTED <i class="conum" data-value="2"></i><b>(2)</b>
+|  +- org.eclipse.jetty.util.thread.ThreadPoolBudget@2767e23c
+|  += ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0} - STARTED
 |  |  +&gt; threads size=0
 |  +&gt; threads size=4
-|     +&gt; qtp143110009-18 TIMED_WAITING tid=18 prio=5 IDLE
-|     +&gt; qtp143110009-15 RUNNABLE tid=15 prio=5 SELECTING
-|     +&gt; qtp143110009-16 TIMED_WAITING tid=16 prio=5 IDLE
-|     +&gt; qtp143110009-17-acceptor-0@6a61babe-ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} RUNNABLE tid=17 prio=3 ACCEPTING
-+- org.eclipse.jetty.io.ArrayByteBufferPool@21de60b4
-+= ScheduledExecutorScheduler@47db50c5{STARTED} - STARTED
-+= HandlerList@c267ef4{STARTED} - STARTED <i class="conum" data-value="3"></i><b>(3)</b>
-|  += ContextHandlerCollection@30ee2816{STARTED} - STARTED
-|  += DefaultHandler@31d7b7bf{STARTED} - STARTED
-+= ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED <i class="conum" data-value="4"></i><b>(4)</b>
-|  +~ QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@57c758ac{reserved=0/8,pending=0}] - STARTED
-|  +~ ScheduledExecutorScheduler@47db50c5{STARTED} - STARTED
-|  +- org.eclipse.jetty.io.ArrayByteBufferPool@21de60b4
-|  +- org.eclipse.jetty.io.ArrayRetainableByteBufferPool@635eaaf1{min=0,max=65536,buckets=64,heap=0/-1,direct=0/-1}
+|     +&gt; qtp350068407-23 TIMED_WAITING tid=23 prio=5 IDLE
+|     +&gt; qtp350068407-21 RUNNABLE tid=21 prio=5 SELECTING
+|     +&gt; qtp350068407-24-acceptor-0@3f719643-ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} RUNNABLE tid=24 prio=3 ACCEPTING
+|     +&gt; qtp350068407-22 TIMED_WAITING tid=22 prio=5 IDLE
++= AttributeContainerMap@3e08ff24{size=0} - STARTED
++- ArrayByteBufferPool@24569dba{minBufferCapacity=0, maxBufferCapacity=65536, maxQueueLength=-1, factor=1024}
+|  +&gt; java.util.ArrayList@83b907e3(size=4)
+|     +: HeapMemory: 0/2089811968
+|     +: DirectMemory: 0/2089811968
+|     +: Indirect Buckets size=0
+|     +: Direct Buckets size=0
++= ScheduledExecutorScheduler@2362f559{STARTED} - STARTED
++= HandlerList@5ddeb7cb{STARTED} - STARTED <i class="conum" data-value="3"></i><b>(3)</b>
+|  += ContextHandlerCollection@70ed52de{STARTED} - STARTED
+|  += DefaultHandler@496bc455{STARTED} - STARTED
++= ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED <i class="conum" data-value="4"></i><b>(4)</b>
+|  +~ QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}] - STARTED
+|  +~ ScheduledExecutorScheduler@2362f559{STARTED} - STARTED
+|  +- ArrayByteBufferPool@24569dba{minBufferCapacity=0, maxBufferCapacity=65536, maxQueueLength=-1, factor=1024}
+|  |  +&gt; java.util.ArrayList@83b907e3(size=4)
+|  |     +: HeapMemory: 0/2089811968
+|  |     +: DirectMemory: 0/2089811968
+|  |     +: Indirect Buckets size=0
+|  |     +: Direct Buckets size=0
+|  +- org.eclipse.jetty.io.ArrayRetainableByteBufferPool@59402b8f{min=0,max=65536,buckets=64,heap=0/-1,direct=0/-1}
 |  |  +&gt; direct size=64
-|  |  |  +&gt; Bucket@5c30a9b0[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7188af83[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3f197a46[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
+|  |  |  +&gt; Bucket@303cf2ba[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@636be97c[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
+|  |  |  +&gt; Bucket@76494737[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@50a638b5[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4a003cbe[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1817d444[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4082ba93[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@6ca8564a[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
+|  |  |  +&gt; Bucket@17fc391b[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@50b472aa[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
+|  |  |  +&gt; Bucket@2b30a42c[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@31368b99[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
+|  |  |  +&gt; Bucket@609e8838[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1725dc0f[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
+|  |  |  +&gt; Bucket@359df09a[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3911c2a7[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
+|  |  |  +&gt; Bucket@43df23d3[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@4ac3c60d[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6d60fe40[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@4facf68f[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
+|  |  |  +&gt; Bucket@792b749c[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@76508ed1[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
+|  |  |  +&gt; Bucket@23e84203[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@41e36e46[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
+|  |  |  +&gt; Bucket@19932c16[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@15c43bd9[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
+|  |  |  +&gt; Bucket@73eb439a[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3d74bf60[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
+|  |  |  +&gt; Bucket@514646ef[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@4f209819[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
+|  |  |  +&gt; Bucket@305ffe9e[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@15eb5ee5[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
+|  |  |  +&gt; Bucket@302c971f[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2145b572[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
+|  |  |  +&gt; Bucket@1972e513[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@39529185[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7ae0a9ec[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@72f926e6[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
+|  |  |  +&gt; Bucket@35841320[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3daa422a[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
+|  |  |  +&gt; Bucket@61c4eee0[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@31c88ec8[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6f10d5b6[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1cbbffcd[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
+|  |  |  +&gt; Bucket@1040be71[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@27ce24aa[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
+|  |  |  +&gt; Bucket@548a24a[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@481a996b[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
+|  |  |  +&gt; Bucket@433defed[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3d51f06e[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
+|  |  |  +&gt; Bucket@2a693f59[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7ed7259e[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
+|  |  |  +&gt; Bucket@3f4faf53[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@28eaa59a[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7fd50002[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3427b02d[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
+|  |  |  +&gt; Bucket@533bda92[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@647e447[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
+|  |  |  +&gt; Bucket@304bb45b[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@41fbdac4[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
+|  |  |  +&gt; Bucket@723ca036[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3c407114[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
+|  |  |  +&gt; Bucket@25be7b63[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@35ef1869[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
+|  |  |  +&gt; Bucket@28dcca0c[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@c33b74f[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
+|  |  |  +&gt; Bucket@45d84a20[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@130161f7[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
+|  |  |  +&gt; Bucket@52f27fbd[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2c767a52[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4c163e3[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@619713e5[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4a8355dd[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@708f5957[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4d0d9fe7[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@68999068[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
+|  |  |  +&gt; Bucket@c430e6c[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7722c3c3[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
+|  |  |  +&gt; Bucket@312aa7c[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2ef3eef9[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
+|  |  |  +&gt; Bucket@536f2a7e[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@243c4f91[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
+|  |  |  +&gt; Bucket@72bc6553[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@291ae[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
+|  |  |  +&gt; Bucket@66982506[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@61df66b6[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
+|  |  |  +&gt; Bucket@70cf32e3[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@50eac852[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5a59ca5e[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@16ec5519[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4bdeaabb[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2f7298b[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6c4906d3[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@188715b5[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
+|  |  |  +&gt; Bucket@65987993[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1ea9f6af[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
+|  |  |  +&gt; Bucket@71075444[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@6a192cfe[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4f32a3ad[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@5119fb47[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6b695b06[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7193666c[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4d1bf319[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@20deea7f[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6f53b8a[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3835c46[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5c80cf32[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1dde4cb2[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7d900ecf[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7714e963[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6f01b95f[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@20ce78ec[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4007f65e[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@393671df[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
+|  |  |  +&gt; Bucket@1a245833[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@56620197[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
+|  |  |  +&gt; Bucket@673fdbce[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@6eda5c9[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5965d37[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@55b7a4e0[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7a5ceedd[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@5f058f00[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4201c465[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@192d43ce[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5b799640[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
 |  |  |     +&gt; entries size=0
 |  |  +&gt; indirect size=64
-|  |     +&gt; Bucket@72057ecf[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
+|  |     +&gt; Bucket@6cb107fd[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1afd44cb[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
+|  |     +&gt; Bucket@710636b0[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6973b51b[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
+|  |     +&gt; Bucket@3de8f619[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1ab3a8c8[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
+|  |     +&gt; Bucket@2ab4bc72[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@43195e57[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
+|  |     +&gt; Bucket@4e5ed836[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@333291e3[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
+|  |     +&gt; Bucket@eadd4fb[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@479d31f3[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
+|  |     +&gt; Bucket@740fb309[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@40ef3420[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
+|  |     +&gt; Bucket@7bd7d6d6[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@498d318c[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
+|  |     +&gt; Bucket@43f02ef2[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6e171cd7[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
+|  |     +&gt; Bucket@239a307b[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@402bba4f[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
+|  |     +&gt; Bucket@2a8448fa[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@795cd85e[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
+|  |     +&gt; Bucket@6f204a1a[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@59fd97a8[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
+|  |     +&gt; Bucket@2de56eb2[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@f5ac9e4[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
+|  |     +&gt; Bucket@5f8e8a9d[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@123ef382[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
+|  |     +&gt; Bucket@5745ca0e[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@dbf57b3[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
+|  |     +&gt; Bucket@3ad83a66[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@384ad17b[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
+|  |     +&gt; Bucket@3cce5371[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@61862a7f[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
+|  |     +&gt; Bucket@17bffc17[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@441772e[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
+|  |     +&gt; Bucket@6e535154[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@7334aada[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
+|  |     +&gt; Bucket@15a34df2[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1d9b7cce[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
+|  |     +&gt; Bucket@5b38c1ec[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4d9e68d0[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
+|  |     +&gt; Bucket@338fc1d8[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@42e99e4a[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
+|  |     +&gt; Bucket@4722ef0c[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@14dd9eb7[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
+|  |     +&gt; Bucket@48e1f6c7[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@52e6fdee[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
+|  |     +&gt; Bucket@55cb6996[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6c80d78a[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
+|  |     +&gt; Bucket@1807e3f6[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@62150f9e[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
+|  |     +&gt; Bucket@480d3575[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1a451d4d[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
+|  |     +&gt; Bucket@f1da57d[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@7fa98a66[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
+|  |     +&gt; Bucket@194fad1[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@15ff3e9e[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
+|  |     +&gt; Bucket@26abb146[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5fdcaa40[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
+|  |     +&gt; Bucket@72c8e7b[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6dc17b83[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
+|  |     +&gt; Bucket@65f8f5ae[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5e0826e7[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
+|  |     +&gt; Bucket@431cd9b2[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@32eff876[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
+|  |     +&gt; Bucket@38467116[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@8dbdac1[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
+|  |     +&gt; Bucket@5b7a7f33[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6e20b53a[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
+|  |     +&gt; Bucket@790da477[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@71809907[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
+|  |     +&gt; Bucket@5c7933ad[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@3ce1e309[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
+|  |     +&gt; Bucket@57bc27f5[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6aba2b86[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
+|  |     +&gt; Bucket@5fb759d6[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@158da8e[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
+|  |     +&gt; Bucket@4b8d604b[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@74e52303[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
+|  |     +&gt; Bucket@5e7cd6cc[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@47af7f3d[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
+|  |     +&gt; Bucket@68c9d179[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@7c729a55[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
+|  |     +&gt; Bucket@d554c5f[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@3bb9a3ff[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
+|  |     +&gt; Bucket@2dfaea86[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@661972b0[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
+|  |     +&gt; Bucket@15888343[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5af3afd9[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
+|  |     +&gt; Bucket@33ecda92[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@323b36e0[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
+|  |     +&gt; Bucket@14fc5f04[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@44ebcd03[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
+|  |     +&gt; Bucket@6e2829c7[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@694abbdc[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
+|  |     +&gt; Bucket@3feb2dda[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@2e005c4b[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
+|  |     +&gt; Bucket@6a8658ff[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4567f35d[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
+|  |     +&gt; Bucket@1c742ed4[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5ffead27[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
+|  |     +&gt; Bucket@333d4a8c[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6356695f[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
+|  |     +&gt; Bucket@55de24cc[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4f18837a[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
+|  |     +&gt; Bucket@dc7df28[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@359f7cdf[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
+|  |     +&gt; Bucket@30f842ca[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1fa268de[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
+|  |     +&gt; Bucket@69c81773[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4f6ee6e4[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
+|  |     +&gt; Bucket@4d14b6c2[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4466af20[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
+|  |     +&gt; Bucket@7e990ed7[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@a514af7[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
+|  |     +&gt; Bucket@c05fddc[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6b927fb[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
+|  |     +&gt; Bucket@25df00a0[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@3e58a80e[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
+|  |     +&gt; Bucket@4d15107f[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4fb61f4a[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
+|  |     +&gt; Bucket@7b4c50bc[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4fb0f2b9[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
+|  |     +&gt; Bucket@5884a914[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@79924b[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
+|  |     +&gt; Bucket@50378a4[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
 |  |        +&gt; entries size=0
-|  +- org.eclipse.jetty.server.AbstractConnector$1@7b9a4292
-|  += HttpConnectionFactory@62e136d3[HTTP/1.1] - STARTED
-|  |  +- HttpConfiguration@9f116cc{32768/8192,8192/8192,https://:0,[]}
+|  +- org.eclipse.jetty.server.AbstractConnector$1@60f00693
+|  += HttpConnectionFactory@69e1dd28[HTTP/1.1] - STARTED
+|  |  +- HttpConfiguration@34bde49d{32768/8192,8192/8192,https://:0,[]}
 |  |     +&gt; customizers size=0
 |  |     +&gt; formEncodedMethods size=2
 |  |     |  +&gt; POST
@@ -12254,39 +12826,39 @@
 |  |     +&gt; maxErrorDispatches=10
 |  |     +&gt; minRequestDataRate=0
 |  |     +&gt; minResponseDataRate=0
-|  |     +&gt; requestCookieCompliance=org.eclipse.jetty.http.CookieCompliance@67d48005
-|  |     +&gt; responseCookieCompliance=org.eclipse.jetty.http.CookieCompliance@67d48005
+|  |     +&gt; requestCookieCompliance=org.eclipse.jetty.http.CookieCompliance@23f5b5dc
+|  |     +&gt; responseCookieCompliance=org.eclipse.jetty.http.CookieCompliance@23f5b5dc
 |  |     +&gt; notifyRemoteAsyncErrors=true
 |  |     +&gt; relativeRedirectAllowed=false
-|  += SelectorManager@ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED
-|  |  += ManagedSelector@5876a9af{STARTED} id=0 keys=0 selected=0 updates=0 - STARTED <i class="conum" data-value="5"></i><b>(5)</b>
-|  |     += AdaptiveExecutionStrategy@7ec7ffd3/SelectorProducer@5b239d7d/PRODUCING/p=false/QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@57c758ac{reserved=0/8,pending=0}][pc=0,pic=0,pec=0,epc=0]@2021-10-06T14:48:38.047619-05:00 - STARTED
-|  |     |  +- SelectorProducer@5b239d7d
-|  |     |  +~ QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@57c758ac{reserved=0/8,pending=0}] - STARTED
-|  |     +&gt; updates @ 2021-10-06T14:48:38.044713-05:00 size=0
-|  |     +&gt; keys @ 2021-10-06T14:48:38.04669-05:00 size=0 <i class="conum" data-value="6"></i><b>(6)</b>
-|  +- sun.nio.ch.ServerSocketChannelImpl[/[0:0:0:0:0:0:0:0]:8080]
-|  +- qtp143110009-17-acceptor-0@6a61babe-ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
-+- org.eclipse.jetty.util.component.HaltLifeCycleListener@6572421
-+= ErrorHandler@6b81ce95{STARTED} - STARTED
-+&gt; startJarLoader@28ba21f3 <i class="conum" data-value="7"></i><b>(7)</b>
+|  += SelectorManager@ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED
+|  |  += ManagedSelector@7139992f{STARTED} id=0 keys=0 selected=0 updates=0 - STARTED <i class="conum" data-value="5"></i><b>(5)</b>
+|  |     += AdaptiveExecutionStrategy@69504ae9/SelectorProducer@7dfd3c81/PRODUCING/p=false/QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}][pc=0,pic=0,pec=0,epc=0]@2022-02-07T11:50:26.637221+01:00 - STARTED
+|  |     |  +- SelectorProducer@7dfd3c81
+|  |     |  +~ QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}] - STARTED
+|  |     +&gt; updates @ 2022-02-07T11:50:26.634638+01:00 size=0
+|  |     +&gt; keys @ 2022-02-07T11:50:26.635902+01:00 size=0 <i class="conum" data-value="6"></i><b>(6)</b>
+|  +- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8080]
+|  +- qtp350068407-24-acceptor-0@3f719643-ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
++- org.eclipse.jetty.util.component.HaltLifeCycleListener@2584b82d
++= ErrorHandler@7bbc8656{STARTED} - STARTED
++&gt; startJarLoader@4b553d26 <i class="conum" data-value="7"></i><b>(7)</b>
    +&gt; URLs size=9
    |  +&gt; file:/path/to/jetty.base/resources/
    |  +&gt; file:/path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar
-   |  +&gt; file:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.7.jar
+   |  +&gt; file:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-10.0.8.jar
    |  +&gt; file:/path/to/jetty.home/lib/jetty-servlet-api-4.0.6.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-http-10.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-server-10.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-xml-10.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-util-10.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-io-10.0.7.jar
-   +&gt; jdk.internal.loader.ClassLoaders$AppClassLoader@42110406
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-http-10.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-server-10.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-xml-10.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-util-10.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-io-10.0.8.jar
+   +&gt; jdk.internal.loader.ClassLoaders$AppClassLoader@277050dc
       +&gt; packages size=4
       |  +&gt; package org.eclipse.jetty.start.config
       |  +&gt; package org.eclipse.jetty.start.builders
       |  +&gt; package org.eclipse.jetty.start.shaded.util
       |  +&gt; package org.eclipse.jetty.start
-      +&gt; jdk.internal.loader.ClassLoaders$PlatformClassLoader@3f5f02d7
+      +&gt; jdk.internal.loader.ClassLoaders$PlatformClassLoader@5a7fe64f
          +&gt; packages size=2
             +&gt; package sun.util.resources.provider
             +&gt; package sun.util.resources.cldr.provider
@@ -12412,6 +12984,106 @@
 </div>
 </div>
 </div>
+<div class="sect3">
+<h4 id="og-troubleshooting-debugging"><a class="anchor" href="#og-troubleshooting-debugging"></a><a class="link" href="#og-troubleshooting-debugging">Remote Debugging</a></h4>
+<div class="paragraph">
+<p>The Java Virtual Machines allows remote processes on different hosts to connect for debugging purposes, by using specific command line options.</p>
+</div>
+<div class="admonitionblock caution">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-caution" title="Caution"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>While it is possible to enable remote debugging on a Jetty server, it is typically not recommended for security and performance reasons.
+Only enable remote debugging on a Jetty server as a last resort to troubleshoot issues that could not be troubleshot otherwise.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>You can easily create a custom Jetty module (see <a href="#og-modules-custom">this section</a>) with the following content:</p>
+</div>
+<div class="listingblock">
+<div class="title">remote-debug.mod</div>
+<div class="content">
+<pre>[description]
+Enables remote debugging
+
+[exec]
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>[exec]</code> directive (documented <a href="#og-modules-directive-exec">here</a>) is necessary to pass the <code>-agentlib:jdwp</code> JVM option to the forked JVM that runs Jetty, so that you can attach with a debugger.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The <code>address</code> parameter of the <code>-agentlib:jdwp</code> command line option specifies the network address and port the Jetty JVM listens on for remote debugging.</p>
+</div>
+<div class="paragraph">
+<p>Please refer to the <a href="https://docs.oracle.com/en/java/javase/17/docs/specs/jpda/conninv.html">Java Debug Wire Protocol documentation</a> for additional information about the <code>-agentlib:jdwp</code> command line option and its parameters.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>You can now enable the <code>remote-debug</code> Jetty module with the following command issued from the <code>$JETTY_BASE</code> directory:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --add-modules=server,remote-debug</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The command above minimally adds a Jetty server without connectors (via the <code>server</code> Jetty module) and the <code>remote-debug</code> Jetty module, and produces the following <code>$JETTY_BASE</code> directory structure:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>$JETTY_BASE
+├── modules
+│   └── remote-debug.mod
+├── resources
+│   └── jetty-logging.properties
+└── start.d
+    ├── <mark>remote-debug.ini</mark>
+    └── server.ini</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You can easily disable the <code>remote-debug</code> Jetty module as explained in <a href="#og-start-configure-disable">this section</a>.</p>
+</div>
+<div class="paragraph">
+<p>Alternatively, you can enable the <code>remote-debug</code> module on the command line, as explained in <a href="#og-start-configure-enable-command-line">this section</a>.</p>
+</div>
+<div class="paragraph">
+<p>Starting the Jetty server with the <code>remote-debug</code> module enabled yields:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight nowrap"><code>WARN  : Forking second JVM due to forking module(s): [remote-debug]. Use --dry-run to generate the command line to avoid forking.
+<mark>Listening for transport dt_socket at address: 5005</mark>
+<strong>2022-02-07 11:50:27.744:</strong>INFO :oejs.Server:main: jetty-10.0.8; built: 2022-02-07T10:34:42.299Z; git: 716c7afd8e40d8f645b32aff06945a249d6eb511; jvm 11.0.14+9
+<strong>2022-02-07 11:50:27.771:</strong>INFO :oejs.Server:main: Started Server@4fb0f2b9{STARTING}[10.0.8,sto=5000] @270ms</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note how the JVM is listening on port <code>5005</code> to allow remote debuggers to connect.</p>
+</div>
+<div class="paragraph">
+<p>If you want to avoid to fork a second JVM to pass the <code>-agentlib:jdwp</code> JVM option, please read <a href="#og-start-configure-dry-run">this section</a>.</p>
+</div>
+</div>
 </div>
 <div class="sect2">
 <h3 id="og-xml"><a class="anchor" href="#og-xml"></a><a class="link" href="#og-xml">Jetty XML</a></h3>
@@ -12950,8 +13622,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 10.0.7<br>
-Last updated 2021-10-06 12:51:45 -0500
+Version 10.0.8<br>
+Last updated 2022-02-01 18:50:48 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache
index 5c382db..9a04f9f 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache
@@ -1 +1 @@
-{"checksum":"05cfcead1245ff0fbcf3af8873998cee","options":{"size_limit":"4096"},"width":445,"height":210}
\ No newline at end of file
+{"checksum":"05cfcead1245ff0fbcf3af8873998cee","options":{"size_limit":"4096"},"width":471,"height":209}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache
index 9444e4c..50b8caa 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache
@@ -1 +1 @@
-{"checksum":"136e615bb97d8356ceb17a851c86817a","options":{"size_limit":"4096"},"width":369,"height":208}
\ No newline at end of file
+{"checksum":"136e615bb97d8356ceb17a851c86817a","options":{"size_limit":"4096"},"width":366,"height":207}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache
index 18b2a0d..60c7e44 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache
@@ -1 +1 @@
-{"checksum":"1ed737fca2f0d63f7ebac20672a2e222","options":{"size_limit":"4096"},"width":676,"height":572}
\ No newline at end of file
+{"checksum":"1ed737fca2f0d63f7ebac20672a2e222","options":{"size_limit":"4096"},"width":686,"height":569}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache
index 18fc929..8accbd8 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache
@@ -1 +1 @@
-{"checksum":"3ca149653ee220164efd33ca869b97b5","options":{"size_limit":"4096"},"width":659,"height":339}
\ No newline at end of file
+{"checksum":"3ca149653ee220164efd33ca869b97b5","options":{"size_limit":"4096"},"width":666,"height":337}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache
index eb067d5..2fa0076 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache
@@ -1 +1 @@
-{"checksum":"3e23a5cd9673dbe358271d004cc0d714","options":{"size_limit":"4096"},"width":345,"height":284}
\ No newline at end of file
+{"checksum":"3e23a5cd9673dbe358271d004cc0d714","options":{"size_limit":"4096"},"width":374,"height":284}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache
index 7b8805e..ad85b35 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache
@@ -1 +1 @@
-{"checksum":"4760564aad148998e116357e8f3a5450","options":{"size_limit":"4096"},"width":671,"height":517}
\ No newline at end of file
+{"checksum":"4760564aad148998e116357e8f3a5450","options":{"size_limit":"4096"},"width":684,"height":514}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache
index 9c63069..e550087 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache
@@ -1 +1 @@
-{"checksum":"63a9fb2dbcfbcb3fb7bb1dffc2609836","options":{"size_limit":"4096"},"width":900,"height":241}
\ No newline at end of file
+{"checksum":"63a9fb2dbcfbcb3fb7bb1dffc2609836","options":{"size_limit":"4096"},"width":954,"height":240}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache
index f8b11be..72426dc 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache
@@ -1 +1 @@
-{"checksum":"8bbf1fa0b84011383e811eaf9e630100","options":{"size_limit":"4096"},"width":340,"height":176}
\ No newline at end of file
+{"checksum":"8bbf1fa0b84011383e811eaf9e630100","options":{"size_limit":"4096"},"width":363,"height":176}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache
index 87127cf..3487f42 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache
@@ -1 +1 @@
-{"checksum":"ae4b86cecdafb2b8e1afb35b06f359a1","options":{"size_limit":"4096"},"width":166,"height":203}
\ No newline at end of file
+{"checksum":"ae4b86cecdafb2b8e1afb35b06f359a1","options":{"size_limit":"4096"},"width":274,"height":315}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache
index 5073b48..66b488d 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache
@@ -1 +1 @@
-{"checksum":"d8ecf025f2e851a45b4d2132df024ecb","options":{"size_limit":"4096"},"width":682,"height":100}
\ No newline at end of file
+{"checksum":"d8ecf025f2e851a45b4d2132df024ecb","options":{"size_limit":"4096"},"width":720,"height":99}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache
index 8758588..e6bf6ac 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache
@@ -1 +1 @@
-{"checksum":"e7fd1b7ba54e07262bd726c9fe979363","options":{"size_limit":"4096"},"width":711,"height":413}
\ No newline at end of file
+{"checksum":"e7fd1b7ba54e07262bd726c9fe979363","options":{"size_limit":"4096"},"width":703,"height":411}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache
index 37d3f9b..e089f43 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache
@@ -1 +1 @@
-{"checksum":"ec0156d64fc9a225c5e022fc352d7d46","options":{"size_limit":"4096"},"width":515,"height":541}
\ No newline at end of file
+{"checksum":"ec0156d64fc9a225c5e022fc352d7d46","options":{"size_limit":"4096"},"width":549,"height":540}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache
index 3ea4558..845d759 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache
@@ -1 +1 @@
-{"checksum":"fada5fbf7628dc70c998680727a069bd","options":{"size_limit":"4096"},"width":687,"height":511}
\ No newline at end of file
+{"checksum":"fada5fbf7628dc70c998680727a069bd","options":{"size_limit":"4096"},"width":704,"height":508}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache
index dbb7dfe..1574d71 100644
--- a/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache
+++ b/documentation/jetty-10/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache
@@ -1 +1 @@
-{"checksum":"fb3e088ea5480f2b172677334c79d51f","options":{"size_limit":"4096"},"width":1214,"height":305}
\ No newline at end of file
+{"checksum":"fb3e088ea5480f2b172677334c79d51f","options":{"size_limit":"4096"},"width":1320,"height":304}
\ No newline at end of file
diff --git a/documentation/jetty-10/programming-guide/asciidoctor.css b/documentation/jetty-10/programming-guide/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-10/programming-guide/asciidoctor.css
+++ b/documentation/jetty-10/programming-guide/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-10/programming-guide/coderay-asciidoctor.css b/documentation/jetty-10/programming-guide/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-10/programming-guide/coderay-asciidoctor.css
+++ b/documentation/jetty-10/programming-guide/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-10/programming-guide/index.html b/documentation/jetty-10/programming-guide/index.html
index b55ba8c..52a4b10 100644
--- a/documentation/jetty-10/programming-guide/index.html
+++ b/documentation/jetty-10/programming-guide/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Programming Guide</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -20,8 +21,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 10.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 10.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Jetty Programming Guide</div>
@@ -29,10 +30,14 @@
 <li><a href="#pg-eclipse-jetty-programming-guide">Eclipse Jetty Programming Guide</a></li>
 <li><a href="#pg-client">Client Libraries</a>
 <ul class="sectlevel2">
-<li><a href="#pg-client-io-arch">Client Libraries I/O Architecture</a>
+<li><a href="#pg-client-io-arch">I/O Architecture</a>
 <ul class="sectlevel3">
-<li><a href="#pg-client-io-arch-network">Client Libraries Network Layer</a></li>
-<li><a href="#pg-client-io-arch-protocol">Client Libraries Protocol Layer</a></li>
+<li><a href="#pg-client-io-arch-network">Network Layer</a>
+<ul class="sectlevel4">
+<li><a href="#pg-client-io-arch-unix-domain">Unix-Domain Support</a></li>
+</ul>
+</li>
+<li><a href="#pg-client-io-arch-protocol">Protocol Layer</a></li>
 </ul>
 </li>
 <li><a href="#pg-client-http">HTTP Client</a>
@@ -80,8 +85,10 @@
 <ul class="sectlevel4">
 <li><a href="#pg-client-http-transport-http11">HTTP/1.1 Transport</a></li>
 <li><a href="#pg-client-http-transport-http2">HTTP/2 Transport</a></li>
+<li><a href="#pg-client-http-transport-http3">HTTP/3 Transport</a></li>
 <li><a href="#pg-client-http-transport-fcgi">FastCGI Transport</a></li>
 <li><a href="#pg-client-http-transport-dynamic">Dynamic Transport</a></li>
+<li><a href="#pg-client-http-transport-unix-domain">Unix-Domain Configuration</a></li>
 </ul>
 </li>
 </ul>
@@ -98,6 +105,16 @@
 <li><a href="#pg-client-http2-push">Receiving HTTP/2 Pushes</a></li>
 </ul>
 </li>
+<li><a href="#pg-client-http3">HTTP/3 Client Library</a>
+<ul class="sectlevel3">
+<li><a href="#pg-client-http3-intro">Introducing HTTP3Client</a></li>
+<li><a href="#pg-client-http3-connect">Connecting to the Server</a></li>
+<li><a href="#pg-client-http3-configure">Configuring the Session</a></li>
+<li><a href="#pg-client-http3-request">Sending a Request</a></li>
+<li><a href="#pg-client-http3-response">Receiving a Response</a></li>
+<li><a href="#pg-client-http3-reset">Resetting a Request or Response</a></li>
+</ul>
+</li>
 <li><a href="#pg-client-websocket">WebSocket Client</a>
 <ul class="sectlevel3">
 <li><a href="#pg-client-websocket-start">Starting WebSocketClient</a></li>
@@ -154,11 +171,12 @@
 </li>
 <li><a href="#pg-server-http">HTTP Server Libraries</a>
 <ul class="sectlevel3">
-<li><a href="#pg-server-http-request-processing">Server Request Processing</a>
+<li><a href="#pg-server-http-request-processing">Request Processing</a>
 <ul class="sectlevel4">
 <li><a href="#pg-server-http-channel-events">HttpChannel Events</a></li>
 </ul>
 </li>
+<li><a href="#pg-server-http-request-logging">Request Logging</a></li>
 <li><a href="#pg-server-http-connector">Server Connectors</a>
 <ul class="sectlevel4">
 <li><a href="#pg-server-http-connector-protocol">Configuring Protocols</a>
@@ -167,6 +185,7 @@
 <li><a href="#pg-server-http-connector-protocol-http11-tls">Encrypted HTTP/1.1 (https)</a></li>
 <li><a href="#pg-server-http-connector-protocol-http2">Clear-Text HTTP/2</a></li>
 <li><a href="#pg-server-http-connector-protocol-http2-tls">Encrypted HTTP/2</a></li>
+<li><a href="#pg-server-http-connector-protocol-http3">HTTP/3</a></li>
 <li><a href="#pg-server-http-connector-protocol-proxy-http11">Jetty Behind a Load Balancer</a></li>
 </ul>
 </li>
@@ -222,6 +241,15 @@
 <li><a href="#pg-server-http2-push">HTTP/2 Push of Resources</a></li>
 </ul>
 </li>
+<li><a href="#pg-server-http3">HTTP/3 Server Library</a>
+<ul class="sectlevel3">
+<li><a href="#pg-server-http3-intro">Introduction</a></li>
+<li><a href="#pg-server-http3-setup">Server Setup</a></li>
+<li><a href="#pg-server-http3-request">Receiving a Request</a></li>
+<li><a href="#pg-server-http3-response">Sending a Response</a></li>
+<li><a href="#pg-server-http3-reset">Resetting a Request</a></li>
+</ul>
+</li>
 <li><a href="#pg-server-session">HTTP Session Management</a>
 <ul class="sectlevel3">
 <li><a href="#pg-server-session-architecture">Session Architecture</a></li>
@@ -429,7 +457,7 @@
 <li><a href="#pg-arch-io-connection-listener">Jetty I/O: <code>Connection.Listener</code></a></li>
 </ul>
 </li>
-<li><a href="#pg-arch-io-echo">Jetty I/O: Network Echo</a></li>
+<li><a href="#pg-arch-io-echo">Jetty I/O: TCP Network Echo</a></li>
 </ul>
 </li>
 <li><a href="#pg-arch-listener">Jetty Listeners</a></li>
@@ -494,7 +522,7 @@
 <p>The Eclipse Jetty Programming Guide targets developers who want to use the Eclipse Jetty libraries in their applications.</p>
 </div>
 <div class="paragraph">
-<p>The Eclipse Jetty libraries provide the client-side and server-side APIs to work with various web protocols such as HTTP/1.1, HTTP/2, WebSocket and FastCGI.</p>
+<p>The Eclipse Jetty libraries provide the client-side and server-side APIs to work with various web protocols such as HTTP/1.1, HTTP/2, HTTP/3, WebSocket and FastCGI.</p>
 </div>
 <div class="paragraph">
 <p>You may use the <a href="#pg-client">Eclipse Jetty client-side library</a> in your application to make calls to third party REST services, or to other REST microservices in your system.</p>
@@ -513,7 +541,7 @@
 <div class="paragraph">
 <p>The Eclipse Jetty Project provides client-side libraries that allow you to embed a client in your applications.
 A typical example is a client application that needs to contact a third party service via HTTP (for example a REST service).
-Another example is a proxy application that receives HTTP requests and forwards them as FCGI requests to a PHP application such as WordPress, or receives HTTP/1.1 requests and converts them to HTTP/2.
+Another example is a proxy application that receives HTTP requests and forwards them as FCGI requests to a PHP application such as WordPress, or receives HTTP/1.1 requests and converts them to HTTP/2 or HTTP/3.
 Yet another example is a client application that needs to receive events from a WebSocket server.</p>
 </div>
 <div class="paragraph">
@@ -531,6 +559,9 @@
 <p><a href="#pg-client-http2">The Low-Level HTTP/2 Client Library</a> for low-level HTTP/2</p>
 </li>
 <li>
+<p><a href="#pg-client-http3">The Low-Level HTTP/3 Client Library</a> for low-level HTTP/3</p>
+</li>
+<li>
 <p><a href="#pg-client-websocket">The WebSocket client library</a></p>
 </li>
 </ul>
@@ -539,7 +570,7 @@
 <p>If you are interested in the low-level details of how the Eclipse Jetty client libraries work, or are interested in writing a custom protocol, look at the <a href="#pg-client-io-arch">Client I/O Architecture</a>.</p>
 </div>
 <div class="sect2">
-<h3 id="pg-client-io-arch"><a class="anchor" href="#pg-client-io-arch"></a><a class="link" href="#pg-client-io-arch">Client Libraries I/O Architecture</a></h3>
+<h3 id="pg-client-io-arch"><a class="anchor" href="#pg-client-io-arch"></a><a class="link" href="#pg-client-io-arch">I/O Architecture</a></h3>
 <div class="paragraph">
 <p>The Jetty client libraries provide the basic components and APIs to implement a network client.</p>
 </div>
@@ -560,7 +591,7 @@
 </ol>
 </div>
 <div class="sect3">
-<h4 id="pg-client-io-arch-network"><a class="anchor" href="#pg-client-io-arch-network"></a><a class="link" href="#pg-client-io-arch-network">Client Libraries Network Layer</a></h4>
+<h4 id="pg-client-io-arch-network"><a class="anchor" href="#pg-client-io-arch-network"></a><a class="link" href="#pg-client-io-arch-network">Network Layer</a></h4>
 <div class="paragraph">
 <p>The Jetty client libraries use the common I/O design described in <a href="#pg-arch-io">this section</a>.
 The main client-side component is the <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/ClientConnector.html"><code>ClientConnector</code></a>.</p>
@@ -690,9 +721,43 @@
 <div class="paragraph">
 <p>Please refer to the <code>ClientConnector</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/ClientConnector.html">javadocs</a> for the complete list of configurable parameters.</p>
 </div>
+<div class="sect4">
+<h5 id="pg-client-io-arch-unix-domain"><a class="anchor" href="#pg-client-io-arch-unix-domain"></a><a class="link" href="#pg-client-io-arch-unix-domain">Unix-Domain Support</a></h5>
+<div class="paragraph">
+<p><a href="https://openjdk.java.net/jeps/380">JEP 380</a> introduced Unix-Domain sockets support in Java 16, on all operative systems.</p>
+</div>
+<div class="paragraph">
+<p><code>ClientConnector</code> can be configured to support Unix-Domain sockets in the following way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// This is the path where the server &quot;listens&quot; on.</span>
+Path unixDomainPath = Path.of(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/server.sock</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// Creates a ClientConnector that uses Unix-Domain</span>
+<span class="comment">// sockets, not the network, to connect to the server.</span>
+ClientConnector clientConnector = ClientConnector.forUnixDomain(unixDomainPath);
+clientConnector.start();</code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>You can use Unix-Domain sockets support only when you run your client application with Java 16 or later.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
 </div>
 <div class="sect3">
-<h4 id="pg-client-io-arch-protocol"><a class="anchor" href="#pg-client-io-arch-protocol"></a><a class="link" href="#pg-client-io-arch-protocol">Client Libraries Protocol Layer</a></h4>
+<h4 id="pg-client-io-arch-protocol"><a class="anchor" href="#pg-client-io-arch-protocol"></a><a class="link" href="#pg-client-io-arch-protocol">Protocol Layer</a></h4>
 <div class="paragraph">
 <p>The protocol layer builds on top of the network layer to generate the bytes to be written to the network and to parse the bytes read from the network.</p>
 </div>
@@ -1078,16 +1143,23 @@
 <p>However, when all you need to do is to perform a <code>GET</code> request to a resource, Jetty&#8217;s HTTP client offers also a synchronous API; a programming interface where the thread that issued the request blocks until the request/response conversation is complete.</p>
 </div>
 <div class="paragraph">
-<p>Jetty&#8217;s HTTP client supports <a href="#pg-client-http-transport">different transports</a>: HTTP/1.1, FastCGI and HTTP/2. This means that the semantic of an HTTP request: " <code>GET</code> the resource <code>/index.html</code> " can be carried over the network in different formats.
-The most common and default format is HTTP/1.1. That said, Jetty&#8217;s HTTP client can carry the same request using the FastCGI format or the HTTP/2 format.</p>
+<p>Jetty&#8217;s HTTP client supports different <a href="#pg-client-http-transport">transports protocols</a>: HTTP/1.1, HTTP/2, HTTP/3 and FastCGI. This means that the semantic of an HTTP request such as: " <code>GET</code> the resource <code>/index.html</code> " can be carried over the network in different formats.
+The most common and default format is HTTP/1.1. That said, Jetty&#8217;s HTTP client can carry the same request using the HTTP/2 format, the HTTP/3 format, or the FastCGI format.</p>
 </div>
 <div class="paragraph">
-<p>The <a href="#pg-client-http-transport-fcgi">FastCGI transport</a> is heavily used in Jetty&#8217;s <a href="#pg-server-fastcgi">FastCGI support</a> that allows Jetty to work as a reverse proxy to PHP (exactly like Apache or Nginx do) and therefore be able to serve, for example, WordPress websites.</p>
+<p>Furthermore, every transport protocol can be sent either over the network or via Unix-Domain sockets.
+Supports for Unix-Domain sockets requires Java 16 or later, since Unix-Domain sockets support has been introduced in OpenJDK with <a href="https://openjdk.java.net/jeps/380">JEP 380</a>.</p>
+</div>
+<div class="paragraph">
+<p>The <a href="#pg-client-http-transport-fcgi">FastCGI transport</a> is heavily used in Jetty&#8217;s <a href="#pg-server-fastcgi">FastCGI support</a> that allows Jetty to work as a reverse proxy to PHP (exactly like Apache or Nginx do) and therefore be able to serve, for example, WordPress websites, often in conjunction with Unix-Domain sockets (although it&#8217;s possible to use FastCGI via network too).</p>
 </div>
 <div class="paragraph">
 <p>The HTTP/2 transport allows Jetty&#8217;s HTTP client to perform requests using HTTP/2 to HTTP/2 enabled web sites, see also Jetty&#8217;s <a href="#pg-client-http2">HTTP/2 support</a>.</p>
 </div>
 <div class="paragraph">
+<p>The HTTP/3 transport allows Jetty&#8217;s HTTP client to perform requests using HTTP/3 to HTTP/3 enabled web sites, see also Jetty&#8217;s <a href="#pg-client-http3">HTTP/3 support</a>.</p>
+</div>
+<div class="paragraph">
 <p>Out of the box features that you get with the Jetty HTTP client include:</p>
 </div>
 <div class="ulist">
@@ -1118,7 +1190,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-client<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -1335,7 +1407,7 @@
 <h4 id="pg-client-http-request-processing"><a class="anchor" href="#pg-client-http-request-processing"></a><a class="link" href="#pg-client-http-request-processing">HttpClient Request Processing</a></h4>
 <div class="imageblock">
 <div class="content">
-<img src="diag-4760564aad148998e116357e8f3a5450.png" alt="Diagram" width="671" height="517">
+<img src="images/diag-4760564aad148998e116357e8f3a5450.png" alt="Diagram" width="684" height="514">
 </div>
 </div>
 <div class="paragraph">
@@ -2109,7 +2181,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-136e615bb97d8356ceb17a851c86817a.png" alt="Diagram" width="369" height="208">
+<img src="images/diag-136e615bb97d8356ceb17a851c86817a.png" alt="Diagram" width="366" height="207">
 </div>
 </div>
 <div class="paragraph">
@@ -2216,7 +2288,7 @@
 <p>Configured in this way, <code>HttpClient</code> makes requests to the HTTP proxy (for plain-text HTTP requests) or establishes a tunnel via HTTP <code>CONNECT</code> (for encrypted HTTPS requests).</p>
 </div>
 <div class="paragraph">
-<p>Proxying is supported for both HTTP/1.1 and HTTP/2.</p>
+<p>Proxying is supported for HTTP/1.1 and HTTP/2.</p>
 </div>
 <div class="sect4">
 <h5 id="pg-client-http-proxy-authentication"><a class="anchor" href="#pg-client-http-proxy-authentication"></a><a class="link" href="#pg-client-http-proxy-authentication">Proxy Authentication Support</a></h5>
@@ -2251,7 +2323,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-e7fd1b7ba54e07262bd726c9fe979363.png" alt="Diagram" width="711" height="413">
+<img src="images/diag-e7fd1b7ba54e07262bd726c9fe979363.png" alt="Diagram" width="703" height="411">
 </div>
 </div>
 <div class="paragraph">
@@ -2265,13 +2337,13 @@
 <div class="sect3">
 <h4 id="pg-client-http-transport"><a class="anchor" href="#pg-client-http-transport"></a><a class="link" href="#pg-client-http-transport">HttpClient Pluggable Transports</a></h4>
 <div class="paragraph">
-<p>Jetty&#8217;s <code>HttpClient</code> can be configured to use different transports to carry the semantic of HTTP requests and responses.</p>
+<p>Jetty&#8217;s <code>HttpClient</code> can be configured to use different transport protocols to carry the semantic of HTTP requests and responses.</p>
 </div>
 <div class="paragraph">
 <p>This means that the intention of a client to request resource <code>/index.html</code> using the <code>GET</code> method can be carried over the network in different formats.</p>
 </div>
 <div class="paragraph">
-<p>A <code>HttpClient</code> transport is the component that is in charge of converting a high-level, semantic, HTTP requests such as &#8220;`GET<code> resource </code>/index.html`&#8221; into the specific format understood by the server (for example, HTTP/2), and to convert the server response from the specific format (HTTP/2) into high-level, semantic objects that can be used by applications.</p>
+<p>An <code>HttpClient</code> transport is the component that is in charge of converting a high-level, semantic, HTTP requests such as " <code>GET</code> resource <code>/index.html</code> " into the specific format understood by the server (for example, HTTP/2 or HTTP/3), and to convert the server response from the specific format (HTTP/2 or HTTP/3) into high-level, semantic objects that can be used by applications.</p>
 </div>
 <div class="paragraph">
 <p>The most common protocol format is HTTP/1.1, a textual protocol with lines separated by <code>\r\n</code>:</p>
@@ -2300,19 +2372,39 @@
 </div>
 </div>
 <div class="paragraph">
-<p>Similarly, HTTP/2 is a binary protocol that transports the same information in a yet different format.</p>
+<p>Similarly, HTTP/2 is a binary protocol that transports the same information in a yet different format via TCP, while HTTP/3 is a binary protocol that transports the same information in yet another format via UDP.</p>
 </div>
 <div class="paragraph">
 <p>A protocol may be <em>negotiated</em> between client and server.
 A request for a resource may be sent using one protocol (for example, HTTP/1.1), but the response may arrive in a different protocol (for example, HTTP/2).</p>
 </div>
 <div class="paragraph">
-<p><code>HttpClient</code> supports 3 static transports, each speaking only one protocol: <a href="#pg-client-http-transport-http11">HTTP/1.1</a>, <a href="#pg-client-http-transport-http2">HTTP/2</a> and <a href="#pg-client-http-transport-fcgi">FastCGI</a>, all of them with 2 variants: clear-text and TLS encrypted.</p>
+<p><code>HttpClient</code> supports these static transports, each speaking only one protocol:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#pg-client-http-transport-http11">HTTP/1.1</a> (both clear-text and TLS encrypted)</p>
+</li>
+<li>
+<p><a href="#pg-client-http-transport-http2">HTTP/2</a> (both clear-text and TLS encrypted)</p>
+</li>
+<li>
+<p><a href="#pg-client-http-transport-http3">HTTP/3</a> (only encrypted via QUIC+TLS)</p>
+</li>
+<li>
+<p><a href="#pg-client-http-transport-fcgi">FastCGI</a> (both clear-text and TLS encrypted)</p>
+</li>
+</ul>
 </div>
 <div class="paragraph">
 <p><code>HttpClient</code> also supports one <a href="#pg-client-http-transport-dynamic">dynamic transport</a>, that can speak different protocols and can select the right protocol by negotiating it with the server or by explicit indication from applications.</p>
 </div>
 <div class="paragraph">
+<p>Furthermore, every transport protocol can be sent either over the network or via Unix-Domain sockets.
+Supports for Unix-Domain sockets requires Java 16 or later, since Unix-Domain sockets support has been introduced in OpenJDK with <a href="https://openjdk.java.net/jeps/380">JEP 380</a>.</p>
+</div>
+<div class="paragraph">
 <p>Applications are typically not aware of the actual protocol being used.
 This allows them to write their logic against a high-level API that hides the details of the specific protocol being used over the network.</p>
 </div>
@@ -2369,6 +2461,31 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="pg-client-http-transport-http3"><a class="anchor" href="#pg-client-http-transport-http3"></a><a class="link" href="#pg-client-http-transport-http3">HTTP/3 Transport</a></h5>
+<div class="paragraph">
+<p>The HTTP/3 transport can be configured in this way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// The HTTP3Client powers the HTTP/3 transport.</span>
+HTTP3Client h3Client = <span class="keyword">new</span> HTTP3Client();
+h3Client.getQuicConfiguration().setSessionRecvWindow(<span class="integer">64</span> * <span class="integer">1024</span> * <span class="integer">1024</span>);
+
+<span class="comment">// Create and configure the HTTP/3 transport.</span>
+HttpClientTransportOverHTTP3 transport = <span class="keyword">new</span> HttpClientTransportOverHTTP3(h3Client);
+
+HttpClient client = <span class="keyword">new</span> HttpClient(transport);
+client.start();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>HTTP3Client</code> is the lower-level client that provides an API based on HTTP/3 concepts such as <em>sessions</em>, <em>streams</em> and <em>frames</em> that are specific to HTTP/3. See <a href="#pg-client-http3">the HTTP/3 client section</a> for more information.</p>
+</div>
+<div class="paragraph">
+<p><code>HttpClientTransportOverHTTP3</code> uses <code>HTTP3Client</code> to format high-level semantic HTTP requests (like "GET resource /index.html") into the HTTP/3 specific format.</p>
+</div>
+</div>
+<div class="sect4">
 <h5 id="pg-client-http-transport-fcgi"><a class="anchor" href="#pg-client-http-transport-fcgi"></a><a class="link" href="#pg-client-http-transport-fcgi">FastCGI Transport</a></h5>
 <div class="paragraph">
 <p>The FastCGI transport can be configured in this way:</p>
@@ -2395,7 +2512,7 @@
 <p>The static transports work well if you know in advance the protocol you want to speak with the server, or if the server only supports one protocol (such as FastCGI).</p>
 </div>
 <div class="paragraph">
-<p>With the advent of HTTP/2, however, servers are now able to support multiple protocols, at least both HTTP/1.1 and HTTP/2.</p>
+<p>With the advent of HTTP/2 and HTTP/3, however, servers are now able to support multiple protocols, at least both HTTP/1.1 and HTTP/2.</p>
 </div>
 <div class="paragraph">
 <p>The HTTP/2 protocol is typically negotiated between client and server.
@@ -2514,6 +2631,64 @@
 If the server does not support ALPN, the client will try to use the first protocol configured in <code>HttpClientTransportDynamic</code>, and the communication may succeed or fail depending on whether the server supports the protocol chosen by the client.</p>
 </div>
 </div>
+<div class="sect4">
+<h5 id="pg-client-http-transport-unix-domain"><a class="anchor" href="#pg-client-http-transport-unix-domain"></a><a class="link" href="#pg-client-http-transport-unix-domain">Unix-Domain Configuration</a></h5>
+<div class="paragraph">
+<p>All the transports can be configured with a <code>ClientConnector</code>, the component that is responsible for the transmission of the bytes generated by the transport to the server.</p>
+</div>
+<div class="paragraph">
+<p>By default, <code>ClientConnector</code> uses TCP networking to send bytes to the server and receive bytes from the server.</p>
+</div>
+<div class="paragraph">
+<p>When you are using Java 16 or later, <code>ClientConnector</code> also support <a href="#pg-client-io-arch-unix-domain">Unix-Domain sockets</a>, and every transport can be configured to use Unix-Domain sockets instead of TCP networking.</p>
+</div>
+<div class="paragraph">
+<p>To configure Unix-Domain sockets, you can create a <code>ClientConnector</code> instance in the following way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// This is the path where the server &quot;listens&quot; on.</span>
+Path unixDomainPath = Path.of(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/server.sock</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// Creates a ClientConnector that uses Unix-Domain</span>
+<span class="comment">// sockets, not the network, to connect to the server.</span>
+ClientConnector unixDomainClientConnector = ClientConnector.forUnixDomain(unixDomainPath);
+
+<span class="comment">// Use Unix-Domain for HTTP/1.1.</span>
+HttpClientTransportOverHTTP http1Transport = <span class="keyword">new</span> HttpClientTransportOverHTTP(unixDomainClientConnector);
+
+<span class="comment">// You can use Unix-Domain also for HTTP/2.</span>
+HTTP2Client http2Client = <span class="keyword">new</span> HTTP2Client(unixDomainClientConnector);
+HttpClientTransportOverHTTP2 http2Transport = <span class="keyword">new</span> HttpClientTransportOverHTTP2(http2Client);
+
+<span class="comment">// You can also use UnixDomain for the dynamic transport.</span>
+ClientConnectionFactory.Info http1 = HttpClientConnectionFactory.HTTP11;
+ClientConnectionFactoryOverHTTP2.HTTP2 http2 = <span class="keyword">new</span> ClientConnectionFactoryOverHTTP2.HTTP2(http2Client);
+HttpClientTransportDynamic dynamicTransport = <span class="keyword">new</span> HttpClientTransportDynamic(unixDomainClientConnector, http1, http2);
+
+<span class="comment">// Choose the transport you prefer for HttpClient, for example the dynamic transport.</span>
+HttpClient httpClient = <span class="keyword">new</span> HttpClient(dynamicTransport);
+httpClient.start();</code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>You can use Unix-Domain sockets support only when you run your client application with Java 16 or later.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>You can configure a Jetty server to use Unix-Domain sockets, as explained in <a href="#pg-server-http-connector">this section</a>.</p>
+</div>
+</div>
 </div>
 </div>
 <div class="sect2">
@@ -2540,7 +2715,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http2<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>http2-client<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -2574,7 +2749,7 @@
 A <em>session</em> typically has a long life&#8201;&#8212;&#8201;once the TCP connection is established, it remains open until it is not used anymore (and therefore it is closed by the idle timeout mechanism), until a fatal error occurs (for example, a network failure), or if one of the peers decides unilaterally to close the TCP connection.</p>
 </div>
 <div class="paragraph">
-<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection.
+<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection, or <em>session</em>.
 Each request/response cycle is represented by a <em>stream</em>.
 Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
 A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
@@ -2725,7 +2900,7 @@
 
 <span class="comment">// Configure the request headers.</span>
 HttpFields requestHeaders = HttpFields.build()
-    .put(HttpHeader.USER_AGENT, <span class="string"><span class="delimiter">&quot;</span><span class="content">Jetty HTTP2Client 10.0.7</span><span class="delimiter">&quot;</span></span>);
+    .put(HttpHeader.USER_AGENT, <span class="string"><span class="delimiter">&quot;</span><span class="content">Jetty HTTP2Client 10.0.8</span><span class="delimiter">&quot;</span></span>);
 
 <span class="comment">// The request metadata with method, URI and headers.</span>
 MetaData.Request request = <span class="keyword">new</span> MetaData.Request(<span class="string"><span class="delimiter">&quot;</span><span class="content">GET</span><span class="delimiter">&quot;</span></span>, HttpURI.from(<span class="string"><span class="delimiter">&quot;</span><span class="content"><a href="http://localhost:8080/path" class="bare">http://localhost:8080/path</a></span><span class="delimiter">&quot;</span></span>), HttpVersion.HTTP_2, requestHeaders);
@@ -3054,6 +3229,299 @@
 </div>
 </div>
 <div class="sect2">
+<h3 id="pg-client-http3"><a class="anchor" href="#pg-client-http3"></a><a class="link" href="#pg-client-http3">HTTP/3 Client Library</a></h3>
+<div class="paragraph">
+<p>In the vast majority of cases, client applications should use the generic, high-level, <a href="#pg-client-http">HTTP client library</a> that also provides HTTP/3 support via the pluggable <a href="#pg-client-http-transport-http3">HTTP/3 transport</a> or the <a href="#pg-client-http-transport-dynamic">dynamic transport</a>.</p>
+</div>
+<div class="paragraph">
+<p>The high-level HTTP library supports cookies, authentication, redirection, connection pooling and a number of other features that are absent in the low-level HTTP/3 library.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 client library has been designed for those applications that need low-level access to HTTP/3 features such as <em>sessions</em>, <em>streams</em> and <em>frames</em>, and this is quite a rare use case.</p>
+</div>
+<div class="paragraph">
+<p>See also the correspondent <a href="#pg-server-http3">HTTP/3 server library</a>.</p>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-intro"><a class="anchor" href="#pg-client-http3-intro"></a><a class="link" href="#pg-client-http3-intro">Introducing HTTP3Client</a></h4>
+<div class="paragraph">
+<p>The Maven artifact coordinates for the HTTP/3 client library are the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
+  <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http3<span class="tag">&lt;/groupId&gt;</span>
+  <span class="tag">&lt;artifactId&gt;</span>http3-client<span class="tag">&lt;/artifactId&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
+<span class="tag">&lt;/dependency&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The main class is named <code>org.eclipse.jetty.http3.client.HTTP3Client</code>, and must be created, configured and started before use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Instantiate HTTP3Client.</span>
+HTTP3Client http3Client = <span class="keyword">new</span> HTTP3Client();
+
+<span class="comment">// Configure HTTP3Client, for example:</span>
+http3Client.getHTTP3Configuration().setStreamIdleTimeout(<span class="integer">15000</span>);
+
+<span class="comment">// Start HTTP3Client.</span>
+http3Client.start();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>When your application stops, or otherwise does not need <code>HTTP3Client</code> anymore, it should stop the <code>HTTP3Client</code> instance (or instances) that were started:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Stop HTTP3Client.</span>
+http3Client.stop();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>HTTP3Client</code> allows client applications to connect to an HTTP/3 server.
+A <em>session</em> represents a single connection to an HTTP/3 server and is defined by class <code>org.eclipse.jetty.http3.api.Session</code>.
+A <em>session</em> typically has a long life&#8201;&#8212;&#8201;once the connection is established, it remains active until it is not used anymore (and therefore it is closed by the idle timeout mechanism), until a fatal error occurs (for example, a network failure), or if one of the peers decides unilaterally to close the connection.</p>
+</div>
+<div class="paragraph">
+<p>HTTP/3 is a multiplexed protocol because it relies on the multiplexing capabilities of QUIC, the protocol based on UDP that transports HTTP/3 frames.
+Thanks to multiplexing, multiple HTTP/3 requests are sent on the same QUIC connection, or <em>session</em>.
+Each request/response cycle is represented by a <em>stream</em>.
+Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
+A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-connect"><a class="anchor" href="#pg-client-http3-connect"></a><a class="link" href="#pg-client-http3-connect">Connecting to the Server</a></h4>
+<div class="paragraph">
+<p>The first thing an application should do is to connect to the server and obtain a <code>Session</code>.
+The following example connects to the server:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Address of the server's port.</span>
+<span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+
+<span class="comment">// Connect to the server, the CompletableFuture will be</span>
+<span class="comment">// notified when the connection is succeeded (or failed).</span>
+CompletableFuture&lt;Session.Client&gt; sessionCF = http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener() {});
+
+<span class="comment">// Block to obtain the Session.</span>
+<span class="comment">// Alternatively you can use the CompletableFuture APIs to avoid blocking.</span>
+Session session = sessionCF.get();</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-configure"><a class="anchor" href="#pg-client-http3-configure"></a><a class="link" href="#pg-client-http3-configure">Configuring the Session</a></h4>
+<div class="paragraph">
+<p>The <code>connect(&#8230;&#8203;)</code> method takes a <code>Session.Client.Listener</code> parameter.
+This listener&#8217;s <code>onPreface(&#8230;&#8203;)</code> method is invoked just before establishing the connection to the server to gather the client configuration to send to the server.
+Client applications can override this method to change the default configuration:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; onPreface(Session session)
+    {
+        <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; configuration = <span class="keyword">new</span> <span class="predefined-type">HashMap</span>&lt;&gt;();
+
+        <span class="comment">// Add here configuration settings.</span>
+
+        <span class="keyword">return</span> configuration;
+    }
+});</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>Session.Client.Listener</code> is notified of session events originated by the server such as receiving a <code>SETTINGS</code> frame from the server, or the server closing the connection, or the client timing out the connection due to idleness.
+Please refer to the <code>Session.Client.Listener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/http3/api/Session.Client.Listener.html">javadocs</a> for the complete list of events.</p>
+</div>
+<div class="paragraph">
+<p>Once a <code>Session</code> has been established, the communication with the server happens by exchanging <em>frames</em>.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-request"><a class="anchor" href="#pg-client-http3-request"></a><a class="link" href="#pg-client-http3-request">Sending a Request</a></h4>
+<div class="paragraph">
+<p>Sending an HTTP request to the server, and receiving a response, creates a <em>stream</em> that encapsulates the exchange of HTTP/3 frames that compose the request and the response.</p>
+</div>
+<div class="paragraph">
+<p>In order to send an HTTP request to the server, the client must send a <code>HEADERS</code> frame.
+<code>HEADERS</code> frames carry the request method, the request URI and the request headers.
+Sending the <code>HEADERS</code> frame opens the <code>Stream</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+CompletableFuture&lt;Session.Client&gt; sessionCF = http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener() {});
+Session.Client session = sessionCF.get();
+
+<span class="comment">// Configure the request headers.</span>
+HttpFields requestHeaders = HttpFields.build()
+    .put(HttpHeader.USER_AGENT, <span class="string"><span class="delimiter">&quot;</span><span class="content">Jetty HTTP3Client 10.0.8</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// The request metadata with method, URI and headers.</span>
+MetaData.Request request = <span class="keyword">new</span> MetaData.Request(<span class="string"><span class="delimiter">&quot;</span><span class="content">GET</span><span class="delimiter">&quot;</span></span>, HttpURI.from(<span class="string"><span class="delimiter">&quot;</span><span class="content"><a href="http://localhost:8444/path" class="bare">http://localhost:8444/path</a></span><span class="delimiter">&quot;</span></span>), HttpVersion.HTTP_3, requestHeaders);
+
+<span class="comment">// The HTTP/3 HEADERS frame, with endStream=true</span>
+<span class="comment">// to signal that this request has no content.</span>
+HeadersFrame headersFrame = <span class="keyword">new</span> HeadersFrame(request, <span class="predefined-constant">true</span>);
+
+<span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener() {});</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note how <code>Session.newRequest(&#8230;&#8203;)</code> takes a <code>Stream.Client.Listener</code> parameter.
+This listener is notified of stream events originated by the server such as receiving <code>HEADERS</code> or <code>DATA</code> frames that are part of the response, discussed in more details in the <a href="#pg-client-http3-response">section below</a>.
+Please refer to the <code>Stream.Client.Listener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/http3/api/Stream.Client.Listener.html">javadocs</a> for the complete list of events.</p>
+</div>
+<div class="paragraph">
+<p>HTTP requests may have content, which is sent using the <code>Stream</code> APIs:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+CompletableFuture&lt;Session.Client&gt; sessionCF = http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener() {});
+Session.Client session = sessionCF.get();
+
+<span class="comment">// Configure the request headers.</span>
+HttpFields requestHeaders = HttpFields.build()
+    .put(HttpHeader.CONTENT_TYPE, <span class="string"><span class="delimiter">&quot;</span><span class="content">application/json</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// The request metadata with method, URI and headers.</span>
+MetaData.Request request = <span class="keyword">new</span> MetaData.Request(<span class="string"><span class="delimiter">&quot;</span><span class="content">POST</span><span class="delimiter">&quot;</span></span>, HttpURI.from(<span class="string"><span class="delimiter">&quot;</span><span class="content">http://localhost:8444/path</span><span class="delimiter">&quot;</span></span>), HttpVersion.HTTP_3, requestHeaders);
+
+<span class="comment">// The HTTP/3 HEADERS frame, with endStream=false to</span>
+<span class="comment">// signal that there will be more frames in this stream.</span>
+HeadersFrame headersFrame = <span class="keyword">new</span> HeadersFrame(request, <span class="predefined-constant">false</span>);
+
+<span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+CompletableFuture&lt;Stream&gt; streamCF = session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener() {});
+
+<span class="comment">// Block to obtain the Stream.</span>
+<span class="comment">// Alternatively you can use the CompletableFuture APIs to avoid blocking.</span>
+Stream stream = streamCF.get();
+
+<span class="comment">// The request content, in two chunks.</span>
+<span class="predefined-type">String</span> content1 = <span class="string"><span class="delimiter">&quot;</span><span class="content">{</span><span class="char">\&quot;</span><span class="content">greet</span><span class="char">\&quot;</span><span class="content">: </span><span class="char">\&quot;</span><span class="content">hello world</span><span class="char">\&quot;</span><span class="content">}</span><span class="delimiter">&quot;</span></span>;
+<span class="predefined-type">ByteBuffer</span> buffer1 = StandardCharsets.UTF_8.encode(content1);
+<span class="predefined-type">String</span> content2 = <span class="string"><span class="delimiter">&quot;</span><span class="content">{</span><span class="char">\&quot;</span><span class="content">user</span><span class="char">\&quot;</span><span class="content">: </span><span class="char">\&quot;</span><span class="content">jetty</span><span class="char">\&quot;</span><span class="content">}</span><span class="delimiter">&quot;</span></span>;
+<span class="predefined-type">ByteBuffer</span> buffer2 = StandardCharsets.UTF_8.encode(content2);
+
+<span class="comment">// Send the first DATA frame on the stream, with endStream=false</span>
+<span class="comment">// to signal that there are more frames in this stream.</span>
+CompletableFuture&lt;Stream&gt; dataCF1 = stream.data(<span class="keyword">new</span> DataFrame(buffer1, <span class="predefined-constant">false</span>));
+
+<span class="comment">// Only when the first chunk has been sent we can send the second,</span>
+<span class="comment">// with endStream=true to signal that there are no more frames.</span>
+dataCF1.thenCompose(s -&gt; s.data(<span class="keyword">new</span> DataFrame(buffer2, <span class="predefined-constant">true</span>)));</code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+When sending two <code>DATA</code> frames consecutively, the second call to <code>Stream.data(&#8230;&#8203;)</code> must be done only when the first is completed, or a <code>WritePendingException</code> will be thrown.
+Use the <code>CompletableFuture</code> APIs to ensure that the second <code>Stream.data(&#8230;&#8203;)</code> call is performed when the first completed successfully.
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-response"><a class="anchor" href="#pg-client-http3-response"></a><a class="link" href="#pg-client-http3-response">Receiving a Response</a></h4>
+<div class="paragraph">
+<p>Response events are delivered to the <code>Stream.Client.Listener</code> passed to <code>Session.newRequest(&#8230;&#8203;)</code>.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP response is typically composed of a <code>HEADERS</code> frame containing the HTTP status code and the response headers, and optionally one or more <code>DATA</code> frames containing the response content bytes.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 protocol also supports response trailers (that is, headers that are sent after the response content) that also are sent using a <code>HEADERS</code> frame.</p>
+</div>
+<div class="paragraph">
+<p>A client application can therefore receive the HTTP/3 frames sent by the server by implementing the relevant methods in <code>Stream.Client.Listener</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onResponse(Stream.Client stream, HeadersFrame frame)
+    {
+        MetaData metaData = frame.getMetaData();
+        MetaData.Response response = (MetaData.Response)metaData;
+        <span class="predefined-type">System</span>.getLogger(<span class="string"><span class="delimiter">&quot;</span><span class="content">http3</span><span class="delimiter">&quot;</span></span>).log(INFO, <span class="string"><span class="delimiter">&quot;</span><span class="content">Received response {0}</span><span class="delimiter">&quot;</span></span>, response);
+    }
+
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onDataAvailable(Stream.Client stream)
+    {
+        <span class="comment">// Read a chunk of the content.</span>
+        Stream.Data data = stream.readData();
+        <span class="keyword">if</span> (data == <span class="predefined-constant">null</span>)
+        {
+            <span class="comment">// No data available now, demand to be called back.</span>
+            stream.demand();
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// Process the content.</span>
+            process(data.getByteBuffer());
+
+            <span class="comment">// Notify the implementation that the content has been consumed.</span>
+            data.complete();
+
+            <span class="keyword">if</span> (!data.isLast())
+            {
+                <span class="comment">// Demand to be called back.</span>
+                stream.demand();
+            }
+        }
+    }
+});</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-reset"><a class="anchor" href="#pg-client-http3-reset"></a><a class="link" href="#pg-client-http3-reset">Resetting a Request or Response</a></h4>
+<div class="paragraph">
+<p>In HTTP/3, clients and servers have the ability to tell to the other peer that they are not interested anymore in either the request or the response, by resetting the stream.</p>
+</div>
+<div class="paragraph">
+<p>The <code>HTTP3Client</code> APIs allow client applications to send and receive this "reset" event:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+CompletableFuture&lt;Stream&gt; streamCF = session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onFailure(Stream.Client stream, <span class="type">long</span> error, <span class="predefined-type">Throwable</span> failure)
+    {
+        <span class="comment">// The server reset this stream.</span>
+    }
+});
+Stream stream = streamCF.get();
+
+<span class="comment">// Reset this stream (for example, the user closed the application).</span>
+stream.reset(HTTP3ErrorCode.REQUEST_CANCELLED_ERROR.code(), <span class="keyword">new</span> <span class="exception">ClosedChannelException</span>());</code></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
 <h3 id="pg-client-websocket"><a class="anchor" href="#pg-client-websocket"></a><a class="link" href="#pg-client-websocket">WebSocket Client</a></h3>
 <div class="paragraph">
 <p>Jetty&#8217;s <code>WebSocketClient</code> is a more powerful alternative to the WebSocket client provided by the standard JSR 356 <code>javax.websocket</code> APIs.</p>
@@ -3073,7 +3541,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-jetty-client<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -3161,7 +3629,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-fada5fbf7628dc70c998680727a069bd.png" alt="Diagram" width="687" height="511">
+<img src="images/diag-fada5fbf7628dc70c998680727a069bd.png" alt="Diagram" width="704" height="508">
 </div>
 </div>
 <div class="paragraph">
@@ -3215,7 +3683,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-1ed737fca2f0d63f7ebac20672a2e222.png" alt="Diagram" width="676" height="572">
+<img src="images/diag-1ed737fca2f0d63f7ebac20672a2e222.png" alt="Diagram" width="686" height="569">
 </div>
 </div>
 <div class="paragraph">
@@ -3369,6 +3837,8 @@
 <li>
 <p>The <em>message</em> event.
 The message event is emitted when a WebSocket message is received.
+Only one thread at a time will be delivering a message event to the <code>onMessage</code> method; the next message event will not be delivered until the previous call to the <code>onMessage</code> method has exited.
+Endpoints will always be notified of message events in the same order they were received over the network.
 The message event can be of two types:</p>
 <div class="ulist">
 <ul>
@@ -4175,12 +4645,15 @@
 <div class="ulist">
 <ul>
 <li>
-<p>HTTP support for HTTP/1.0, HTTP/1.1, HTTP/2, clear-text or encrypted, for applications that want to embed Jetty as a generic HTTP server or proxy, via the <a href="#pg-server-http">HTTP libraries</a></p>
+<p>HTTP support for HTTP/1.0, HTTP/1.1, HTTP/2, clear-text or encrypted, HTTP/3, for applications that want to embed Jetty as a generic HTTP server or proxy, via the <a href="#pg-server-http">HTTP libraries</a></p>
 </li>
 <li>
 <p>HTTP/2 low-level support, for applications that want to explicitly handle low-level HTTP/2 <em>sessions</em>, <em>streams</em> and <em>frames</em>, via the <a href="#pg-server-http2">HTTP/2 libraries</a></p>
 </li>
 <li>
+<p>HTTP/3 low-level support, for applications that want to explicitly handle low-level HTTP/3 <em>sessions</em>, <em>streams</em> and <em>frames</em>, via the <a href="#pg-server-http3">HTTP/3 libraries</a></p>
+</li>
+<li>
 <p>WebSocket support, for applications that want to embed a WebSocket server, via the <a href="#pg-server-websocket">WebSocket libraries</a></p>
 </li>
 <li>
@@ -4392,7 +4865,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -4401,14 +4874,14 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-05cfcead1245ff0fbcf3af8873998cee.png" alt="Diagram" width="445" height="210">
+<img src="images/diag-05cfcead1245ff0fbcf3af8873998cee.png" alt="Diagram" width="471" height="209">
 </div>
 </div>
 <div class="paragraph">
 <p>The components that accept connections from clients are <code>org.eclipse.jetty.server.Connector</code> implementations.</p>
 </div>
 <div class="paragraph">
-<p>When a Jetty server interprets the HTTP protocol (both HTTP/1.1 and HTTP/2), it uses <code>org.eclipse.jetty.server.Handler</code> instances to process incoming requests and eventually produce responses.</p>
+<p>When a Jetty server interprets the HTTP protocol (HTTP/1.1, HTTP/2 or HTTP/3), it uses <code>org.eclipse.jetty.server.Handler</code> instances to process incoming requests and eventually produce responses.</p>
 </div>
 <div class="paragraph">
 <p>A <code>Server</code> must be created, configured and started:</p>
@@ -4458,7 +4931,7 @@
 <p>If you are interested in writing your server application based on the Servlet APIs, jump to <a href="#pg-server-http-handler-use-servlet">this section</a>.</p>
 </div>
 <div class="sect3">
-<h4 id="pg-server-http-request-processing"><a class="anchor" href="#pg-server-http-request-processing"></a><a class="link" href="#pg-server-http-request-processing">Server Request Processing</a></h4>
+<h4 id="pg-server-http-request-processing"><a class="anchor" href="#pg-server-http-request-processing"></a><a class="link" href="#pg-server-http-request-processing">Request Processing</a></h4>
 <div class="paragraph">
 <p>The Jetty HTTP request processing is outlined below in the diagram below.
 You may want to refer to the <a href="#pg-arch-io">Jetty I/O architecture</a> for additional information about the classes mentioned below.</p>
@@ -4471,7 +4944,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-3ca149653ee220164efd33ca869b97b5.png" alt="Diagram" width="659" height="339">
+<img src="images/diag-3ca149653ee220164efd33ca869b97b5.png" alt="Diagram" width="666" height="337">
 </div>
 </div>
 <div class="paragraph">
@@ -4479,7 +4952,7 @@
 This event is converted to a call to <code>AbstractConnection.onFillable()</code>, where the <code>Connection</code> first reads from the <code>EndPoint</code> into a <code>ByteBuffer</code>, and then calls a protocol specific parser to parse the bytes in the <code>ByteBuffer</code>.</p>
 </div>
 <div class="paragraph">
-<p>The parser emit events that are protocol specific; the HTTP/2 parser, for example, emits events for each HTTP/2 frame that has been parsed.
+<p>The parser emit events that are protocol specific; the HTTP/2 parser, for example, emits events for each HTTP/2 frame that has been parsed, and similarly does the HTTP/3 parser.
 The parser events are then converted to protocol independent events such as <em>"request start"</em>, <em>"request headers"</em>, <em>"request content chunk"</em>, etc.
 that in turn are converted into method calls to <code>HttpChannel</code>.</p>
 </div>
@@ -4490,7 +4963,7 @@
 <h5 id="pg-server-http-channel-events"><a class="anchor" href="#pg-server-http-channel-events"></a><a class="link" href="#pg-server-http-channel-events">HttpChannel Events</a></h5>
 <div class="paragraph">
 <p>The central component processing HTTP requests is <code>HttpChannel</code>.
-There is a 1-to-1 relationship between an HTTP request/response and an <code>HttpChannel</code>, no matter what is the specific protocol that carries the HTTP request over the network (HTTP/1.1, HTTP/2 or FastCGI).</p>
+There is a 1-to-1 relationship between an HTTP request/response and an <code>HttpChannel</code>, no matter what is the specific protocol that carries the HTTP request over the network (HTTP/1.1, HTTP/2, HTTP/3 or FastCGI).</p>
 </div>
 <div class="paragraph">
 <p>Advanced server applications may be interested in the progress of the processing of an HTTP request/response by <code>HttpChannel</code>.
@@ -4610,6 +5083,97 @@
 </div>
 </div>
 <div class="sect3">
+<h4 id="pg-server-http-request-logging"><a class="anchor" href="#pg-server-http-request-logging"></a><a class="link" href="#pg-server-http-request-logging">Request Logging</a></h4>
+<div class="paragraph">
+<p>HTTP requests and responses can be logged to provide data that can be later analyzed with other tools.
+These tools can provide information such as the most frequently accessed request URIs, the response status codes, the request/response content lengths, geographical information about the clients, etc.</p>
+</div>
+<div class="paragraph">
+<p>The default request/response log line format is the <a href="https://en.wikipedia.org/wiki/Common_Log_Format">NCSA Format</a> extended with referrer data and user-agent data.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Typically, the extended NCSA format is the is enough and it&#8217;s the standard used and understood by most log parsing tools and monitoring tools.</p>
+</div>
+<div class="paragraph">
+<p>To customize the request/response log line format see the <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/server/CustomRequestLog.html"><code>CustomRequestLog</code> javadocs</a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Request logging can be enabled at the server level, or at the web application context level.</p>
+</div>
+<div class="paragraph">
+<p>The request logging output can be directed to an SLF4J logger named <code>"org.eclipse.jetty.server.RequestLog"</code> at <code>INFO</code> level, and therefore to any logging library implementation of your choice (see also <a href="#pg-troubleshooting-logging">this section</a> about logging).</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// Sets the RequestLog to log to an SLF4J logger named &quot;org.eclipse.jetty.server.RequestLog&quot; at INFO level.</span>
+server.setRequestLog(<span class="keyword">new</span> CustomRequestLog(<span class="keyword">new</span> Slf4jRequestLogWriter(), CustomRequestLog.EXTENDED_NCSA_FORMAT));</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Alternatively, the request logging output can be directed to a daily rolling file of your choice, and the file name must contain <code>yyyy_MM_dd</code> so that rolled over files retain their date:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// Use a file name with the pattern 'yyyy_MM_dd' so rolled over files retain their date.</span>
+RequestLogWriter logWriter = <span class="keyword">new</span> RequestLogWriter(<span class="string"><span class="delimiter">&quot;</span><span class="content">/var/log/yyyy_MM_dd.jetty.request.log</span><span class="delimiter">&quot;</span></span>);
+<span class="comment">// Retain rolled over files for 2 weeks.</span>
+logWriter.setRetainDays(<span class="integer">14</span>);
+<span class="comment">// Log times are in the current time zone.</span>
+logWriter.setTimeZone(<span class="predefined-type">TimeZone</span>.getDefault().getID());
+
+<span class="comment">// Set the RequestLog to log to the given file, rolling over at midnight.</span>
+server.setRequestLog(<span class="keyword">new</span> CustomRequestLog(logWriter, CustomRequestLog.EXTENDED_NCSA_FORMAT));</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For maximum flexibility, you can log to multiple <code>RequestLog</code>s using class <code>RequestLog.Collection</code>, for example by logging with different formats or to different outputs.</p>
+</div>
+<div class="paragraph">
+<p>You can use <code>CustomRequestLog</code> with a custom <code>RequestLog.Writer</code> to direct the request logging output to your custom targets (for example, an RDBMS).
+You can implement your own <code>RequestLog</code> if you want to have functionalities that are not implemented by <code>CustomRequestLog</code>.</p>
+</div>
+<div class="paragraph">
+<p>Request logging can also be enabled at the web application context level, using <code>RequestLogHandler</code> (see <a href="#pg-server-http-handler">this section</a> about how to organize Jetty <code>Handler</code>s) to wrap a web application <code>Handler</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// Create a first ServletContextHandler for your main application.</span>
+ServletContextHandler mainContext = <span class="keyword">new</span> ServletContextHandler();
+mainContext.setContextPath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/main</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// Create a RequestLogHandler to log requests for your main application.</span>
+RequestLogHandler requestLogHandler = <span class="keyword">new</span> RequestLogHandler();
+requestLogHandler.setRequestLog(<span class="keyword">new</span> CustomRequestLog());
+<span class="comment">// Wrap the main application with the request log handler.</span>
+requestLogHandler.setHandler(mainContext);
+
+<span class="comment">// Create a second ServletContextHandler for your other application.</span>
+<span class="comment">// No request logging for this application.</span>
+ServletContextHandler otherContext = <span class="keyword">new</span> ServletContextHandler();
+mainContext.setContextPath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/other</span><span class="delimiter">&quot;</span></span>);
+
+server.setHandler(<span class="keyword">new</span> HandlerList(requestLogHandler, otherContext));</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
 <h4 id="pg-server-http-connector"><a class="anchor" href="#pg-server-http-connector"></a><a class="link" href="#pg-server-http-connector">Server Connectors</a></h4>
 <div class="paragraph">
 <p>A <code>Connector</code> is the component that handles incoming requests from clients, and works in conjunction with <code>ConnectionFactory</code> instances.</p>
@@ -4623,7 +5187,7 @@
 <p><code>org.eclipse.jetty.server.ServerConnector</code>, for TCP/IP sockets.</p>
 </li>
 <li>
-<p><code>org.eclipse.jetty.unixdomain.server.UnixDomainServerConnector</code> for Unix-Domain sockets.</p>
+<p><code>org.eclipse.jetty.unixdomain.server.UnixDomainServerConnector</code> for Unix-Domain sockets (requires Java 16 or later).</p>
 </li>
 </ul>
 </div>
@@ -4688,6 +5252,20 @@
 server.start();</code></pre>
 </div>
 </div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>You can use Unix-Domain sockets support only when you run your server with Java 16 or later.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 <div class="paragraph">
 <p>The <em>acceptors</em> are threads (typically only one) that compete to accept socket connections.
 When a connection is accepted, <code>ServerConnector</code> wraps the accepted <code>SocketChannel</code> and passes it to the <a href="#pg-arch-io-selector-manager"><code>SelectorManager</code></a>.
@@ -4906,6 +5484,60 @@
 </div>
 </div>
 <div class="sect5">
+<h6 id="pg-server-http-connector-protocol-http3"><a class="anchor" href="#pg-server-http-connector-protocol-http3"></a><a class="link" href="#pg-server-http-connector-protocol-http3">HTTP/3</a></h6>
+<div class="paragraph">
+<p>HTTP/3 is based on UDP, differently from HTTP/1 and HTTP/2 that are based on TCP.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP/3 client may initiate a connection (using the QUIC protocol via UDP) on the canonical HTTP secure port <code>443</code>, but chances are that the connection may not succeed (for example, the server does not listen for UDP on port <code>443</code>, only listens for TCP).</p>
+</div>
+<div class="paragraph">
+<p>For this reason, HTTP servers typically listen on the canonical HTTP secure port <code>443</code> for HTTP/1 and HTTP/2, and advertise the availability HTTP/3 as an <a href="https://datatracker.ietf.org/doc/html/rfc7838"><em>HTTP alternate service</em></a> on a different port (and possibly a different host).</p>
+</div>
+<div class="paragraph">
+<p>For example, an HTTP/2 response may include the following header:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>Alt-Svc: h3=&quot;:843&quot;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The presence of this header indicates that protocol <code>h3</code> is available on the same host (since no host is defined before the port), but on port <code>843</code>.
+The HTTP/3 client may now initiate a QUIC connection on port <code>843</code> and make HTTP/3 requests.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/diag-24a0ef88281611e6f6ebbb9d395e2e68.png" alt="Diagram" width="321" height="250">
+</div>
+</div>
+<div class="paragraph">
+<p>The code necessary to configure HTTP/2 is described in <a href="#pg-server-http-connector-protocol-http2-tls">this section</a>.</p>
+</div>
+<div class="paragraph">
+<p>To setup HTTP/3, for example on port <code>843</code>, you need the following code (some of which could be shared with other connectors such as HTTP/2&#8217;s):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+SslContextFactory.Server sslContextFactory = <span class="keyword">new</span> SslContextFactory.Server();
+sslContextFactory.setKeyStorePath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/keystore</span><span class="delimiter">&quot;</span></span>);
+sslContextFactory.setKeyStorePassword(<span class="string"><span class="delimiter">&quot;</span><span class="content">secret</span><span class="delimiter">&quot;</span></span>);
+
+HttpConfiguration httpConfig = <span class="keyword">new</span> HttpConfiguration();
+httpConfig.addCustomizer(<span class="keyword">new</span> SecureRequestCustomizer());
+
+<span class="comment">// Create and configure the HTTP/3 connector.</span>
+HTTP3ServerConnector connector = <span class="keyword">new</span> HTTP3ServerConnector(server, sslContextFactory, <span class="keyword">new</span> HTTP3ServerConnectionFactory(httpConfig));
+connector.setPort(<span class="integer">843</span>);
+server.addConnector(connector);
+
+server.start();</code></pre>
+</div>
+</div>
+</div>
+<div class="sect5">
 <h6 id="pg-server-http-connector-protocol-proxy-http11"><a class="anchor" href="#pg-server-http-connector-protocol-proxy-http11"></a><a class="link" href="#pg-server-http-connector-protocol-proxy-http11">Jetty Behind a Load Balancer</a></h6>
 <div class="paragraph">
 <p>It is often the case that Jetty receives connections from a load balancer configured to distribute the load among many Jetty backend servers.</p>
@@ -5028,7 +5660,7 @@
 </ul>
 </div>
 <div class="paragraph">
-<p>The <code>HandlerCollection</code> behavior (invoking <em>all</em> handlers) is useful when for example the last <code>Handler</code> is a logging <code>Handler</code> that logs the request(that may have been modified by previous handlers).</p>
+<p>The <code>HandlerCollection</code> behavior (invoking <em>all</em> handlers) is useful when for example the last <code>Handler</code> is a logging <code>Handler</code> that logs the request (that may have been modified by previous handlers).</p>
 </div>
 <div class="paragraph">
 <p>The <code>HandlerList</code> behavior (invoking handlers up to the first that calls <code>Request.setHandled(true)</code>) is useful when each handler processes a different URIs or a different virtual hosts: <code>Handler</code>s are invoked one after the other until one matches the URI or virtual host.</p>
@@ -5449,7 +6081,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-rewrite<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -5726,7 +6358,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-servlet<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -6109,12 +6741,12 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http2<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>http2-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection.
+<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection, or <em>session</em>.
 Each request/response cycle is represented by a <em>stream</em>.
 Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
 A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
@@ -6195,7 +6827,7 @@
 <p>The <code>ServerSessionListener</code> interface defines a number of methods that are invoked by the implementation upon the occurrence of HTTP/2 events, and that server applications can override to react to those events.</p>
 </div>
 <div class="paragraph">
-<p>Please refer to the `ServerSessionListener`<a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/http2/api/server/ServerSessionListener.html">javadocs</a> for the complete list of events.</p>
+<p>Please refer to the <code>ServerSessionListener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/http2/api/server/ServerSessionListener.html">javadocs</a> for the complete list of events.</p>
 </div>
 <div class="paragraph">
 <p>The first event is the <em>accept</em> event and happens when a client opens a new TCP connection to the server and the server accepts the connection.
@@ -6556,6 +7188,320 @@
 </div>
 </div>
 <div class="sect2">
+<h3 id="pg-server-http3"><a class="anchor" href="#pg-server-http3"></a><a class="link" href="#pg-server-http3">HTTP/3 Server Library</a></h3>
+<div class="paragraph">
+<p>In the vast majority of cases, server applications should use the generic, high-level, <a href="#pg-server-http">HTTP server library</a> that also provides HTTP/3 support via the HTTP/3 connector and <code>ConnectionFactory</code>s as described in details <a href="#pg-server-http-connector-protocol-http3">here</a>.</p>
+</div>
+<div class="paragraph">
+<p>The low-level HTTP/3 server library has been designed for those applications that need low-level access to HTTP/3 features such as <em>sessions</em>, <em>streams</em> and <em>frames</em>, and this is quite a rare use case.</p>
+</div>
+<div class="paragraph">
+<p>See also the correspondent <a href="#pg-client-http3">HTTP/3 client library</a>.</p>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-intro"><a class="anchor" href="#pg-server-http3-intro"></a><a class="link" href="#pg-server-http3-intro">Introduction</a></h4>
+<div class="paragraph">
+<p>The Maven artifact coordinates for the HTTP/3 client library are the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
+  <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http3<span class="tag">&lt;/groupId&gt;</span>
+  <span class="tag">&lt;artifactId&gt;</span>http3-server<span class="tag">&lt;/artifactId&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
+<span class="tag">&lt;/dependency&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>HTTP/3 is a multiplexed protocol because it relies on the multiplexing capabilities of QUIC, the protocol based on UDP that transports HTTP/3 frames.
+Thanks to multiplexing, multiple HTTP/3 requests are sent on the same QUIC connection, or <em>session</em>.
+Each request/response cycle is represented by a <em>stream</em>.
+Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
+A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-setup"><a class="anchor" href="#pg-server-http3-setup"></a><a class="link" href="#pg-server-http3-setup">Server Setup</a></h4>
+<div class="paragraph">
+<p>The low-level HTTP/3 support is provided by <code>org.eclipse.jetty.http3.server.RawHTTP3ServerConnectionFactory</code> and <code>org.eclipse.jetty.http3.api.Session.Server.Listener</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Create a Server instance.</span>
+Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// HTTP/3 is always secure, so it always need a SslContextFactory.</span>
+SslContextFactory.Server sslContextFactory = <span class="keyword">new</span> SslContextFactory.Server();
+sslContextFactory.setKeyStorePath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/keystore</span><span class="delimiter">&quot;</span></span>);
+sslContextFactory.setKeyStorePassword(<span class="string"><span class="delimiter">&quot;</span><span class="content">secret</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// The listener for session events.</span>
+Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener() {};
+
+<span class="comment">// Create and configure the RawHTTP3ServerConnectionFactory.</span>
+RawHTTP3ServerConnectionFactory http3 = <span class="keyword">new</span> RawHTTP3ServerConnectionFactory(sessionListener);
+http3.getHTTP3Configuration().setStreamIdleTimeout(<span class="integer">15000</span>);
+
+<span class="comment">// Create and configure the HTTP3ServerConnector.</span>
+HTTP3ServerConnector connector = <span class="keyword">new</span> HTTP3ServerConnector(server, sslContextFactory, http3);
+<span class="comment">// Configure the max number of requests per QUIC connection.</span>
+connector.getQuicConfiguration().setMaxBidirectionalRemoteStreams(<span class="integer">1024</span>);
+
+<span class="comment">// Add the Connector to the Server.</span>
+server.addConnector(connector);
+
+<span class="comment">// Start the Server so it starts accepting connections from clients.</span>
+server.start();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Where server applications using the <a href="#pg-server-http">high-level server library</a> deal with HTTP requests and responses in <code>Handler</code>s, server applications using the low-level HTTP/3 server library deal directly with HTTP/3 <em>session</em>s, <em>stream</em>s and <em>frame</em>s in a <code>Session.Server.Listener</code> implementation.</p>
+</div>
+<div class="paragraph">
+<p>The <code>Session.Server.Listener</code> interface defines a number of methods that are invoked by the implementation upon the occurrence of HTTP/3 events, and that server applications can override to react to those events.</p>
+</div>
+<div class="paragraph">
+<p>Please refer to the <code>Session.Server.Listener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/http3/api/Session.Server.Listener.html">javadocs</a> for the complete list of events.</p>
+</div>
+<div class="paragraph">
+<p>The first event is the <em>accept</em> event and happens when a client opens a new QUIC connection to the server and the server accepts the connection.
+This is the first occasion where server applications have access to the HTTP/3 <code>Session</code> object:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onAccept(Session session)
+    {
+        <span class="predefined-type">SocketAddress</span> remoteAddress = session.getRemoteSocketAddress();
+        <span class="predefined-type">System</span>.getLogger(<span class="string"><span class="delimiter">&quot;</span><span class="content">http3</span><span class="delimiter">&quot;</span></span>).log(INFO, <span class="string"><span class="delimiter">&quot;</span><span class="content">Connection from {0}</span><span class="delimiter">&quot;</span></span>, remoteAddress);
+    }
+};</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>After the QUIC connection has been established, both client and server send an HTTP/3 <code>SETTINGS</code> frame to exchange their HTTP/3 configuration.
+This generates the <em>preface</em> event, where applications can customize the HTTP/3 settings by returning a map of settings that the implementation will send to the other peer:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; onPreface(Session session)
+    {
+        <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; settings = <span class="keyword">new</span> <span class="predefined-type">HashMap</span>&lt;&gt;();
+
+        <span class="comment">// Customize the settings</span>
+
+        <span class="keyword">return</span> settings;
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-request"><a class="anchor" href="#pg-server-http3-request"></a><a class="link" href="#pg-server-http3-request">Receiving a Request</a></h4>
+<div class="paragraph">
+<p>Receiving an HTTP request from the client, and sending a response, creates a <em>stream</em> that encapsulates the exchange of HTTP/3 frames that compose the request and the response.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP request is made of a <code>HEADERS</code> frame, that carries the request method, the request URI and the request headers, and optional <code>DATA</code> frames that carry the request content.</p>
+</div>
+<div class="paragraph">
+<p>Receiving the <code>HEADERS</code> frame opens the <code>Stream</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        MetaData.Request request = (MetaData.Request)frame.getMetaData();
+
+        <span class="comment">// Return a Stream.Server.Listener to handle the request events,</span>
+        <span class="comment">// for example request content events or a request reset.</span>
+        <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener() {};
+    }
+};</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Server applications should return a <code>Stream.Server.Listener</code> implementation from <code>onRequest(&#8230;&#8203;)</code> to be notified of events generated by the client, such as <code>DATA</code> frames carrying request content, or a reset event indicating that the client wants to <em>reset</em> the request, or an idle timeout event indicating that the client was supposed to send more frames but it did not.</p>
+</div>
+<div class="paragraph">
+<p>The example below shows how to receive request content:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        MetaData.Request request = (MetaData.Request)frame.getMetaData();
+
+        <span class="comment">// Demand to be called back when data is available.</span>
+        stream.demand();
+
+        <span class="comment">// Return a Stream.Server.Listener to handle the request content.</span>
+        <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener()
+        {
+            <span class="annotation">@Override</span>
+            <span class="directive">public</span> <span class="type">void</span> onDataAvailable(Stream.Server stream)
+            {
+                <span class="comment">// Read a chunk of the request content.</span>
+                Stream.Data data = stream.readData();
+
+                <span class="keyword">if</span> (data == <span class="predefined-constant">null</span>)
+                {
+                    <span class="comment">// No data available now, demand to be called back.</span>
+                    stream.demand();
+                }
+                <span class="keyword">else</span>
+                {
+                    <span class="comment">// Get the content buffer.</span>
+                    <span class="predefined-type">ByteBuffer</span> buffer = data.getByteBuffer();
+
+                    <span class="comment">// Consume the buffer, here - as an example - just log it.</span>
+                    <span class="predefined-type">System</span>.getLogger(<span class="string"><span class="delimiter">&quot;</span><span class="content">http3</span><span class="delimiter">&quot;</span></span>).log(INFO, <span class="string"><span class="delimiter">&quot;</span><span class="content">Consuming buffer {0}</span><span class="delimiter">&quot;</span></span>, buffer);
+
+                    <span class="comment">// Tell the implementation that the buffer has been consumed.</span>
+                    data.complete();
+
+                    <span class="keyword">if</span> (!data.isLast())
+                    {
+                        <span class="comment">// Demand to be called back.</span>
+                        stream.demand();
+                    }
+                }
+            }
+        };
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-response"><a class="anchor" href="#pg-server-http3-response"></a><a class="link" href="#pg-server-http3-response">Sending a Response</a></h4>
+<div class="paragraph">
+<p>After receiving an HTTP request, a server application must send an HTTP response.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP response is typically composed of a <code>HEADERS</code> frame containing the HTTP status code and the response headers, and optionally one or more <code>DATA</code> frames containing the response content bytes.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 protocol also supports response trailers (that is, headers that are sent after the response content) that also are sent using a <code>HEADERS</code> frame.</p>
+</div>
+<div class="paragraph">
+<p>A server application can send a response in this way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        <span class="comment">// Send a response after reading the request.</span>
+        MetaData.Request request = (MetaData.Request)frame.getMetaData();
+        <span class="keyword">if</span> (frame.isLast())
+        {
+            respond(stream, request);
+            <span class="keyword">return</span> <span class="predefined-constant">null</span>;
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// Demand to be called back when data is available.</span>
+            stream.demand();
+            <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener()
+            {
+                <span class="annotation">@Override</span>
+                <span class="directive">public</span> <span class="type">void</span> onDataAvailable(Stream.Server stream)
+                {
+                    Stream.Data data = stream.readData();
+                    <span class="keyword">if</span> (data == <span class="predefined-constant">null</span>)
+                    {
+                        stream.demand();
+                    }
+                    <span class="keyword">else</span>
+                    {
+                        <span class="comment">// Consume the request content.</span>
+                        data.complete();
+                        <span class="keyword">if</span> (data.isLast())
+                            respond(stream, request);
+                    }
+                }
+            };
+        }
+    }
+
+    <span class="directive">private</span> <span class="type">void</span> respond(Stream.Server stream, MetaData.Request request)
+    {
+        <span class="comment">// Prepare the response HEADERS frame.</span>
+
+        <span class="comment">// The response HTTP status and HTTP headers.</span>
+        MetaData.Response response = <span class="keyword">new</span> MetaData.Response(HttpVersion.HTTP_3, HttpStatus.OK_200, HttpFields.EMPTY);
+
+        <span class="keyword">if</span> (HttpMethod.GET.is(request.getMethod()))
+        {
+            <span class="comment">// The response content.</span>
+            <span class="predefined-type">ByteBuffer</span> resourceBytes = getResourceBytes(request);
+
+            <span class="comment">// Send the HEADERS frame with the response status and headers,</span>
+            <span class="comment">// and a DATA frame with the response content bytes.</span>
+            stream.respond(<span class="keyword">new</span> HeadersFrame(response, <span class="predefined-constant">false</span>))
+                .thenCompose(s -&gt; s.data(<span class="keyword">new</span> DataFrame(resourceBytes, <span class="predefined-constant">true</span>)));
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// Send just the HEADERS frame with the response status and headers.</span>
+            stream.respond(<span class="keyword">new</span> HeadersFrame(response, <span class="predefined-constant">true</span>));
+        }
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-reset"><a class="anchor" href="#pg-server-http3-reset"></a><a class="link" href="#pg-server-http3-reset">Resetting a Request</a></h4>
+<div class="paragraph">
+<p>A server application may decide that it does not want to accept the request.
+For example, it may throttle the client because it sent too many requests in a time window, or the request is invalid (and does not deserve a proper HTTP response), etc.</p>
+</div>
+<div class="paragraph">
+<p>A request can be reset in this way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        <span class="type">float</span> requestRate = calculateRequestRate();
+
+        <span class="keyword">if</span> (requestRate &gt; maxRequestRate)
+        {
+            stream.reset(HTTP3ErrorCode.REQUEST_REJECTED_ERROR.code(), <span class="keyword">new</span> <span class="exception">RejectedExecutionException</span>());
+            <span class="keyword">return</span> <span class="predefined-constant">null</span>;
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// The request is accepted.</span>
+            MetaData.Request request = (MetaData.Request)frame.getMetaData();
+            <span class="comment">// Return a Stream.Listener to handle the request events.</span>
+            <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener() {};
+        }
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
 <h3 id="pg-server-session"><a class="anchor" href="#pg-server-session"></a><a class="link" href="#pg-server-session">HTTP Session Management</a></h3>
 <div class="paragraph">
 <p>Sessions are a concept within the Servlet API which allow requests to store and retrieve information across the time a user spends in an application.
@@ -6612,7 +7558,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-ec0156d64fc9a225c5e022fc352d7d46.png" alt="Diagram" width="515" height="541">
+<img src="images/diag-ec0156d64fc9a225c5e022fc352d7d46.png" alt="Diagram" width="549" height="540">
 </div>
 </div>
 </div>
@@ -7255,7 +8201,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-fb3e088ea5480f2b172677334c79d51f.png" alt="Diagram" width="1214" height="305">
+<img src="images/diag-fb3e088ea5480f2b172677334c79d51f.png" alt="Diagram" width="1320" height="304">
 </div>
 </div>
 <div class="paragraph">
@@ -7499,7 +8445,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-8bbf1fa0b84011383e811eaf9e630100.png" alt="Diagram" width="340" height="176">
+<img src="images/diag-8bbf1fa0b84011383e811eaf9e630100.png" alt="Diagram" width="363" height="176">
 </div>
 </div>
 <div class="paragraph">
@@ -7737,7 +8683,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-ae4b86cecdafb2b8e1afb35b06f359a1.png" alt="Diagram" width="166" height="203">
+<img src="images/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png" alt="Diagram" width="274" height="315">
 </div>
 </div>
 <div class="paragraph">
@@ -7889,7 +8835,7 @@
 <h5 id="pg-server-session-cachingsessiondatastore"><a class="anchor" href="#pg-server-session-cachingsessiondatastore"></a><a class="link" href="#pg-server-session-cachingsessiondatastore">The CachingSessionDataStore</a></h5>
 <div class="imageblock">
 <div class="content">
-<img src="diag-3e23a5cd9673dbe358271d004cc0d714.png" alt="Diagram" width="345" height="284">
+<img src="images/diag-3e23a5cd9673dbe358271d004cc0d714.png" alt="Diagram" width="374" height="284">
 </div>
 </div>
 <div class="paragraph">
@@ -8047,7 +8993,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-javax-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -8280,7 +9226,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-jetty-api<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -8292,7 +9238,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-jetty-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -8856,7 +9802,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-d8ecf025f2e851a45b4d2132df024ecb.png" alt="Diagram" width="682" height="100">
+<img src="images/diag-d8ecf025f2e851a45b4d2132df024ecb.png" alt="Diagram" width="720" height="99">
 </div>
 </div>
 <div class="paragraph">
@@ -8900,7 +9846,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png" alt="Diagram" width="900" height="241">
+<img src="images/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png" alt="Diagram" width="954" height="240">
 </div>
 </div>
 <div class="paragraph">
@@ -10951,9 +11897,11 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;configuration&gt;</span>
   <span class="tag">&lt;webApp&gt;</span>
     <span class="tag">&lt;contextPath&gt;</span>/${build.finalName}<span class="tag">&lt;/contextPath&gt;</span>
-    <span class="tag">&lt;baseResource</span> <span class="attribute-name">implementation</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.util.resource.ResourceCollection</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-      <span class="tag">&lt;resourcesAsCSV&gt;</span>src/main/webapp,/home/johndoe/path/to/my/other/source,/yet/another/folder<span class="tag">&lt;/resourcesAsCSV&gt;</span>
-    <span class="tag">&lt;/baseResource&gt;</span>
+    <span class="tag">&lt;resourceBases&gt;</span>
+      <span class="tag">&lt;resourceBase&gt;</span>src/main/webapp<span class="tag">&lt;/resourceBase&gt;</span>
+      <span class="tag">&lt;resourceBase&gt;</span>/home/johndoe/path/to/my/other/source<span class="tag">&lt;/resourceBase&gt;</span>
+      <span class="tag">&lt;resourceBase&gt;</span>/yet/another/folder<span class="tag">&lt;/resourceBase&gt;</span>
+    <span class="tag">&lt;/resourceBases&gt;</span>
   <span class="tag">&lt;/webApp&gt;</span>
 <span class="tag">&lt;/configuration&gt;</span></code></pre>
 </div>
@@ -11975,7 +12923,7 @@
 <p><code>SocketChannel</code>s that are passed to <code>SelectorManager</code> are wrapped into two related components: an <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/EndPoint.html"><code>EndPoint</code></a> and a <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/Connection.html"><code>Connection</code></a>.</p>
 </div>
 <div class="paragraph">
-<p><code>EndPoint</code> is the Jetty abstraction for a <code>SocketChannel</code>: you can read bytes from an <code>EndPoint</code> via <code>EndPoint.fill(ByteBuffer)</code>, you can write bytes to an <code>EndPoint</code> via <code>EndPoint.flush(ByteBuffer...)</code> and <code>EndPoint.write(Callback, ByteBuffer...)</code>, you can close an <code>EndPoint</code> via <code>EndPoint.close()</code>, etc.</p>
+<p><code>EndPoint</code> is the Jetty abstraction for a <code>SocketChannel</code> or a <code>DatagramChannel</code>: you can read bytes from an <code>EndPoint</code>, you can write bytes to an <code>EndPoint</code> , you can close an <code>EndPoint</code>, etc.</p>
 </div>
 <div class="paragraph">
 <p><code>Connection</code> is the Jetty abstraction that is responsible to read bytes from the <code>EndPoint</code> and to deserialize the read bytes into objects.
@@ -11983,13 +12931,13 @@
 Conversely, an HTTP/1.1 client-side <code>Connection</code> implementation is responsible to deserialize HTTP/1.1 response bytes into an HTTP response object.</p>
 </div>
 <div class="paragraph">
-<p><code>Connection</code> is the abstraction that implements the reading side of a specific protocol such as HTTP/1.1, or HTTP/2, or WebSocket: it is able to read incoming communication in that protocol.</p>
+<p><code>Connection</code> is the abstraction that implements the reading side of a specific protocol such as HTTP/1.1, or HTTP/2, or HTTP/3, or WebSocket: it is able to read incoming communication in that protocol.</p>
 </div>
 <div class="paragraph">
 <p>The writing side for a specific protocol <em>may</em> be implemented in the <code>Connection</code> but may also be implemented in other components, although eventually the bytes to be written will be written through the <code>EndPoint</code>.</p>
 </div>
 <div class="paragraph">
-<p>While there is primarily just one implementation of <code>EndPoint</code>,<a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/SocketChannelEndPoint.html"><code>SocketChannelEndPoint</code></a> (used both on the client-side and on the server-side), there are many implementations of <code>Connection</code>, typically two for each protocol (one for the client-side and one for the server-side).</p>
+<p>While there are primarily only two implementations of <code>EndPoint</code>,<a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/SocketChannelEndPoint.html"><code>SocketChannelEndPoint</code></a> for TCP and <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/DatagramChannelEndPoint.html"><code>DatagramChannelEndPoint</code></a> for UDP (used both on the client-side and on the server-side), there are many implementations of <code>Connection</code>, typically two for each protocol (one for the client-side and one for the server-side).</p>
 </div>
 <div class="paragraph">
 <p>The <code>EndPoint</code> and <code>Connection</code> pairs can be chained, for example in case of encrypted communication using the TLS protocol.
@@ -12000,26 +12948,14 @@
 <code>EndPoint</code> supports changing the <code>Connection</code> object on-the-fly via <code>EndPoint.upgrade(Connection)</code>.
 This allows to use the HTTP/1.1 <code>Connection</code> during the initial communication and later to replace it with a WebSocket <code>Connection</code>.</p>
 </div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-TODO: add a section on <code>UpgradeFrom</code> and <code>UpgradeTo</code>?
-</td>
-</tr>
-</table>
-</div>
 <div class="paragraph">
 <p><code>SelectorManager</code> is an abstract class because while it knows how to create concrete <code>EndPoint</code> instances, it does not know how to create protocol specific <code>Connection</code> instances.</p>
 </div>
 <div class="paragraph">
-<p>Creating <code>Connection</code> instances is performed on the server-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/server/ConnectionFactory.html"><code>ConnectionFactory</code></a>s and on the client-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/ClientConnectionFactory.html"><code>ClientConnectionFactory</code></a>s</p>
+<p>Creating <code>Connection</code> instances is performed on the server-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/server/ConnectionFactory.html"><code>ConnectionFactory</code></a>s and on the client-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/io/ClientConnectionFactory.html"><code>ClientConnectionFactory</code></a>s.</p>
 </div>
 <div class="paragraph">
-<p>On the server-side, the component that aggregates a <code>SelectorManager</code> with a set of <code>ConnectionFactory</code>s is <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/server/ServerConnector.html"><code>ServerConnector</code></a>s for TCP/IP sockets, and <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/unixdomain/server/UnixDomainServerConnector.html"><code>UnixDomainServerConnector</code></a> for Unix-Domain sockets (see the <a href="#pg-server-io-arch">server-side architecture section</a> for more information).</p>
+<p>On the server-side, the component that aggregates a <code>SelectorManager</code> with a set of <code>ConnectionFactory</code>s is <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/server/ServerConnector.html"><code>ServerConnector</code></a> for TCP sockets, <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/quic/server/QuicServerConnector.html"><code>QuicServerConnector</code></a> for QUIC sockets, and <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/unixdomain/server/UnixDomainServerConnector.html"><code>UnixDomainServerConnector</code></a> for Unix-Domain sockets (see the <a href="#pg-server-io-arch">server-side architecture section</a> for more information).</p>
 </div>
 <div class="paragraph">
 <p>On the client-side, the components that aggregates a <code>SelectorManager</code> with a set of <code>ClientConnectionFactory</code>s are <a href="https://www.eclipse.org/jetty/javadoc/jetty-10/org/eclipse/jetty/client/HttpClientTransport.html"><code>HttpClientTransport</code></a> subclasses (see the <a href="#pg-client-io-arch">client-side architecture section</a> for more information).</p>
@@ -12031,17 +12967,17 @@
 <p>The Jetty I/O library use Java NIO to handle I/O, so that I/O is non-blocking.</p>
 </div>
 <div class="paragraph">
-<p>At the Java NIO level, in order to be notified when a <code>SocketChannel</code> has data to be read, the <code>SelectionKey.OP_READ</code> flag must be set.</p>
+<p>At the Java NIO level, in order to be notified when a <code>SocketChannel</code> or <code>DatagramChannel</code> has data to be read, the <code>SelectionKey.OP_READ</code> flag must be set.</p>
 </div>
 <div class="paragraph">
 <p>In the Jetty I/O library, you can call <code>EndPoint.fillInterested(Callback)</code> to declare interest in the "read" (also called "fill") event, and the <code>Callback</code> parameter is the object that is notified when such an event occurs.</p>
 </div>
 <div class="paragraph">
-<p>At the Java NIO level, a <code>SocketChannel</code> is always writable, unless it becomes TCP congested.
-In order to be notified when a <code>SocketChannel</code> uncongests and it is therefore writable again, the <code>SelectionKey.OP_WRITE</code> flag must be set.</p>
+<p>At the Java NIO level, a <code>SocketChannel</code> or <code>DatagramChannel</code> is always writable, unless it becomes congested.
+In order to be notified when a channel uncongests and it is therefore writable again, the <code>SelectionKey.OP_WRITE</code> flag must be set.</p>
 </div>
 <div class="paragraph">
-<p>In the Jetty I/O library, you can call <code>EndPoint.write(Callback, ByteBuffer&#8230;&#8203;)</code> to write the <code>ByteBuffer</code>s and the <code>Callback</code> parameter is the object that is notified when the whole write is finished (i.e. <em>all</em> <code>ByteBuffer</code>s have been fully written, even if they are delayed by TCP congestion/uncongestion).</p>
+<p>In the Jetty I/O library, you can call <code>EndPoint.write(Callback, ByteBuffer&#8230;&#8203;)</code> to write the <code>ByteBuffer</code>s and the <code>Callback</code> parameter is the object that is notified when the whole write is finished (i.e. <em>all</em> <code>ByteBuffer</code>s have been fully written, even if they are delayed by congestion/uncongestion).</p>
 </div>
 <div class="paragraph">
 <p>The <code>EndPoint</code> APIs abstract out the Java NIO details by providing non-blocking APIs based on <code>Callback</code> objects for I/O operations.
@@ -12109,7 +13045,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="pg-arch-io-echo"><a class="anchor" href="#pg-arch-io-echo"></a><a class="link" href="#pg-arch-io-echo">Jetty I/O: Network Echo</a></h4>
+<h4 id="pg-arch-io-echo"><a class="anchor" href="#pg-arch-io-echo"></a><a class="link" href="#pg-arch-io-echo">Jetty I/O: TCP Network Echo</a></h4>
 <div class="paragraph">
 <p>With the concepts above it is now possible to write a simple, fully non-blocking, <code>Connection</code> implementation that simply echoes the bytes that it reads back to the other peer.</p>
 </div>
@@ -12449,7 +13385,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-jmx<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>10.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>10.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -13005,7 +13941,7 @@
 </div>
 <div class="paragraph">
 <p>The Jetty SLF4J binding only provides an appender that writes to <code>System.err</code>.
-For more advanced configurations (for example, logging to a file), use <a href="http://logback.qos.ch">LogBack</a>, or <a href="https://logging.apache.org/log4j/2.x/">Log4J2</a>, or your preferred SLF4J binding.</p>
+For more advanced configurations (for example, logging to a file), use <a href="http://logback.qos.ch">LogBack</a>, or <a href="https://logging.apache.org/log4j/2.x/">Log4j2</a>, or your preferred SLF4J binding.</p>
 </div>
 <div class="admonitionblock caution">
 <table>
@@ -13014,7 +13950,7 @@
 <i class="fa icon-caution" title="Caution"></i>
 </td>
 <td class="content">
-Only one binding can be present in the class-path or module-path. If you use the LogBack SLF4J binding or the Log4J2 SLF4J binding, remember to remove the Jetty SLF4J binding.
+Only one binding can be present in the class-path or module-path. If you use the LogBack SLF4J binding or the Log4j2 SLF4J binding, remember to remove the Jetty SLF4J binding.
 </td>
 </tr>
 </table>
@@ -13341,8 +14277,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 10.0.7<br>
-Last updated 2021-05-12 14:52:38 -0500
+Version 10.0.8<br>
+Last updated 2022-02-01 18:50:48 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-10/styles.css b/documentation/jetty-10/styles.css
index 0f4d380..ee1fff6 100644
--- a/documentation/jetty-10/styles.css
+++ b/documentation/jetty-10/styles.css
@@ -1,6 +1,6 @@
 /*
  * ========================================================================
- * Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+ * Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
diff --git a/documentation/jetty-10/toc.css b/documentation/jetty-10/toc.css
index e9eb822..c997911 100644
--- a/documentation/jetty-10/toc.css
+++ b/documentation/jetty-10/toc.css
@@ -1,6 +1,6 @@
 /*
  * ========================================================================
- * Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+ * Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
diff --git a/documentation/jetty-10/toc.js b/documentation/jetty-10/toc.js
index 30e1f07..3624911 100644
--- a/documentation/jetty-10/toc.js
+++ b/documentation/jetty-10/toc.js
@@ -1,6 +1,6 @@
 //
 // ========================================================================
-// Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+// Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //
 // This program and the accompanying materials are made available under the
 // terms of the Eclipse Public License v. 2.0 which is available at
diff --git a/documentation/jetty-11/asciidoctor.css b/documentation/jetty-11/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-11/asciidoctor.css
+++ b/documentation/jetty-11/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-11/contribution-guide/asciidoctor.css b/documentation/jetty-11/contribution-guide/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-11/contribution-guide/asciidoctor.css
+++ b/documentation/jetty-11/contribution-guide/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-11/contribution-guide/coderay-asciidoctor.css b/documentation/jetty-11/contribution-guide/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-11/contribution-guide/coderay-asciidoctor.css
+++ b/documentation/jetty-11/contribution-guide/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-11/contribution-guide/index.html b/documentation/jetty-11/contribution-guide/index.html
index 2ccd942..f3afe05 100644
--- a/documentation/jetty-11/contribution-guide/index.html
+++ b/documentation/jetty-11/contribution-guide/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Contribution Guide</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -17,8 +18,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 11.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 11.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Contribution Guide</div>
@@ -937,7 +938,7 @@
 <div class="content">
 <pre>//
 // ========================================================================
-// Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+// Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //
 // This program and the accompanying materials are made available under the
 // terms of the Eclipse Public License v. 2.0 which is available at
@@ -1095,8 +1096,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 11.0.7<br>
-Last updated 2021-05-12 15:27:21 -0500
+Version 11.0.8<br>
+Last updated 2022-01-27 18:21:06 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-11/index.html b/documentation/jetty-11/index.html
index 137b5b2..f838620 100644
--- a/documentation/jetty-11/index.html
+++ b/documentation/jetty-11/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty Documentation</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -16,8 +17,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 11.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 11.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Table of Contents</div>
@@ -68,8 +69,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 11.0.7<br>
-Last updated 2021-05-12 15:27:21 -0500
+Version 11.0.8<br>
+Last updated 2022-01-27 18:21:06 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-11/old_docs/asciidoctor.css b/documentation/jetty-11/old_docs/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-11/old_docs/asciidoctor.css
+++ b/documentation/jetty-11/old_docs/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-11/old_docs/coderay-asciidoctor.css b/documentation/jetty-11/old_docs/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-11/old_docs/coderay-asciidoctor.css
+++ b/documentation/jetty-11/old_docs/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-11/old_docs/index.html b/documentation/jetty-11/old_docs/index.html
index c534678..90aa3cc 100644
--- a/documentation/jetty-11/old_docs/index.html
+++ b/documentation/jetty-11/old_docs/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Old Documentation</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -17,8 +18,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 11.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 11.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Old Jetty Documentation</div>
@@ -885,15 +886,6 @@
 <li><a href="#deprecated-parameters">Deprecated Parameters</a></li>
 </ul>
 </li>
-<li><a href="#configuring-jetty-request-logs">Configuring Jetty Request Logs</a>
-<ul class="sectlevel3">
-<li><a href="#constructing-request-log-entry">Constructing a Request Log Entry</a></li>
-<li><a href="#implementing-request-log">Implementing a Request Log</a></li>
-<li><a href="#configuring-request-log">Configuring the Request Log module</a></li>
-<li><a href="#request-log-custom-writer">Introducing RequestLog.Writer</a></li>
-<li><a href="#configuring-separate-request-log-for-web-application">Configuring a Separate Request Log For a Web Application</a></li>
-</ul>
-</li>
 <li><a href="#configuring-logging-modules">Jetty Logging Integrations (SLF4J, Log4j, Logback, JCL, JUL)</a>
 <ul class="sectlevel3">
 <li><a href="#example-logging-slf4j">Logging with SLF4J</a></li>
@@ -1430,7 +1422,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in annotations/quick-annotations-setup.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ServerWithAnnotations.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in annotations/quick-annotations-setup.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ServerWithAnnotations.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -2830,7 +2822,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">[mybase] java -jar $JETTY_HOME/start.jar
 2017-08-31 10:19:58.855:INFO::main: Logging initialized @372ms to org.eclipse.jetty.util.log.StdErrLog
-2017-08-31 10:19:59.076:INFO:oejs.Server:main: jetty-11.0.7
+2017-08-31 10:19:59.076:INFO:oejs.Server:main: jetty-11.0.8
 2017-08-31 10:19:59.125:INFO:oejs.AbstractConnector:main: Started ServerConnector@421e98e0{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2017-08-31 10:19:59.150:INFO:oejus.SslContextFactory:main: x509=X509@5315b42e(jetty,h=[jetty.eclipse.org],w=[]) for SslContextFactory@2ef9b8bc(file:///var/my-jetty-base/etc/keystore,file:///var/my-jetty-base/etc/keystore)
 2017-08-31 10:19:59.151:INFO:oejus.SslContextFactory:main: x509=X509@5d624da6(mykey,h=[],w=[]) for SslContextFactory@2ef9b8bc(file:///var/my-jetty-base/etc/keystore,file:///var/my-jetty-base/etc/keystore)
@@ -2899,7 +2891,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">[my-base]$ java -jar /path/to/jetty-home/start.jar
 2017-08-31 10:31:32.955:INFO::main: Logging initialized @366ms to org.eclipse.jetty.util.log.StdErrLog
-2017-08-31 10:31:33.109:INFO:oejs.Server:main: jetty-11.0.7
+2017-08-31 10:31:33.109:INFO:oejs.Server:main: jetty-11.0.8
 2017-08-31 10:31:33.146:INFO:oejs.AbstractConnector:main: Started ServerConnector@2ef9b8bc{HTTP/1.1,[http/1.1]}{0.0.0.0:5231}
 ...
 2017-08-31 10:31:33.263:INFO:oejs.Server:main: Started @675ms</code></pre>
@@ -5006,7 +4998,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
     <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
     <span class="tag">&lt;artifactId&gt;</span>jetty-quickstart<span class="tag">&lt;/artifactId&gt;</span>
-    <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+    <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -5175,7 +5167,7 @@
 <div class="paragraph">
 <p>Jetty is decomposed into many jars and dependencies to achieve a minimal footprint by selecting the minimal set of jars.
 Typically it is best to use something like <a href="#jetty-maven-helloworld">Maven</a> to manage jars, however this tutorial uses an aggregate Jar that contains all of the required Jetty classes in one Jar.
-You can manually download the aggregate <a href="https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/11.0.7/jetty-all-11.0.7-uber.jar"><code>jetty-all.jar</code></a> using <code>curl</code> or a browser.</p>
+You can manually download the aggregate <a href="https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/11.0.8/jetty-all-11.0.8-uber.jar"><code>jetty-all.jar</code></a> using <code>curl</code> or a browser.</p>
 </div>
 <div class="quoteblock">
 <blockquote>
@@ -5218,7 +5210,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">&gt; mkdir Demo
 &gt; cd Demo
-&gt; curl -o jetty-all-uber.jar https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/11.0.7/jetty-all-11.0.7-uber.jar</code></pre>
+&gt; curl -o jetty-all-uber.jar https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/11.0.8/jetty-all-11.0.8-uber.jar</code></pre>
 </div>
 </div>
 </div>
@@ -5231,7 +5223,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/jetty-helloworld.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/jetty-helloworld.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5324,7 +5316,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SimplestServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SimplestServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5360,7 +5352,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5394,7 +5386,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5468,7 +5460,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5490,7 +5482,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5522,7 +5514,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5556,7 +5548,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5565,7 +5557,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5577,7 +5569,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5590,7 +5582,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5634,7 +5626,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedding-jetty.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -5672,7 +5664,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-file-server.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-file-server.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5704,7 +5696,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-split-file-server.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-split-file-server.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5744,7 +5736,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-many-connectors.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-many-connectors.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5786,7 +5778,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5799,7 +5791,7 @@
 <h5 id="_the-realm-properties-file"><a class="anchor" href="#_the-realm-properties-file"></a><a class="link" href="#_the-realm-properties-file">The Realm Properties File</a></h5>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="properties">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../examples/embedded/src/test/resources/realm.properties[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="properties">Unresolved directive in embedding/examples/embedded-secured-hello-handler.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../examples/embedded/src/test/resources/realm.properties[]</code></pre>
 </div>
 </div>
 </div>
@@ -5829,7 +5821,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-minimal-servlet.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-minimal-servlet.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5870,7 +5862,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-one-webapp.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/examples/embedded-one-webapp.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -5904,7 +5896,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedded-examples.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebAppWithJsp.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in embedding/embedded-examples.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebAppWithJsp.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -7149,7 +7141,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in extras/resource-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in extras/resource-handler.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -7658,7 +7650,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../jetty-rewrite/src/main/config/etc/jetty-rewrite.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../jetty-rewrite/src/main/config/etc/jetty-rewrite.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -7669,7 +7661,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../demos/demo-jetty-webapp/src/main/config/modules/demo.d/demo-rewrite-rules.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in extras/rewrite-handler.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../demos/demo-jetty-webapp/src/main/config/modules/demo.d/demo-rewrite-rules.xml[]</code></pre>
 </div>
 </div>
 <div class="sect4">
@@ -8803,7 +8795,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
 </div>
 </div>
 </div>
@@ -8997,7 +8989,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in frameworks/osgi.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -9818,7 +9810,7 @@
 <pre class="CodeRay highlight"><code data-lang="screen">[2093] java -jar start.jar
 
 2013-07-26 15:47:53.480:INFO:oejs.Server:main: jetty-9.0.4.v20130625
-2013-07-26 15:47:53.549:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/jetty-home-11.0.7/webapps/] at interval 1
+2013-07-26 15:47:53.549:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/jetty-home-11.0.8/webapps/] at interval 1
 Jul 26, 2013 3:47:53 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
 INFO: WSSERVLET12: JAX-WS context listener initializing
 Jul 26, 2013 3:47:56 PM com.sun.xml.ws.server.MonitorBase createRoot
@@ -10602,7 +10594,7 @@
 <pre class="CodeRay highlight"><code data-lang="screen">$ java -jar start.jar
 2017-09-20 15:45:11.986:INFO::main: Logging initialized @683ms to org.eclipse.jetty.util.log.StdErrLog
 2017-09-20 15:45:12.197:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended.  See documentation at https://www.eclipse.org/jetty/documentation/current/startup.html
-2017-09-20 15:45:12.243:INFO:oejs.Server:main: 11.0.7
+2017-09-20 15:45:12.243:INFO:oejs.Server:main: 11.0.8
 2017-09-20 15:45:12.266:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///installs/repository/jetty/webapps/] at interval 1
 2017-09-20 15:45:12.298:INFO:oejs.AbstractConnector:main: Started ServerConnector@39c0f4a{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2017-09-20 15:45:12.298:INFO:oejs.Server:main: Started @995ms</code></pre>
@@ -10649,14 +10641,14 @@
 [my-base]$ java -jar /path/to/jetty-home/start.jar
 2017-09-20 16:23:03.563:INFO::main: Logging initialized @429ms to org.eclipse.jetty.util.log.StdErrLog
 2017-09-20 16:23:03.802:WARN::main: demo test-realm is deployed. DO NOT USE IN PRODUCTION!
-2017-09-20 16:23:03.804:INFO:oejs.Server:main: 11.0.7
+2017-09-20 16:23:03.804:INFO:oejs.Server:main: 11.0.8
 2017-09-20 16:23:03.819:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///installs/repository/jetty/demo-base/webapps/] at interval 1
 2017-09-20 16:23:04.098:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=102ms
 2017-09-20 16:23:04.103:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!
 2017-09-20 16:23:04.267:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
 2017-09-20 16:23:04.267:INFO:oejs.session:main: No SessionScavenger set, using defaults
 2017-09-20 16:23:04.268:INFO:oejs.session:main: Scavenging every 660000ms
-2017-09-20 16:23:04.306:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@371a67ec{/async-rest,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/WEB-INF/lib/example-async-rest-jar-11.0.7.jar!/META-INF/resources],AVAILABLE}{/async-rest.war}
+2017-09-20 16:23:04.306:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@371a67ec{/async-rest,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-5319296087878801290.dir/webapp/WEB-INF/lib/example-async-rest-jar-11.0.8.jar!/META-INF/resources],AVAILABLE}{/async-rest.war}
 2017-09-20 16:23:04.429:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=53ms
 2017-09-20 16:23:04.432:WARN::main: test webapp is deployed. DO NOT USE IN PRODUCTION!
 2017-09-20 16:23:04.511:INFO:oejsh.ManagedAttributeListener:main: update PushFilter null-&gt;org.eclipse.jetty.servlets.PushCacheFilter@2362f559 on o.e.j.w.WebAppContext@35e2d654{/test,file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test.war-_test-any-6279588879522983394.dir/webapp/,STARTING}{/test.war}
@@ -10673,7 +10665,7 @@
 2017-09-20 16:23:05.098:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@506ae4d4{/test-jaas,file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-jaas.war-_test-jaas-any-8067423971450448377.dir/webapp/,AVAILABLE}{/test-jaas.war}
 2017-09-20 16:23:05.182:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=37ms
 2017-09-20 16:23:05.184:WARN::main: test-spec webapp is deployed. DO NOT USE IN PRODUCTION!
-2017-09-20 16:23:05.243:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@45099dd3{/test-spec,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/WEB-INF/lib/test-web-fragment-11.0.7.jar!/META-INF/resources],AVAILABLE}{/test-spec.war}
+2017-09-20 16:23:05.243:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@45099dd3{/test-spec,[file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/, jar:file:///private/var/folders/h6/yb_lbnnn11g0y1jjlvqg631h0000gn/T/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-1205866915335004234.dir/webapp/WEB-INF/lib/test-web-fragment-11.0.8.jar!/META-INF/resources],AVAILABLE}{/test-spec.war}
 2017-09-20 16:23:05.247:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.MovedContextHandler@3e08ff24{/oldContextPath,null,AVAILABLE}
 2017-09-20 16:23:05.274:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=18ms
 2017-09-20 16:23:05.296:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@5ddeb7cb{/,file:///installs/repository/jetty/demo-base/webapps/ROOT/,AVAILABLE}{/ROOT}
@@ -10810,7 +10802,7 @@
 2015-06-04 11:10:16.460:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///tmp/mybase/webapps/] at interval 1
 2015-06-04 11:10:16.581:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!
 2015-06-04 11:10:16.589:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
-2015-06-04 11:10:16.628:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@1a407d53{/,[file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/, jar:file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/WEB-INF/lib/example-async-rest-jar-11.0.7.jar!/META-INF/resources],AVAILABLE}{/ROOT.war}
+2015-06-04 11:10:16.628:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@1a407d53{/,[file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/, jar:file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/WEB-INF/lib/example-async-rest-jar-11.0.8.jar!/META-INF/resources],AVAILABLE}{/ROOT.war}
 2015-06-04 11:10:16.645:INFO:oejs.ServerConnector:main: Started ServerConnector@3abbfa04{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2015-06-04 11:10:16.646:INFO:oejs.Server:main: Started @634ms</code></pre>
 </div>
@@ -11161,7 +11153,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -11380,7 +11372,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/test-realm.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in gettingstarted/configuring/what-to-configure.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/test-realm.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -13625,7 +13617,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="plain">Unresolved directive in jsp/configuring-jsp.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../jetty-home/src/main/resources/modules/jsp.mod[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="plain">Unresolved directive in jsp/configuring-jsp.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../jetty-home/src/main/resources/modules/jsp.mod[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -14396,7 +14388,7 @@
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">2016-10-21 15:31:01.248:INFO::main: Logging initialized @332ms to org.eclipse.jetty.util.log.StdErrLog
-2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-11.0.7
+2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-11.0.8
 2016-10-21 15:31:01.400:INFO:oejs.AbstractConnector:main: Started ServerConnector@2c330fbc{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2016-10-21 15:31:01.400:INFO:oejs.Server:main: Started @485ms</code></pre>
 </div>
@@ -14407,7 +14399,7 @@
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">2016-10-21 15:31:35.020:INFO::main: Logging initialized @340ms to org.eclipse.jetty.util.log.StdErrLog
-2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-11.0.7
+2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-11.0.8
 2016-10-21 15:31:35.174:INFO:org.eclipse.jetty.server.AbstractConnector:main: Started ServerConnector@edf4efb{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 2016-10-21 15:31:35.175:INFO:org.eclipse.jetty.server.Server:main: Started @495ms</code></pre>
 </div>
@@ -14466,165 +14458,6 @@
 </div>
 </div>
 <div class="sect2">
-<h3 id="configuring-jetty-request-logs"><a class="anchor" href="#configuring-jetty-request-logs"></a><a class="link" href="#configuring-jetty-request-logs">Configuring Jetty Request Logs</a></h3>
-<div class="paragraph">
-<p>Request logs are a record of the requests that the server has processed.
-There is one entry per request received, and commonly in the standard NCSA format, so you can use tools like <a href="http://en.wikipedia.org/wiki/Webalizer">Webalizer</a> to analyze them conveniently.</p>
-</div>
-<div class="sect3">
-<h4 id="constructing-request-log-entry"><a class="anchor" href="#constructing-request-log-entry"></a><a class="link" href="#constructing-request-log-entry">Constructing a Request Log Entry</a></h4>
-<div class="paragraph">
-<p>A standard request log entry includes the client IP address, date, method, URL, result, size, referrer, user agent and latency.
-For example:</p>
-</div>
-<div class="literalblock">
-<div class="content">
-<pre>123.4.5.6 - - [20/Jul/2016:10:16:17 +0000]
-  "GET /jetty/tut/XmlConfiguration.html HTTP/1.1"
-  200 76793 "http://localhost:8080/jetty/tut/logging.html"
-  "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8" 342</pre>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="implementing-request-log"><a class="anchor" href="#implementing-request-log"></a><a class="link" href="#implementing-request-log">Implementing a Request Log</a></h4>
-<div class="paragraph">
-<p>Jetty provides an implementation called <code>NCSARequestLog</code> which supports the NCSA format in files that will roll over on a daily basis.</p>
-</div>
-<div class="paragraph">
-<p>The <a href="http://logback.qos.ch/">Logback Project</a> offers <a href="http://logback.qos.ch/access.html">another implementation</a> of a <code>RequestLog</code> interface, providing rich and powerful HTTP-access log functionality.</p>
-</div>
-<div class="paragraph">
-<p>If neither of these options meets your needs, you can implement a custom request logger by implementing Jetty&#8217;s <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/server/RequestLog.html"><code>RequestLog.java</code></a> interface and plugging it in similar to the <code>NCSARequestLog</code>, as shown below.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="configuring-request-log"><a class="anchor" href="#configuring-request-log"></a><a class="link" href="#configuring-request-log">Configuring the Request Log module</a></h4>
-<div class="paragraph">
-<p>To enable the Request Log module for the entire server via the Jetty distribution, it first needs to be enabled on the command line:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">[my-base]$ java -jar /path/to/jetty-home/start.jar --add-to-start=requestlog
-
-INFO: requestlog      initialised in ${jetty.base}/start.d/requestlog.ini
-MKDIR: ${jetty.base}/logs
-INFO: Base directory was modified</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>The above command will add a new <code>requestlog.ini</code> file to your <a href="#start-vs-startd"><code>{$jetty.base}/start.d</code> directory</a>.</p>
-</div>
-<div class="quoteblock">
-<blockquote>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-By default, request logs are not set to be appended, meaning a the log file is wiped clean upon sever restart.
-You can change this setting by editing the <code>requestlog.ini</code> and un-commenting the line that reads <code>jetty.requestlog.append=true</code>.
-</td>
-</tr>
-</table>
-</div>
-</blockquote>
-</div>
-<div class="paragraph">
-<p>The equivalent code for embedded usages of Jetty is:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">NCSARequestLog requestLog = <span class="keyword">new</span> NCSARequestLog(<span class="string"><span class="delimiter">&quot;</span><span class="content">/var/logs/jetty/jetty-yyyy_mm_dd.request.log</span><span class="delimiter">&quot;</span></span>);
-requestLog.setAppend(<span class="predefined-constant">true</span>);
-requestLog.setExtended(<span class="predefined-constant">false</span>);
-requestLog.setLogTimeZone(<span class="string"><span class="delimiter">&quot;</span><span class="content">GMT</span><span class="delimiter">&quot;</span></span>);
-requestLog.setLogLatency(<span class="predefined-constant">true</span>);
-requestLog.setRetainDays(<span class="string"><span class="delimiter">&quot;</span><span class="content">90</span><span class="delimiter">&quot;</span></span>);
-
-server.setRequestLog(requestLog);</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>This configures a request log in <code>{$jetty.home}/logs</code> with filenames including the date.
-Existing log files are appended to and the extended NCSA format is used in the GMT time zone.</p>
-</div>
-<div class="paragraph">
-<p>The above configuration enables Log Latency, which is the amount of time it took the server to handle the request.
-This value is measured in milliseconds and is appended to the the log file for each request.</p>
-</div>
-<div class="paragraph">
-<p>You can also customize the number of days you wish to keep request logs.
-By default, log files are kept for 90 days before being deleted.
-The value for <code>retainDays</code> (xml) or <code>setRetainDays</code> (Java) should be configured as <em>1 + n</em> days.
-For example, if you wanted to keep the logs for the current day and the day prior you would set the <code>retainDays</code> (or <code>setRetainDays</code>) value to 2.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="request-log-custom-writer"><a class="anchor" href="#request-log-custom-writer"></a><a class="link" href="#request-log-custom-writer">Introducing RequestLog.Writer</a></h4>
-<div class="paragraph">
-<p>The concept of a <code>RequestLog.Writer</code>, introduced in Jetty 9.4.15, manages the writing to a log the string generated by the <code>RequestLog</code>.
-This allows the <code>CustomRequestLog</code> to match the functionality of other <code>RequestLogger</code> implementations by plugging in any <code>RequestLog.Writer</code> and a custom format string.
-Jetty currently has implementations of <code>RequestLog.Writer</code>, <code>RequestLogWriter</code>, <code>AsyncRequestLogWriter</code>, and <code>Slf4jRequestLogWriter</code>.</p>
-</div>
-<div class="paragraph">
-<p>So, the way to create an asynchronous <code>RequestLog</code> using the extended NCSA format has been changed from:</p>
-</div>
-<div class="paragraph">
-<p><code>new AsyncNcsaRequestLog(filename)</code></p>
-</div>
-<div class="paragraph">
-<p>to:</p>
-</div>
-<div class="paragraph">
-<p><code>new CustomRequestLog(new AsyncRequestLogWriter(filename), CustomRequestLog.EXTENDED_NCSA_FORMAT)</code></p>
-</div>
-<div class="paragraph">
-<p>Additionally, there are now two settings for the log timezone to be configured.
-There is the configuration for logging the request time, which is set in the <code>timeZone</code> parameter in the <code>%t</code> format code of the string, given in the format <code>%{format|timeZone|locale}t</code>.</p>
-</div>
-<div class="paragraph">
-<p>The other <code>timeZone</code> parameter relates to the generation of the log file name (both at creation and roll over).
-This is configured in the <code>requestlog</code> module file, or can be used as a setter on <code>RequestLogWriter</code> via XML.</p>
-</div>
-<div class="paragraph">
-<p>Both timezones are set to GMT by default.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="configuring-separate-request-log-for-web-application"><a class="anchor" href="#configuring-separate-request-log-for-web-application"></a><a class="link" href="#configuring-separate-request-log-for-web-application">Configuring a Separate Request Log For a Web Application</a></h4>
-<div class="paragraph">
-<p>To configure a separate request log for specific a web application, add the following to the context XML file.</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;Configure</span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.webapp.WebAppContext</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-  ...
-  <span class="tag">&lt;Call</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">insertHandler</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-    <span class="tag">&lt;Arg&gt;</span>
-      <span class="tag">&lt;New</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">RequestLog</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.server.handler.RequestLogHandler</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-        <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">requestLog</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-          <span class="tag">&lt;New</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">RequestLogImpl</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.server.NCSARequestLog</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">filename</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span><span class="tag">&lt;Property</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">jetty.logs</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">default</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">./logs</span><span class="delimiter">&quot;</span></span><span class="tag">/&gt;</span>/test-yyyy_mm_dd.request.log<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">filenameDateFormat</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>yyyy_MM_dd<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">LogTimeZone</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>GMT<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">retainDays</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>90<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">append</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>true<span class="tag">&lt;/Set&gt;</span>
-            <span class="tag">&lt;Set</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">LogLatency</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>true<span class="tag">&lt;/Set&gt;</span>
-          <span class="tag">&lt;/New&gt;</span>
-        <span class="tag">&lt;/Set&gt;</span>
-      <span class="tag">&lt;/New&gt;</span>
-    <span class="tag">&lt;/Arg&gt;</span>
-  <span class="tag">&lt;/Call&gt;</span>
-  ...
-<span class="tag">&lt;/Configure&gt;</span></code></pre>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
 <h3 id="configuring-logging-modules"><a class="anchor" href="#configuring-logging-modules"></a><a class="link" href="#configuring-logging-modules">Jetty Logging Integrations (SLF4J, Log4j, Logback, JCL, JUL)</a></h3>
 <div class="paragraph">
 <p>Jetty provides support for several logging frameworks including SLF4J, Java Commons Logging (JCL), Java Util Logging (JUL), Log4j (including version 2), and Logback.
@@ -15140,7 +14973,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">[my-base]$ java -jar /path/to/jetty-home/start.jar
 419  [main] INFO  org.eclipse.jetty.util.log - Logging initialized @508ms to org.eclipse.jetty.util.log.Slf4jLog
-540  [main] INFO  org.eclipse.jetty.server.Server - jetty-11.0.7
+540  [main] INFO  org.eclipse.jetty.server.Server - jetty-11.0.8
 575  [main] INFO  o.e.jetty.server.AbstractConnector - Started ServerConnector@3c0ecd4b{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
 575  [main] INFO  org.eclipse.jetty.server.Server - Started @668ms</code></pre>
 </div>
@@ -15577,8 +15410,8 @@
 Downloading JDK...
 Copying openjdk-1.7.0_21.tar.gz from the buildpack cache ...
 Unpacking JDK to .jdk
-Downloading Jetty: jetty-home-11.0.7.tar.gz
-Downloading jetty-home-11.0.7.tar.gz from http://repo2.maven.org/maven2/org/eclipse/jetty/jetty-home/10.0.0.v202012xx/ ...
+Downloading Jetty: jetty-home-11.0.8.tar.gz
+Downloading jetty-home-11.0.8.tar.gz from http://repo2.maven.org/maven2/org/eclipse/jetty/jetty-home/10.0.0.v202012xx/ ...
 Unpacking Jetty to .jetty
 -&gt; Uploading staged droplet (36M)
 -&gt; Uploaded droplet
@@ -16837,7 +16670,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in security/authentication.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in security/authentication.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 </div>
@@ -16854,7 +16687,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in security/authentication.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../jetty-jaspi/src/main/config/etc/jaspi/jaspi-demo.xml[tags=documentation]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in security/authentication.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../jetty-jaspi/src/main/config/etc/jaspi/jaspi-demo.xml[tags=documentation]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -17062,7 +16895,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp lib/jetty-util-11.0.7.jar org.eclipse.jetty.util.security.Password
+<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp lib/jetty-util-11.0.8.jar org.eclipse.jetty.util.security.Password
 
 Usage - java org.eclipse.jetty.util.security.Password [&lt;user&gt;] &lt;password&gt;
 If the password is ?, the user will be prompted for the password</code></pre>
@@ -17073,7 +16906,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-11.0.7.jar org.eclipse.jetty.util.security.Password username password
+<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-11.0.8.jar org.eclipse.jetty.util.security.Password username password
 2017-12-13 11:19:27.928:INFO::main: Logging initialized @95ms to org.eclipse.jetty.util.log.StdErrLog
 password
 OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v
@@ -17114,7 +16947,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-11.0.7.jar org.eclipse.jetty.util.security.Password username username:realm:password
+<pre class="CodeRay highlight"><code data-lang="screen">$ java -cp ../lib/jetty-util-11.0.8.jar org.eclipse.jetty.util.security.Password username username:realm:password
 2017-12-13 11:34:33.263:INFO::main: Logging initialized @97ms to org.eclipse.jetty.util.log.StdErrLog
 username:realm:password
 OBF:1w281yf41v1x1z7e1xmi1v1p1tvv1v901c3j1x8k1ugo1ri71uh21x8a1c3j1v9m1tv71v2p1xms1z7o1v2h1yf21w1a
@@ -18257,24 +18090,24 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/downloads/jetty-home-11.0.7.tar.gz
-[/opt/jetty]# cd jetty-home-11.0.7/
-[/opt/jetty/jetty-home-11.0.7]# ls
+<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/downloads/jetty-home-11.0.8.tar.gz
+[/opt/jetty]# cd jetty-home-11.0.8/
+[/opt/jetty/jetty-home-11.0.8]# ls
 bin        lib                         modules      resources  start.jar
 demo-base  license-eplv10-aslv20.html  notice.html  start.d    VERSION.txt
 etc        logs                        README.TXT   start.ini  webapps
 
-[/opt/jetty/jetty-home-11.0.7]# cp bin/jetty.sh /etc/init.d/jetty
-[/opt/jetty/jetty-home-11.0.7]# echo JETTY_HOME=`pwd` &gt; /etc/default/jetty
-[/opt/jetty/jetty-home-11.0.7]# cat /etc/default/jetty
-JETTY_HOME=/opt/jetty/jetty-home-11.0.7
+[/opt/jetty/jetty-home-11.0.8]# cp bin/jetty.sh /etc/init.d/jetty
+[/opt/jetty/jetty-home-11.0.8]# echo JETTY_HOME=`pwd` &gt; /etc/default/jetty
+[/opt/jetty/jetty-home-11.0.8]# cat /etc/default/jetty
+JETTY_HOME=/opt/jetty/jetty-home-11.0.8
 
-[/opt/jetty/jetty-home-11.0.7]# service jetty start
+[/opt/jetty/jetty-home-11.0.8]# service jetty start
 Starting Jetty: OK Wed Nov 20 10:26:53 MST 2013</code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>From this demonstration we can see that Jetty started successfully as a Unix Service from the <code>/opt/jetty/jetty-home-11.0.7</code> directory.</p>
+<p>From this demonstration we can see that Jetty started successfully as a Unix Service from the <code>/opt/jetty/jetty-home-11.0.8</code> directory.</p>
 </div>
 <div class="paragraph">
 <p>This configuration works well but it is running Jetty as the root user.</p>
@@ -18382,9 +18215,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/Downloads/jetty-home-11.0.7.tar.gz
+<pre class="CodeRay highlight"><code data-lang="screen">[/opt/jetty]# tar -zxf /home/user/Downloads/jetty-home-11.0.8.tar.gz
 [/opt/jetty]# ls -F
-jetty-home-11.0.7/
+jetty-home-11.0.8/
 [/opt/jetty]# mkdir /opt/jetty/temp</code></pre>
 </div>
 </div>
@@ -18420,7 +18253,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen"># cd /opt/web/mybase/
 [/opt/web/mybase]# ls
-[/opt/web/mybase]# java -jar /opt/jetty/jetty-home-11.0.7/start.jar \
+[/opt/web/mybase]# java -jar /opt/jetty/jetty-home-11.0.8/start.jar \
    --add-to-start=deploy,http,console-capture
    INFO  : webapp          transitively enabled, ini template available with --add-to-start=webapp
    INFO  : server          transitively enabled, ini template available with --add-to-start=server
@@ -18499,8 +18332,8 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="screen"># cp /opt/jetty/jetty-home-11.0.7/bin/jetty.sh /etc/init.d/jetty
-# echo &quot;JETTY_HOME=/opt/jetty/jetty-home-11.0.7&quot; &gt; /etc/default/jetty
+<pre class="CodeRay highlight"><code data-lang="screen"># cp /opt/jetty/jetty-home-11.0.8/bin/jetty.sh /etc/init.d/jetty
+# echo &quot;JETTY_HOME=/opt/jetty/jetty-home-11.0.8&quot; &gt; /etc/default/jetty
 # echo &quot;JETTY_BASE=/opt/web/mybase&quot; &gt;&gt; /etc/default/jetty
 # echo &quot;TMPDIR=/opt/jetty/temp&quot; &gt;&gt; /etc/default/jetty</code></pre>
 </div>
@@ -18513,32 +18346,32 @@
 <pre class="CodeRay highlight"><code data-lang="screen"># service jetty status
 Checking arguments to Jetty:
 START_INI      =  /opt/web/mybase/start.ini
-JETTY_HOME     =  /opt/jetty/jetty-home-11.0.7
+JETTY_HOME     =  /opt/jetty/jetty-home-11.0.8
 JETTY_BASE     =  /opt/web/mybase
-JETTY_CONF     =  /opt/jetty/jetty-home-11.0.7/etc/jetty.conf
+JETTY_CONF     =  /opt/jetty/jetty-home-11.0.8/etc/jetty.conf
 JETTY_PID      =  /var/run/jetty.pid
-JETTY_START    =  /opt/jetty/jetty-home-11.0.7/start.jar
+JETTY_START    =  /opt/jetty/jetty-home-11.0.8/start.jar
 CLASSPATH      =
 JAVA           =  /usr/bin/java
 JAVA_OPTIONS   =  -Djetty.state=/opt/web/mybase/jetty.state
        -Djetty.logs=/opt/web/mybase/logs
-       -Djetty.home=/opt/jetty/jetty-home-11.0.7
+       -Djetty.home=/opt/jetty/jetty-home-11.0.8
        -Djetty.base=/opt/web/mybase
        -Djava.io.tmpdir=/opt/jetty/temp
 JETTY_ARGS     =  console-capture.xml jetty-started.xml
 RUN_CMD        =  /usr/bin/java
        -Djetty.state=/opt/web/mybase/jetty.state
        -Djetty.logs=/opt/web/mybase/logs
-       -Djetty.home=/opt/jetty/jetty-home-11.0.7
+       -Djetty.home=/opt/jetty/jetty-home-11.0.8
        -Djetty.base=/opt/web/mybase
        -Djava.io.tmpdir=/opt/jetty/temp
-       -jar /opt/jetty/jetty-home-11.0.7/start.jar
+       -jar /opt/jetty/jetty-home-11.0.8/start.jar
        console-capture.xml
        jetty-started.xml</code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>You now have a configured <code>${jetty.base}</code> in <code>/opt/web/mybase</code> and a <code>${jetty.home}</code> in <code>/opt/jetty/jetty-home-11.0.7</code>, along with the service level files necessary to start the service.</p>
+<p>You now have a configured <code>${jetty.base}</code> in <code>/opt/web/mybase</code> and a <code>${jetty.home}</code> in <code>/opt/jetty/jetty-home-11.0.8</code>, along with the service level files necessary to start the service.</p>
 </div>
 <div class="paragraph">
 <p>Test the service to make sure it starts up and runs successfully.</p>
@@ -18647,7 +18480,7 @@
 <p>Download a copy of the ZIP distribution from the <a href="#jetty-downloading">Official Eclipse Download Site</a></p>
 </div>
 <div class="paragraph">
-<p>Extract the contents of the <code>jetty-home-11.0.7</code> directory to <code>C:\opt\jetty</code></p>
+<p>Extract the contents of the <code>jetty-home-11.0.8</code> directory to <code>C:\opt\jetty</code></p>
 </div>
 <div class="paragraph">
 <p>Once complete, the contents of the <code>C:\opt\jetty</code> directory should look like this:</p>
@@ -19624,7 +19457,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in tuning/limit-load.adoc - include::/Users/joakim/Code/Jetty/jetty.project-11.0.x/documentation/jetty-documentation/../jetty-server/src/main/config/etc/jetty-lowresources.xml[]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="xml">Unresolved directive in tuning/limit-load.adoc - include::/home/simon/opensource/jetty/11.0/documentation/jetty-documentation/../jetty-server/src/main/config/etc/jetty-lowresources.xml[]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19678,7 +19511,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyEchoServlet.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyEchoServlet.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19721,7 +19554,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoCreator.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoCreator.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19730,7 +19563,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/Users/joakim/Code/Jetty/jetty.project-<span class="float">11.0</span>.x/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoServlet.java<span class="type">[]</span></code></pre>
+<pre class="CodeRay highlight"><code data-lang="java">Unresolved directive in websockets/jetty/jetty-websocket-server-api.adoc - include::/home/simon/opensource/jetty/<span class="float">11.0</span>/documentation/jetty-documentation/../jetty-websocket/websocket-jetty-tests/src/test/java/org/eclipse/jetty/websocket/tests/examples/MyAdvancedEchoServlet.java<span class="type">[]</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -19777,8 +19610,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 11.0.7<br>
-Last updated 2021-05-12 15:27:21 -0500
+Version 11.0.8<br>
+Last updated 2022-01-27 18:21:06 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache
index 70baea4..1d69159 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-0f37d1d5b12f280e1587df6f3d528998.png.cache
@@ -1 +1 @@
-{"checksum":"0f37d1d5b12f280e1587df6f3d528998","options":{"size_limit":"4096"},"width":351,"height":245}
\ No newline at end of file
+{"checksum":"0f37d1d5b12f280e1587df6f3d528998","options":{"size_limit":"4096"},"width":367,"height":260}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache
index 2882c0a..8677da7 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-176305f848d18dc8b0c4ef7bd331705d.png.cache
@@ -1 +1 @@
-{"checksum":"176305f848d18dc8b0c4ef7bd331705d","options":{"size_limit":"4096"},"width":374,"height":267}
\ No newline at end of file
+{"checksum":"176305f848d18dc8b0c4ef7bd331705d","options":{"size_limit":"4096"},"width":393,"height":348}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache
index a240360..b1aa0b4 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-2830e38460d606111888c5df2a645163.png.cache
@@ -1 +1 @@
-{"checksum":"2830e38460d606111888c5df2a645163","options":{"size_limit":"4096"},"width":332,"height":623}
\ No newline at end of file
+{"checksum":"2830e38460d606111888c5df2a645163","options":{"size_limit":"4096"},"width":328,"height":623}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache
index a032db4..2475634 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-70817cc5c7137abc9759cdcd3edbb658.png.cache
@@ -1 +1 @@
-{"checksum":"70817cc5c7137abc9759cdcd3edbb658","options":{"size_limit":"4096"},"width":219,"height":397}
\ No newline at end of file
+{"checksum":"70817cc5c7137abc9759cdcd3edbb658","options":{"size_limit":"4096"},"width":216,"height":397}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache
index 172db00..d195447 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-7387dfbb6f9fb9cfa951a697aca488a8.png.cache
@@ -1 +1 @@
-{"checksum":"7387dfbb6f9fb9cfa951a697aca488a8","options":{"size_limit":"4096"},"width":135,"height":284}
\ No newline at end of file
+{"checksum":"7387dfbb6f9fb9cfa951a697aca488a8","options":{"size_limit":"4096"},"width":133,"height":284}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache
index cb6c307..18f5414 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-792f4cd700f2b5af8fedd7b0249d25b4.png.cache
@@ -1 +1 @@
-{"checksum":"792f4cd700f2b5af8fedd7b0249d25b4","options":{"size_limit":"4096"},"width":686,"height":174}
\ No newline at end of file
+{"checksum":"792f4cd700f2b5af8fedd7b0249d25b4","options":{"size_limit":"4096"},"width":685,"height":174}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache
index f0c6bf5..279f8df 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-8a7fb4bb9c84453a4bf01a24558e8026.png.cache
@@ -1 +1 @@
-{"checksum":"8a7fb4bb9c84453a4bf01a24558e8026","options":{"size_limit":"4096"},"width":413,"height":420}
\ No newline at end of file
+{"checksum":"8a7fb4bb9c84453a4bf01a24558e8026","options":{"size_limit":"4096"},"width":407,"height":417}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache
index fcf8f5f..3065b25 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-cb8a854642d32c964b17f0a090ef16e3.png.cache
@@ -1 +1 @@
-{"checksum":"cb8a854642d32c964b17f0a090ef16e3","options":{"size_limit":"4096"},"width":445,"height":430}
\ No newline at end of file
+{"checksum":"cb8a854642d32c964b17f0a090ef16e3","options":{"size_limit":"4096"},"width":445,"height":429}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache
index 1bad91c..43357d7 100644
--- a/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache
+++ b/documentation/jetty-11/operations-guide/.asciidoctor/diagram/diag-e2488cc783b3434076c5a44ee7f19a2b.png.cache
@@ -1 +1 @@
-{"checksum":"e2488cc783b3434076c5a44ee7f19a2b","options":{"size_limit":"4096"},"width":376,"height":420}
\ No newline at end of file
+{"checksum":"e2488cc783b3434076c5a44ee7f19a2b","options":{"size_limit":"4096"},"width":372,"height":417}
\ No newline at end of file
diff --git a/documentation/jetty-11/operations-guide/asciidoctor.css b/documentation/jetty-11/operations-guide/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-11/operations-guide/asciidoctor.css
+++ b/documentation/jetty-11/operations-guide/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-11/operations-guide/coderay-asciidoctor.css b/documentation/jetty-11/operations-guide/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-11/operations-guide/coderay-asciidoctor.css
+++ b/documentation/jetty-11/operations-guide/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-11/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png b/documentation/jetty-11/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png
index cbaac46..a3c811b 100644
--- a/documentation/jetty-11/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png
+++ b/documentation/jetty-11/operations-guide/images/diag-0f37d1d5b12f280e1587df6f3d528998.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png b/documentation/jetty-11/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png
index c8cd925..6c45887 100644
--- a/documentation/jetty-11/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png
+++ b/documentation/jetty-11/operations-guide/images/diag-176305f848d18dc8b0c4ef7bd331705d.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png b/documentation/jetty-11/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png
index 4369313..9b3af95 100644
--- a/documentation/jetty-11/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png
+++ b/documentation/jetty-11/operations-guide/images/diag-2830e38460d606111888c5df2a645163.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png b/documentation/jetty-11/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png
index 2f67b61..8033f2f 100644
--- a/documentation/jetty-11/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png
+++ b/documentation/jetty-11/operations-guide/images/diag-70817cc5c7137abc9759cdcd3edbb658.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png b/documentation/jetty-11/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png
index 84c7c97..c485cd7 100644
--- a/documentation/jetty-11/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png
+++ b/documentation/jetty-11/operations-guide/images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png b/documentation/jetty-11/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png
index dba400e..7dfc0a2 100644
--- a/documentation/jetty-11/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png
+++ b/documentation/jetty-11/operations-guide/images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png b/documentation/jetty-11/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png
index 37859ca..af8ccd7 100644
--- a/documentation/jetty-11/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png
+++ b/documentation/jetty-11/operations-guide/images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png b/documentation/jetty-11/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png
index 6f6202a..7a990b1 100644
--- a/documentation/jetty-11/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png
+++ b/documentation/jetty-11/operations-guide/images/diag-9f323b812fd1edc8217715ca0c2ba8e9.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png b/documentation/jetty-11/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png
index 0bfa71e..1a9ae7d 100644
--- a/documentation/jetty-11/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png
+++ b/documentation/jetty-11/operations-guide/images/diag-cb8a854642d32c964b17f0a090ef16e3.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png b/documentation/jetty-11/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png
index c182024..35d2d7c 100644
--- a/documentation/jetty-11/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png
+++ b/documentation/jetty-11/operations-guide/images/diag-e2488cc783b3434076c5a44ee7f19a2b.png
Binary files differ
diff --git a/documentation/jetty-11/operations-guide/index.html b/documentation/jetty-11/operations-guide/index.html
index 03baed4..db7483b 100644
--- a/documentation/jetty-11/operations-guide/index.html
+++ b/documentation/jetty-11/operations-guide/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Operations Guide</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -20,8 +21,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 11.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 11.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Operations Guide</div>
@@ -59,6 +60,7 @@
 <li><a href="#og-start-configure-enable">Enabling Modules</a></li>
 <li><a href="#og-start-configure-disable">Disabling Modules</a></li>
 <li><a href="#og-start-configure-edit-ini">Editing <code>*.ini</code> Files</a></li>
+<li><a href="#og-start-configure-enable-command-line">Enabling Modules on Command Line</a></li>
 <li><a href="#og-start-configure-custom-module">Adding Your Own Modules</a></li>
 <li><a href="#og-start-configure-custom-module-exec">Custom Module with JVM Options</a></li>
 <li><a href="#og-start-configure-display">Displaying the Configuration</a></li>
@@ -115,10 +117,11 @@
 <li><a href="#og-modules-custom-create">Creating a New Module</a></li>
 </ul>
 </li>
-<li><a href="#og-modules-standard">Standard Modules</a></li>
-<li><a href="#og-module-alpn">Module <code>alpn</code></a>
+<li><a href="#og-modules-standard">Standard Modules</a>
 <ul class="sectlevel4">
+<li><a href="#og-module-alpn">Module <code>alpn</code></a></li>
 <li><a href="#og-module-bytebufferpool">Module <code>bytebufferpool</code></a></li>
+<li><a href="#og-module-console-capture">Module <code>console-capture</code></a></li>
 <li><a href="#og-module-deploy">Module <code>deploy</code></a></li>
 <li><a href="#og-module-http">Module <code>http</code></a>
 <ul class="sectlevel5">
@@ -128,9 +131,11 @@
 </li>
 <li><a href="#og-module-http2">Module <code>http2</code></a></li>
 <li><a href="#og-module-http2c">Module <code>http2c</code></a></li>
+<li><a href="#og-module-http3">Module <code>http3</code></a></li>
 <li><a href="#og-module-http-forwarded">Module <code>http-forwarded</code></a></li>
 <li><a href="#og-module-https">Module <code>https</code></a></li>
 <li><a href="#og-module-jmx-remote">Module <code>jmx-remote</code></a></li>
+<li><a href="#og-module-requestlog">Module <code>requestlog</code></a></li>
 <li><a href="#og-module-server">Module <code>server</code></a>
 <ul class="sectlevel5">
 <li><a href="#og-module-server-http-config">HTTP Configuration Properties</a></li>
@@ -148,7 +153,7 @@
 <li><a href="#og-module-ssl-reload">Module <code>ssl-reload</code></a></li>
 <li><a href="#og-module-test-keystore">Module <code>test-keystore</code></a></li>
 <li><a href="#og-module-threadpool">Module <code>threadpool</code></a></li>
-<li><a href="#og-module-console-capture">Module <code>console-capture</code></a></li>
+<li><a href="#og-module-well-known">Module <code>well-known</code></a></li>
 </ul>
 </li>
 </ul>
@@ -180,6 +185,7 @@
 <li><a href="#og-secure-vs-clear-text-http2">Secure vs Clear-Text HTTP/2</a></li>
 <li><a href="#og-protocols-http2s">Secure HTTP/2</a></li>
 <li><a href="#og-protocols-http2c">Clear-Text HTTP/2</a></li>
+<li><a href="#og-protocols-http3">HTTP/3</a></li>
 <li><a href="#og-protocols-ssl">Configuring Secure Protocols</a>
 <ul class="sectlevel4">
 <li><a href="#og-protocols-ssl-customize">Customizing KeyStore and SSL/TLS Configuration</a>
@@ -438,7 +444,7 @@
 <li><a href="#og-logging-server-custom">Custom Configuration</a>
 <ul class="sectlevel5">
 <li><a href="#og-logging-server-custom-logback">Logging with LogBack</a></li>
-<li><a href="#og-logging-server-custom-log4j2">Logging with Log4J2</a></li>
+<li><a href="#og-logging-server-custom-log4j2">Logging with Log4j2</a></li>
 </ul>
 </li>
 <li><a href="#og-logging-server-bridges">Bridging Logging to SLF4J</a>
@@ -467,6 +473,7 @@
 <li><a href="#og-troubleshooting-logging-subpackages">Enabling DEBUG Logging for SubPackages</a></li>
 </ul>
 </li>
+<li><a href="#og-troubleshooting-debugging">Remote Debugging</a></li>
 </ul>
 </li>
 <li><a href="#og-xml">Jetty XML</a>
@@ -573,7 +580,7 @@
 <div class="sect3">
 <h4 id="og-begin-install"><a class="anchor" href="#og-begin-install"></a><a class="link" href="#og-begin-install">Installing Jetty</a></h4>
 <div class="paragraph">
-<p>After the download, unpacking Eclipse Jetty will extract the files into a directory called <code>jetty-home-VERSION</code>, where <code>VERSION</code> is the version that you downloaded, for example <code>11.0.7</code>, so that the directory is called <code>jetty-home-11.0.7</code>.</p>
+<p>After the download, unpacking Eclipse Jetty will extract the files into a directory called <code>jetty-home-VERSION</code>, where <code>VERSION</code> is the version that you downloaded, for example <code>11.0.8</code>, so that the directory is called <code>jetty-home-11.0.8</code>.</p>
 </div>
 <div class="paragraph">
 <p>Unpack Eclipse Jetty compressed file in a convenient location, for example under <code>/opt</code>.</p>
@@ -694,9 +701,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:12:40.954:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:12:41.006:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@2fd05ff<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}</mark>
-<strong>2021-10-06 15:12:41.024:</strong>INFO :oejs.Server:main: Started Server@48524010{STARTING}[11.0.7,sto=5000] @836ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:27:45.938:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:27:45.966:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@470734c3<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}</mark>
+<strong>2022-02-07 12:27:45.972:</strong>INFO :oejs.Server:main: Started Server@28f3b248{STARTING}[11.0.8,sto=5000] @449ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -782,9 +789,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:12:42.262:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:12:42.312:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@4ddced80<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:9999}</mark>
-<strong>2021-10-06 15:12:42.328:</strong>INFO :oejs.Server:main: Started Server@48524010{STARTING}[11.0.7,sto=5000] @823ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:27:46.717:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:27:46.743:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@470734c3<mark>{HTTP/1.1, (http/1.1)}{0.0.0.0:9999}</mark>
+<strong>2022-02-07 12:27:46.749:</strong>INFO :oejs.Server:main: Started Server@28f3b248{STARTING}[11.0.8,sto=5000] @419ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -797,7 +804,7 @@
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-If you want to enable support for different protocols such as secure HTTP/1.1 or HTTP/2, or configured Jetty behind a load balancer, read <a href="#og-protocols">this section</a>.
+If you want to enable support for different protocols such as secure HTTP/1.1 or HTTP/2 or HTTP/3, or configure Jetty behind a load balancer, read <a href="#og-protocols">this section</a>.
 </td>
 </tr>
 </table>
@@ -912,7 +919,7 @@
 <p>The <code>deploy</code> module only provides the feature of deploying web applications.</p>
 </div>
 <div class="paragraph">
-<p>Whether these web applications are served via clear-text HTTP/1.1, or secure HTTP/1.1, or secure HTTP/2 (or even all of these protocols) depends on whether the correspondent Jetty modules have been enabled.
+<p>Whether these web applications are served via clear-text HTTP/1.1, or secure HTTP/1.1, or secure HTTP/2, or HTTP/3 (or even all of these protocols) depends on whether the correspondent Jetty modules have been enabled.
 Refer to the <a href="#og-protocols">section about protocols</a> for further information.</p>
 </div>
 </td>
@@ -952,13 +959,13 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:12:45.077:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:12:45.129:</strong>INFO :oejdp.ScanningAppProvider:main: Deployment monitor [file:///path/to/jetty.base/webapps/]
-<strong>2021-10-06 15:12:45.255:</strong>INFO :oejw.StandardDescriptorProcessor:main: NO JSP Support for /demo-simple, did not find org.eclipse.jetty.jsp.JettyJspServlet
-<strong>2021-10-06 15:12:45.271:</strong>INFO :oejss.DefaultSessionIdManager:main: Session workerName=node0
-<mark><strong>2021-10-06 15:12:45.304:</strong>INFO :oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@610f7aa{Simple Web Application,/demo-simple,file:///path/to/jetty.base/work/jetty-0_0_0_0-8080-demo-simple_war-_demo-simple-any-/webapp/,AVAILABLE}{/path/to/jetty.base/webapps/demo-simple.war}</mark>
-<strong>2021-10-06 15:12:45.320:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@53fe15ff{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
-<strong>2021-10-06 15:12:45.334:</strong>INFO :oejs.Server:main: Started Server@10e31a9a{STARTING}[11.0.7,sto=5000] @1093ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:27:48.278:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:27:48.300:</strong>INFO :oejdp.ScanningAppProvider:main: Deployment monitor [file:///path/to/jetty.base/webapps/]
+<strong>2022-02-07 12:27:48.355:</strong>INFO :oejw.StandardDescriptorProcessor:main: NO JSP Support for /demo-simple, did not find org.eclipse.jetty.jsp.JettyJspServlet
+<strong>2022-02-07 12:27:48.360:</strong>INFO :oejss.DefaultSessionIdManager:main: Session workerName=node0
+<mark><strong>2022-02-07 12:27:48.374:</strong>INFO :oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@1f81aa00{Simple Web Application,/demo-simple,file:///path/to/jetty.base/work/jetty-0_0_0_0-8080-demo-simple_war-_demo-simple-any-/webapp/,AVAILABLE}{/path/to/jetty.base/webapps/demo-simple.war}</mark>
+<strong>2022-02-07 12:27:48.383:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@5bf8fa12{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
+<strong>2022-02-07 12:27:48.392:</strong>INFO :oejs.Server:main: Started Server@480d3575{STARTING}[11.0.8,sto=5000] @543ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -994,7 +1001,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-cb8a854642d32c964b17f0a090ef16e3.png" alt="Diagram" width="445" height="430">
+<img src="images/diag-cb8a854642d32c964b17f0a090ef16e3.png" alt="Diagram" width="445" height="429">
 </div>
 </div>
 <div class="paragraph">
@@ -1037,7 +1044,7 @@
 </div>
 <div class="paragraph">
 <p>For example, if you enable only the <code>http</code> Jetty module, then your Jetty standalone server will only be able to listen to a network port for clear-text HTTP requests.
-It will not be able to process secure HTTP (i.e. <code>https</code>) requests, it will not be able to process WebSocket, or HTTP/2 or any other protocol because the correspondent modules have not been enabled.</p>
+It will not be able to process secure HTTP (i.e. <code>https</code>) requests, it will not be able to process WebSocket, or HTTP/2, or HTTP/3 or any other protocol because the correspondent modules have not been enabled.</p>
 </div>
 <div class="paragraph">
 <p>You can even start a Jetty server <em>without</em> listening on a network port&#8201;&#8212;&#8201;for example because you have enabled a custom module you wrote that provides the features you need.</p>
@@ -1186,6 +1193,9 @@
 <p><a href="#og-protocols-http2">HTTP/2 Support</a></p>
 </li>
 <li>
+<p><a href="#og-protocols-http3">HTTP/3 Support</a></p>
+</li>
+<li>
 <p><a href="#og-protocols-websocket">WebSocket Support</a></p>
 </li>
 </ul>
@@ -1269,6 +1279,9 @@
 <p><a href="#og-protocols-http2s">Configure Secure HTTP/2</a></p>
 </li>
 <li>
+<p><a href="#og-protocols-http3">Configure HTTP/3</a></p>
+</li>
+<li>
 <p><a href="#og-protocols-proxy">Configure Jetty Behind a Load Balancer or Reverse Proxy</a></p>
 </li>
 <li>
@@ -1348,7 +1361,7 @@
 <div class="sect4">
 <h5 id="og-start-configure-enable"><a class="anchor" href="#og-start-configure-enable"></a><a class="link" href="#og-start-configure-enable">Enabling Modules</a></h5>
 <div class="paragraph">
-<p>You can enable Jetty modules with the <code>--add-modules</code> command:</p>
+<p>You can enable Jetty modules persistently across restarts with the <code>--add-modules</code> command:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -1461,6 +1474,46 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-start-configure-enable-command-line"><a class="anchor" href="#og-start-configure-enable-command-line"></a><a class="link" href="#og-start-configure-enable-command-line">Enabling Modules on Command Line</a></h5>
+<div class="paragraph">
+<p>You can also enable a module transiently, only for the current execution of the <code>java -jar $JETTY_HOME/start.jar</code> command.</p>
+</div>
+<div class="paragraph">
+<p>If you have an empty <code>$JETTY_BASE</code>, the following command enables the <code>server</code> and <code>http</code> modules, but does not create any <code>$JETTY_BASE/start.d/*.ini</code> files.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --module=server,http</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Since there are no <code>$JETTY_BASE/start.d/*.ini</code> files, you can only customize the properties via the command line, for example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --module=server,http jetty.http.port=9876</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Enabling modules on the command line is useful to verify that the modules work as expected, or to try different configurations.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+It is possible to enable some module persistently via <code>--add-modules</code> and some other module transiently via <code>--module</code>.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Remember that once the current execution terminates, the modules enabled transiently on the command line via <code>--module</code> and their configuration are not saved and will not be enabled on the next execution (unless you specify them again on the command line).</p>
+</div>
+</div>
+<div class="sect4">
 <h5 id="og-start-configure-custom-module"><a class="anchor" href="#og-start-configure-custom-module"></a><a class="link" href="#og-start-configure-custom-module">Adding Your Own Modules</a></h5>
 <div class="admonitionblock note">
 <table>
@@ -1608,40 +1661,39 @@
 <div class="content">
 <pre class="CodeRay highlight nowrap"><code>Enabled Modules:
 ----------------
-    0) resources       transitive provider of resources for logging-jetty
-    1) logging/slf4j   transitive provider of logging/slf4j for logging-jetty
-                       dynamic dependency of logging-jetty
-    2) logging-jetty   transitive provider of logging for threadpool
-                       transitive provider of logging for bytebufferpool
-                       transitive provider of logging for server
-    3) bytebufferpool  transitive provider of bytebufferpool for server
-                       init template available with --add-module=bytebufferpool
-    4) threadpool      transitive provider of threadpool for server
-                       init template available with --add-module=threadpool
-    5) jvm             ${jetty.base}/start.d/jvm.ini
-    6) server          ${jetty.base}/start.d/server.ini
-    7) http            ${jetty.base}/start.d/http.ini
-    8) postgresql      ${jetty.base}/start.d/postgresql.ini
+  0) bytebufferpool            transitive provider of bytebufferpool for server
+                               ini template available with --add-module=bytebufferpool
+  1) resources                 transitive provider of resources for logging-jetty
+  2) logging/slf4j             transitive provider of logging/slf4j for logging-jetty
+                               dynamic dependency of logging-jetty
+  3) logging-jetty             transitive provider of logging for threadpool
+                               transitive provider of logging for server
+  4) threadpool                transitive provider of threadpool for server
+                               ini template available with --add-module=threadpool
+  5) jvm                       ${jetty.base}/start.d/jvm.ini
+  6) server                    ${jetty.base}/start.d/server.ini
+  7) http                      ${jetty.base}/start.d/http.ini
+  8) postgresql                ${jetty.base}/start.d/postgresql.ini
 
 Java Environment:
 -----------------
- java.home = /path/to/java.home (null)
- java.vm.vendor = Eclipse Adoptium (null)
- java.vm.version = 17+35 (null)
- java.vm.name = OpenJDK 64-Bit Server VM (null)
- java.vm.info = mixed mode, sharing (null)
- java.runtime.name = OpenJDK Runtime Environment (null)
- java.runtime.version = 17+35 (null)
- java.io.tmpdir = /path/to/jetty.base/work (null)
- user.dir = /path/to/jetty.base (null)
- user.language = en (null)
- user.country = US (null)
+ java.home = /path/to/java.home
+ java.vm.vendor = Eclipse Adoptium
+ java.vm.version = 11.0.14+9
+ java.vm.name = OpenJDK 64-Bit Server VM
+ java.vm.info = mixed mode
+ java.runtime.name = OpenJDK Runtime Environment
+ java.runtime.version = 11.0.14+9
+ java.io.tmpdir = /path/to/jetty.base/work
+ user.dir = /path/to/jetty.base
+ user.language = en
+ user.country = US
 
 Jetty Environment:
 ------------------
- jetty.version = 11.0.7
- jetty.tag.version = jetty-11.0.7
- jetty.build = 389a3587725d94cc2470ed06aa184c6e57fe9ce8
+ jetty.version = 11.0.8
+ jetty.tag.version = jetty-11.0.8
+ jetty.build = 79cc9cf90ed1d7844fde4376001a5d54d6c68975
  jetty.home = /path/to/jetty.home
  jetty.base = /path/to/jetty.base
 
@@ -1662,11 +1714,11 @@
 
 Properties:
 -----------
- java.version = 17
- java.version.major = 17
- java.version.micro = 0
+ java.version = 11.0.14
+ java.version.major = 11
+ java.version.micro = 14
  java.version.minor = 0
- java.version.platform = 17
+ java.version.platform = 11
  jetty.base = /path/to/jetty.base
  jetty.base.uri = file:///path/to/jetty.base
  jetty.home = /path/to/jetty.home
@@ -1683,13 +1735,13 @@
       changes to the --module=name command line options will be reflected here.
  0:                    (dir) | ${jetty.base}/resources
  1:             2.0.0-alpha5 | ${jetty.home}/lib/logging/slf4j-api-2.0.0-alpha5.jar
- 2:                   11.0.7 | ${jetty.home}/lib/logging/jetty-slf4j-impl-11.0.7.jar
+ 2:                   11.0.8 | ${jetty.home}/lib/logging/jetty-slf4j-impl-11.0.8.jar
  3:                    5.0.2 | ${jetty.home}/lib/jetty-jakarta-servlet-api-5.0.2.jar
- 4:                   11.0.7 | ${jetty.home}/lib/jetty-http-11.0.7.jar
- 5:                   11.0.7 | ${jetty.home}/lib/jetty-server-11.0.7.jar
- 6:                   11.0.7 | ${jetty.home}/lib/jetty-xml-11.0.7.jar
- 7:                   11.0.7 | ${jetty.home}/lib/jetty-util-11.0.7.jar
- 8:                   11.0.7 | ${jetty.home}/lib/jetty-io-11.0.7.jar
+ 4:                   11.0.8 | ${jetty.home}/lib/jetty-http-11.0.8.jar
+ 5:                   11.0.8 | ${jetty.home}/lib/jetty-server-11.0.8.jar
+ 6:                   11.0.8 | ${jetty.home}/lib/jetty-xml-11.0.8.jar
+ 7:                   11.0.8 | ${jetty.home}/lib/jetty-util-11.0.8.jar
+ 8:                   11.0.8 | ${jetty.home}/lib/jetty-io-11.0.8.jar
  9:                  42.2.18 | ${jetty.base}/lib/postgresql-42.2.18.jar
 
 Jetty Active XMLs:
@@ -1766,13 +1818,13 @@
 -Xmx1g \
 -Xlog:gc*,gc+stats=off:file=logs/gc.log:time,level,tags \
 --class-path \
-/path/to/jetty.base/resources:/path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.7.jar:/path/to/jetty.home/lib/jetty-jakarta-servlet-api-5.0.2.jar:/path/to/jetty.home/lib/jetty-http-11.0.7.jar:/path/to/jetty.home/lib/jetty-server-11.0.7.jar:/path/to/jetty.home/lib/jetty-xml-11.0.7.jar:/path/to/jetty.home/lib/jetty-util-11.0.7.jar:/path/to/jetty.home/lib/jetty-io-11.0.7.jar \
+/path/to/jetty.base/resources:/path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.8.jar:/path/to/jetty.home/lib/jetty-jakarta-servlet-api-5.0.2.jar:/path/to/jetty.home/lib/jetty-http-11.0.8.jar:/path/to/jetty.home/lib/jetty-server-11.0.8.jar:/path/to/jetty.home/lib/jetty-xml-11.0.8.jar:/path/to/jetty.home/lib/jetty-util-11.0.8.jar:/path/to/jetty.home/lib/jetty-io-11.0.8.jar \
 org.eclipse.jetty.xml.XmlConfiguration \
-java.version=17 \
-java.version.major=17 \
-java.version.micro=0 \
+java.version=11.0.14 \
+java.version.major=11 \
+java.version.micro=14 \
 java.version.minor=0 \
-java.version.platform=17 \
+java.version.platform=11 \
 jetty.base=/path/to/jetty.base \
 jetty.base.uri=file:///path/to/jetty.base \
 jetty.home=/path/to/jetty.home \
@@ -1843,13 +1895,13 @@
 <pre class="CodeRay highlight nowrap"><code>--class-path \
 /path/to/jetty.base/resources:\
 /path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:\
-/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.7.jar:\
+/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.8.jar:\
 /path/to/jetty.home/lib/jetty-jakarta-servlet-api-5.0.2.jar:\
-/path/to/jetty.home/lib/jetty-http-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-server-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-xml-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-util-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-io-11.0.7.jar</code></pre>
+/path/to/jetty.home/lib/jetty-http-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-server-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-xml-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-util-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-io-11.0.8.jar</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -1864,13 +1916,13 @@
 <div class="content">
 <pre class="CodeRay highlight nowrap"><code>--module-path \
 /path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar:\
-/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.7.jar:\
+/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.8.jar:\
 /path/to/jetty.home/lib/jetty-jakarta-servlet-api-5.0.2.jar:\
-/path/to/jetty.home/lib/jetty-http-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-server-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-xml-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-util-11.0.7.jar:\
-/path/to/jetty.home/lib/jetty-io-11.0.7.jar \
+/path/to/jetty.home/lib/jetty-http-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-server-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-xml-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-util-11.0.8.jar:\
+/path/to/jetty.home/lib/jetty-io-11.0.8.jar \
 --class-path \
 /path/to/jetty.base/resources \
 --add-modules \
@@ -1917,11 +1969,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code>java.version=17 \
-java.version.major=17 \
-java.version.micro=0 \
+<pre class="CodeRay highlight nowrap"><code>java.version=11.0.14 \
+java.version.major=11 \
+java.version.micro=14 \
 java.version.minor=0 \
-java.version.platform=17 \
+java.version.platform=11 \
 jetty.base=/path/to/jetty.base \
 jetty.base.uri=file:///path/to/jetty.base \
 jetty.home=/path/to/jetty.home \
@@ -2004,7 +2056,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-0f37d1d5b12f280e1587df6f3d528998.png" alt="Diagram" width="351" height="245">
+<img src="images/diag-0f37d1d5b12f280e1587df6f3d528998.png" alt="Diagram" width="367" height="260">
 </div>
 </div>
 <div class="paragraph">
@@ -2017,7 +2069,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-176305f848d18dc8b0c4ef7bd331705d.png" alt="Diagram" width="374" height="267">
+<img src="images/diag-176305f848d18dc8b0c4ef7bd331705d.png" alt="Diagram" width="393" height="348">
 </div>
 </div>
 <div class="paragraph">
@@ -2259,10 +2311,10 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><mark>STOP.KEY=1wgxtdywsum80</mark>
-<strong>2021-10-06 15:13:01.027:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:13:01.072:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@bef2d72{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
-<strong>2021-10-06 15:13:01.084:</strong>INFO :oejs.Server:main: Started Server@6295d394{STARTING}[11.0.7,sto=5000] @864ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><mark>STOP.KEY=1qjpxghspvg1s</mark>
+<strong>2022-02-07 12:28:00.217:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:00.242:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@1ca3b418{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
+<strong>2022-02-07 12:28:00.249:</strong>INFO :oejs.Server:main: Started Server@5fbdfdcf{STARTING}[11.0.8,sto=5000] @434ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -3643,10 +3695,8 @@
 </div>
 <div class="sect3">
 <h4 id="og-modules-standard"><a class="anchor" href="#og-modules-standard"></a><a class="link" href="#og-modules-standard">Standard Modules</a></h4>
-
-</div>
-<div class="sect3">
-<h4 id="og-module-alpn"><a class="anchor" href="#og-module-alpn"></a><a class="link" href="#og-module-alpn">Module <code>alpn</code></a></h4>
+<div class="sect4">
+<h5 id="og-module-alpn"><a class="anchor" href="#og-module-alpn"></a><a class="link" href="#og-module-alpn">Module <code>alpn</code></a></h5>
 <div class="paragraph">
 <p>The <code>alpn</code> module enables support for the ALPN negotiation mechanism of the TLS protocol.</p>
 </div>
@@ -3667,6 +3717,7 @@
 # jetty.alpn.defaultProtocol=http/1.1</pre>
 </div>
 </div>
+</div>
 <div class="sect4">
 <h5 id="og-module-bytebufferpool"><a class="anchor" href="#og-module-bytebufferpool"></a><a class="link" href="#og-module-bytebufferpool">Module <code>bytebufferpool</code></a></h5>
 <div class="paragraph">
@@ -3692,8 +3743,8 @@
 <pre>[description]
 Configures the ByteBufferPool used by ServerConnectors.
 
-[depends]
-logging
+[tags]
+bytebufferpool
 
 [xml]
 etc/jetty-bytebufferpool.xml
@@ -3715,11 +3766,11 @@
 ## Maximum queue length for each bucket (-1 for unbounded).
 #jetty.byteBufferPool.maxQueueLength=-1
 
-## Maximum heap memory retainable by the pool (-1 for unlimited).
-#jetty.byteBufferPool.maxHeapMemory=-1
+## Maximum heap memory retainable by the pool (0 for heuristic, -1 for unlimited).
+#jetty.byteBufferPool.maxHeapMemory=0
 
-## Maximum direct memory retainable by the pool (-1 for unlimited).
-#jetty.byteBufferPool.maxDirectMemory=-1</pre>
+## Maximum direct memory retainable by the pool (0 for heuristic, -1 for unlimited).
+#jetty.byteBufferPool.maxDirectMemory=0</pre>
 </div>
 </div>
 <div class="paragraph">
@@ -3739,6 +3790,34 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-module-console-capture"><a class="anchor" href="#og-module-console-capture"></a><a class="link" href="#og-module-console-capture">Module <code>console-capture</code></a></h5>
+<div class="paragraph">
+<p>The <code>console-capture</code> module captures <code>System.out</code> and <code>System.err</code> output and appends it to a rolling file.</p>
+</div>
+<div class="paragraph">
+<p>The file is rolled every day at the midnight of the configured timezone.
+Old, rolled files are kept for the number of days specified by the <code>jetty.console-capture.retainDays</code> property.</p>
+</div>
+<div class="paragraph">
+<p>The module properties are:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>## Logging directory (relative to $JETTY_BASE).
+# jetty.console-capture.dir=./logs
+
+## Whether to append to existing file.
+# jetty.console-capture.append=true
+
+## How many days to retain old log files.
+# jetty.console-capture.retainDays=90
+
+## Timezone ID of the log timestamps, as specified by java.time.ZoneId.
+# jetty.console-capture.timezone=GMT</pre>
+</div>
+</div>
+</div>
+<div class="sect4">
 <h5 id="og-module-deploy"><a class="anchor" href="#og-module-deploy"></a><a class="link" href="#og-module-deploy">Module <code>deploy</code></a></h5>
 <div class="paragraph">
 <p>The <code>deploy</code> module provides the deployment feature through a <code>DeploymentManager</code> component that watches a directory for changes (see <a href="#og-deploy">how to deploy web applications</a> for more information).</p>
@@ -3910,7 +3989,7 @@
 <p>For a single NIO selector, the ratio between the average number of selected connections over the total number of connections for every <code>select()</code> call depends heavily on the protocol but also on the application.</p>
 </div>
 <div class="paragraph">
-<p>Multiplexed protocols such as HTTP/2 tend to be busier than duplex protocols such as HTTP/1.1, leading to a higher ratio.</p>
+<p>Multiplexed TCP protocols such as HTTP/2 tend to be busier than duplex protocols such as HTTP/1.1, leading to a higher ratio.</p>
 </div>
 <div class="paragraph">
 <p>REST applications that exchange many little JSON messages tend to be busier than file server applications, leading to a higher ratio.</p>
@@ -3997,6 +4076,39 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-module-http3"><a class="anchor" href="#og-module-http3"></a><a class="link" href="#og-module-http3">Module <code>http3</code></a></h5>
+<div class="paragraph">
+<p>The <code>http3</code> module enables support for the HTTP/3 protocol.</p>
+</div>
+<div class="paragraph">
+<p>The module properties are:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>## The host/address to bind the connector to.
+# jetty.quic.host=0.0.0.0
+
+## The port the connector listens on.
+# jetty.quic.port=8444
+
+## The connector idle timeout, in milliseconds.
+# jetty.quic.idleTimeout=30000
+
+## Specifies the maximum number of concurrent requests per session.
+# jetty.quic.maxBidirectionalRemoteStreams=128
+
+## Specifies the session receive window (client to server) in bytes.
+# jetty.quic.sessionRecvWindow=4194304
+
+## Specifies the stream receive window (client to server) in bytes.
+# jetty.quic.bidirectionalStreamRecvWindow=2097152
+
+## Specifies the stream idle timeout, in milliseconds.
+# jetty.http3.streamIdleTimeout=30000</pre>
+</div>
+</div>
+</div>
+<div class="sect4">
 <h5 id="og-module-http-forwarded"><a class="anchor" href="#og-module-http-forwarded"></a><a class="link" href="#og-module-http-forwarded">Module <code>http-forwarded</code></a></h5>
 <div class="paragraph">
 <p>The <code>http-forwarded</code> module provides support for processing the <code>Forwarded</code> HTTP header (defined in <a href="https://tools.ietf.org/html/rfc7239">RFC 7239</a>) and the now obsoleted <code>X-Forwarded-*</code> HTTP headers.</p>
@@ -4133,6 +4245,332 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="og-module-requestlog"><a class="anchor" href="#og-module-requestlog"></a><a class="link" href="#og-module-requestlog">Module <code>requestlog</code></a></h5>
+<div class="paragraph">
+<p>The <code>requestlog</code> module provides HTTP request/response logging in the standard <a href="https://en.wikipedia.org/wiki/Common_Log_Format">NCSA format</a>, or in a custom format of your choice.</p>
+</div>
+<div class="paragraph">
+<p>The module properties are:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>## Request log line format string.
+# jetty.requestlog.formatString=%a - %u %{dd/MMM/yyyy:HH:mm:ss ZZZ|GMT}t "%r" %s %B "%{Referer}i" "%{User-Agent}i" "%C"
+
+## The logging directory (relative to $JETTY_BASE).
+# jetty.requestlog.dir=logs
+
+## The request log file path (may be absolute and/or outside $JETTY_BASE).
+# jetty.requestlog.filePath=${jetty.requestlog.dir}/yyyy_MM_dd.request.log
+
+## Date format for the files that are rolled over (uses SimpleDateFormat syntax).
+# jetty.requestlog.filenameDateFormat=yyyy_MM_dd
+
+## How many days to retain old log files.
+# jetty.requestlog.retainDays=90
+
+## Whether to append to existing file or create a new one.
+# jetty.requestlog.append=false
+
+## The timezone of the log file name.
+# jetty.requestlog.timezone=GMT</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The property <code>jetty.requestlog.formatString</code> can be customized using format codes.</p>
+</div>
+<div class="paragraph">
+<p>Format codes are specified with the syntax <code>%MODIFIERS{PARAM}CODE</code> as follows:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>MODIFIERS</code></dt>
+<dd>
+<p>Optional list of comma separated HTTP status codes which may be preceded by a single "!" to indicate
+negation. If the status code is not in the list the literal string "-" will be logged instead of
+the resulting value from the percent code.</p>
+</dd>
+<dt class="hdlist1"><code>{PARAM}</code></dt>
+<dd>
+<p>Parameter string which may be optional depending on the percent code used.</p>
+</dd>
+<dt class="hdlist1"><code>CODE</code></dt>
+<dd>
+<p>A one or two character code specified by the table of format codes below.</p>
+</dd>
+</dl>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. Format Codes</caption>
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 75%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Format String</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">X</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The X character.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%%</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The percent character.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{format}a</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The address or host name.</p>
+</div>
+<div class="paragraph">
+<p>Valid format values are: "server", "client", "local", "remote".
+The format parameter is optional and defaults to "server".</p>
+</div>
+<div class="paragraph">
+<p>Values "server" and "client" are the logical addresses which can be modified in the request headers,
+while "local" and "remote" are the physical addresses so may be the addresses of a proxy between
+the end-user and the server.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{format}p</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The port.</p>
+</div>
+<div class="paragraph">
+<p>Valid format values are: "server", "client", "local", "remote".
+The format parameter is optional and defaults to "server".</p>
+</div>
+<div class="paragraph">
+<p>Values "server" and "client" are the logical ports which can be modified in the request headers,
+while "local" and "remote" are the physical ports so may be the ports of a proxy between
+the end-user and the server.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{CLF}I</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The size of request in bytes, excluding HTTP headers.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "CLF" the Common Log Format is used, i.e. a <code>-</code> rather than a <code>0</code>
+when no bytes are present.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{CLF}O</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The size of response in bytes, excluding HTTP headers.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "CLF" the Common Log Format is used, i.e. a <code>-</code> rather than a <code>0</code>
+when no bytes are present.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{CLF}S</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The bytes transferred (received and sent). This is the combination of <code>%I</code> and <code>%O</code>.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "CLF" the Common Log Format is used, i.e. a <code>-</code> rather than a <code>0</code>
+when no bytes are present.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}C</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the request cookie VARNAME.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+Only version 0 cookies are fully supported.
+When the parameter is missing, all request cookies will be logged.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%D</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The time taken to serve the request, in microseconds.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}e</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the environment variable VARNAME.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%f</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The file system path of the requested resource.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%H</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The name and version of the request protocol, such as "HTTP/1.1".</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}i</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME request header.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%k</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The number of requests handled on a connection.</p>
+</div>
+<div class="paragraph">
+<p>The initial request on a connection yields a value 0, the first request after the initial on the same connection
+yields the value 1, the second request on the same connection yields the value 2, etc.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%m</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The HTTP request method.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}o</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME response header.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%q</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The query string, prepended with a ? if a query string exists, otherwise an empty string.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%r</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>First line of an HTTP/1.1 request (or equivalent information for HTTP/2 or later).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%R</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The name of the Handler or Servlet generating the response (if any).</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%s</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The HTTP response status code.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{format|timeZone|locale}t</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The time at which the request was received.</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional and may have the following values: {format}, {format|timeZone} or {format|timeZone|locale}.</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>format</code></dt>
+<dd>
+<p>Default is e.g. [18/Sep/2011:19:18:28 -0400] where the last number indicates the timezone offset from GMT.
+Must be in a format supported by the <code>java.time</code> package.</p>
+</dd>
+<dt class="hdlist1"><code>timeZone</code></dt>
+<dd>
+<p>Default is GMT.
+Must be in a format supported by the <code>java.time</code> package.</p>
+</dd>
+<dt class="hdlist1"><code>locale</code></dt>
+<dd>
+<p>Default is the JVM default locale.
+Must be in a format supported by <code>java.util.Locale.forLanguageTag()</code>.</p>
+</dd>
+</dl>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{UNIT}T</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The time taken to serve the request.</p>
+</div>
+<div class="paragraph">
+<p>The parameter UNIT is optional and defaults to "s".
+The parameter UNIT indicates the unit of time: "s" for seconds, "ms" for milliseconds, "us" for microseconds.
+<code>%{us}T</code> is identical to <code>%D</code>.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{d}u</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The remote user if the request was authenticated with servlet authentication.</p>
+</div>
+<div class="paragraph">
+<p>May be an invalid value if response status code (<code>%s</code>) is 401 (unauthorized).</p>
+</div>
+<div class="paragraph">
+<p>The parameter is optional.
+When the parameter value is "d", deferred authentication will also be checked.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%U</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The URL path requested, not including any query string.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%X</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The connection status when response is completed:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>X</code></dt>
+<dd>
+<p>The connection is aborted before the response completed.</p>
+</dd>
+<dt class="hdlist1"><code>+</code></dt>
+<dd>
+<p>The connection may be kept alive after the response is sent.</p>
+</dd>
+<dt class="hdlist1"><code>-</code></dt>
+<dd>
+<p>The connection will be closed after the response is sent.</p>
+</dd>
+</dl>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}ti</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME request trailer.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%{VARNAME}to</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The value of the VARNAME response trailer.</p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect4">
 <h5 id="og-module-server"><a class="anchor" href="#og-module-server"></a><a class="link" href="#og-module-server">Module <code>server</code></a></h5>
 <div class="paragraph">
 <p>The <code>server</code> module provides generic server support, and configures generic HTTP properties that apply to all HTTP protocols, the scheduler properties and the server specific properties.</p>
@@ -4148,7 +4586,7 @@
 </td>
 <td class="content">
 <div class="paragraph">
-<p>The <code>server</code> module configures the shared parameters for generic HTTP handline, but does not enable any specific network protocol.  You have to explicitly enable the protocols you want to support by enabling, for example, the <a href="#og-module-http"><code>http</code> module</a> for clear-text HTTP/1.1 support, or the <a href="#og-module-http2"><code>http2</code> module</a> for secure HTTP/2 support, etc.</p>
+<p>The <code>server</code> module configures the shared parameters for generic HTTP handling, but does not enable any specific network protocol.  You have to explicitly enable the protocols you want to support by enabling, for example, the <a href="#og-module-http"><code>http</code> module</a> for clear-text HTTP/1.1 support, or the <a href="#og-module-http2"><code>http2</code> module</a> for secure HTTP/2 support, etc.</p>
 </div>
 <div class="paragraph">
 <p>See also the <a href="#og-protocols">protocols section</a> for more information about the supported protocols.</p>
@@ -4160,7 +4598,7 @@
 <div class="sect5">
 <h6 id="og-module-server-http-config"><a class="anchor" href="#og-module-server-http-config"></a><a class="link" href="#og-module-server-http-config">HTTP Configuration Properties</a></h6>
 <div class="paragraph">
-<p>The module properties to configure generic HTTP properties are listed below. Mostly they frequently apply to both HTTP/1 and HTTP/2, but some parameters are version specific:</p>
+<p>The module properties to configure generic HTTP properties are listed below. Mostly they frequently apply to HTTP/1, HTTP/2 and HTTP/3, but some parameters are version specific:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -4226,7 +4664,7 @@
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="screen">HTTP/1.1 200 OK
 Content-Length: 0
-Server: Jetty(11.0.7)</code></pre>
+Server: Jetty(11.0.8)</code></pre>
 </div>
 </div>
 </dd>
@@ -4632,17 +5070,19 @@
 [files]
 maven://org.bouncycastle/bcpkix-jdk15on/${bouncycastle.version}|lib/bouncycastle/bcpkix-jdk15on-${bouncycastle.version}.jar
 maven://org.bouncycastle/bcprov-jdk15on/${bouncycastle.version}|lib/bouncycastle/bcprov-jdk15on-${bouncycastle.version}.jar
+maven://org.bouncycastle/bcutil-jdk15to18/${bouncycastle.version}|lib/bouncycastle/bcutil-jdk15on-${bouncycastle.version}.jar
 
 [lib]
 lib/jetty-keystore-${jetty.version}.jar
 lib/bouncycastle/bcpkix-jdk15on-${bouncycastle.version}.jar
 lib/bouncycastle/bcprov-jdk15on-${bouncycastle.version}.jar
+lib/bouncycastle/bcutil-jdk15on-${bouncycastle.version}.jar
 
 [xml]
 etc/jetty-test-keystore.xml
 
 [ini]
-bouncycastle.version?=1.62
+bouncycastle.version?=1.70
 jetty.webapp.addServerClasses+=,${jetty.base.uri}/lib/bouncycastle/
 jetty.sslContext.keyStorePath?=etc/test-keystore.p12
 jetty.sslContext.keyStoreType?=PKCS12
@@ -4718,30 +5158,24 @@
 </div>
 </div>
 <div class="sect4">
-<h5 id="og-module-console-capture"><a class="anchor" href="#og-module-console-capture"></a><a class="link" href="#og-module-console-capture">Module <code>console-capture</code></a></h5>
+<h5 id="og-module-well-known"><a class="anchor" href="#og-module-well-known"></a><a class="link" href="#og-module-well-known">Module <code>well-known</code></a></h5>
 <div class="paragraph">
-<p>The <code>console-capture</code> module captures <code>System.out</code> and <code>System.err</code> output and appends it to a rolling file.</p>
+<p>The <code>well-known</code> Jetty module creates a <code>ResourceHandler</code> deployed at the <code>/.well-known</code> context path which serves files from a directory.
+By default, the directory created at <code>$JETTY_BASE/.well-known</code> is used, but it can be configured from <code>well-known.ini</code> to anywhere in the filesystem.
+Note that the <code>.well-known</code> directory may be seen as a hidden directory by the filesystem.</p>
 </div>
 <div class="paragraph">
-<p>The file is rolled every day at the midnight of the configured timezone.
-Old, rolled files are kept for the number of days specified by the <code>jetty.console-capture.retainDays</code> property.</p>
+<p>The concept of well-known URIs has been defined in <a href="https://datatracker.ietf.org/doc/html/rfc5785">RFC5785</a>.
+This module can be used for things like the automatic renewal of <a href="https://letsencrypt.org/">Let&#8217;s Encrypt</a> certificates.
+See <a href="https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml">IANA Well-Known URIs</a> for more possible examples of how this can be used.</p>
 </div>
 <div class="paragraph">
 <p>The module properties are:</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>## Logging directory (relative to $JETTY_BASE).
-# jetty.console-capture.dir=./logs
-
-## Whether to append to existing file.
-# jetty.console-capture.append=true
-
-## How many days to retain old log files.
-# jetty.console-capture.retainDays=90
-
-## Timezone ID of the log timestamps, as specified by java.time.ZoneId.
-# jetty.console-capture.timezone=GMT</pre>
+<pre>## Well Known Directory (relative to $JETTY_BASE if relative path, otherwise it is an absolute path).
+# jetty.wellknown.dir=.well-known</pre>
 </div>
 </div>
 </div>
@@ -5401,7 +5835,7 @@
 <p>Note that the <code>http</code> Jetty module depends on the <code>server</code> Jetty module.</p>
 </div>
 <div class="paragraph">
-<p>Some parameters that you may want to configure are in fact common HTTP parameters that are applied not only for clear-text HTTP/1.1, but also for secure HTTP/1.1 or for clear-text HTTP/2 or for encrypted HTTP/2, and these configuration parameters may be present in the <code>server</code> module configuration file.</p>
+<p>Some parameters that you may want to configure are in fact common HTTP parameters that are applied not only for clear-text HTTP/1.1, but also for secure HTTP/1.1 or for clear-text HTTP/2 or for encrypted HTTP/2, or for HTTP/3, and these configuration parameters may be present in the <code>server</code> module configuration file.</p>
 </div>
 <div class="paragraph">
 <p>You can force the creation of the <code>server.ini</code> file via:</p>
@@ -5498,8 +5932,9 @@
 <div class="content">
 <pre class="CodeRay highlight nowrap"><code>INFO  : test-keystore   initialized in ${jetty.base}/start.d/test-keystore.ini
 INFO  : mkdir ${jetty.base}/lib/bouncycastle
-INFO  : copy /path/to/maven.repository/org/bouncycastle/bcpkix-jdk15on/1.62/bcpkix-jdk15on-1.62.jar to ${jetty.base}/lib/bouncycastle/bcpkix-jdk15on-1.62.jar
-INFO  : copy /path/to/maven.repository/org/bouncycastle/bcprov-jdk15on/1.62/bcprov-jdk15on-1.62.jar to ${jetty.base}/lib/bouncycastle/bcprov-jdk15on-1.62.jar
+INFO  : copy /path/to/maven.repository/org/bouncycastle/bcpkix-jdk15on/1.70/bcpkix-jdk15on-1.70.jar to ${jetty.base}/lib/bouncycastle/bcpkix-jdk15on-1.70.jar
+INFO  : copy /path/to/maven.repository/org/bouncycastle/bcprov-jdk15on/1.70/bcprov-jdk15on-1.70.jar to ${jetty.base}/lib/bouncycastle/bcprov-jdk15on-1.70.jar
+INFO  : copy /path/to/maven.repository/org/bouncycastle/bcutil-jdk15to18/1.70/bcutil-jdk15to18-1.70.jar to ${jetty.base}/lib/bouncycastle/bcutil-jdk15on-1.70.jar
 INFO  : Base directory was modified</code></pre>
 </div>
 </div>
@@ -5528,11 +5963,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:13:05.188:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
-<strong>2021-10-06 15:13:05.876:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:13:06.001:</strong>INFO :oejus.SslContextFactory:main: x509=X509@7975d1d8(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@24105dc5[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
-<strong>2021-10-06 15:13:06.110:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@5c45d770<mark>{SSL, (ssl, http/1.1)}{0.0.0.0:8443}</mark>
-<strong>2021-10-06 15:13:06.125:</strong>INFO :oejs.Server:main: Started Server@72c8e7b{STARTING}[11.0.7,sto=5000] @2035ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:28:02.459:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 12:28:02.803:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:02.860:</strong>INFO :oejus.SslContextFactory:main: x509=X509@2f4205be(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@544820b7[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 12:28:02.912:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@41e350f1<mark>{SSL, (ssl, http/1.1)}{0.0.0.0:8443}</mark>
+<strong>2022-02-07 12:28:02.922:</strong>INFO :oejs.Server:main: Started Server@10b9db7b{STARTING}[11.0.8,sto=5000] @995ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5587,7 +6022,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-e2488cc783b3434076c5a44ee7f19a2b.png" alt="Diagram" width="376" height="420">
+<img src="images/diag-e2488cc783b3434076c5a44ee7f19a2b.png" alt="Diagram" width="372" height="417">
 </div>
 </div>
 <div class="paragraph">
@@ -5595,7 +6030,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png" alt="Diagram" width="413" height="420">
+<img src="images/diag-8a7fb4bb9c84453a4bf01a24558e8026.png" alt="Diagram" width="407" height="417">
 </div>
 </div>
 <div class="paragraph">
@@ -5613,7 +6048,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png" alt="Diagram" width="135" height="284">
+<img src="images/diag-7387dfbb6f9fb9cfa951a697aca488a8.png" alt="Diagram" width="133" height="284">
 </div>
 </div>
 <div class="paragraph">
@@ -5621,7 +6056,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-70817cc5c7137abc9759cdcd3edbb658.png" alt="Diagram" width="219" height="397">
+<img src="images/diag-70817cc5c7137abc9759cdcd3edbb658.png" alt="Diagram" width="216" height="397">
 </div>
 </div>
 <div class="paragraph">
@@ -5629,7 +6064,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-2830e38460d606111888c5df2a645163.png" alt="Diagram" width="332" height="623">
+<img src="images/diag-2830e38460d606111888c5df2a645163.png" alt="Diagram" width="328" height="623">
 </div>
 </div>
 </div>
@@ -5683,11 +6118,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:13:08.734:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
-<strong>2021-10-06 15:13:09.725:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:13:09.843:</strong>INFO :oejus.SslContextFactory:main: x509=X509@7bf3a5d8(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@39b43d60[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
-<strong>2021-10-06 15:13:09.955:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@17d88132<mark>{SSL, (ssl, alpn, h2, http/1.1)}{0.0.0.0:8443}</mark>
-<strong>2021-10-06 15:13:09.971:</strong>INFO :oejs.Server:main: Started Server@730d2164{STARTING}[11.0.7,sto=5000] @2372ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:28:04.293:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 12:28:04.577:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:04.635:</strong>INFO :oejus.SslContextFactory:main: x509=X509@72ea6193(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@2a2c13a8[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 12:28:04.680:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@485a3466<mark>{SSL, (ssl, alpn, h2, http/1.1)}{0.0.0.0:8443}</mark>
+<strong>2022-02-07 12:28:04.687:</strong>INFO :oejs.Server:main: Started Server@3d97a632{STARTING}[11.0.8,sto=5000] @982ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5739,9 +6174,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:13:11.625:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:13:11.675:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@40e233c3<mark>{HTTP/1.1, (http/1.1, h2c)}{0.0.0.0:8080}</mark>
-<strong>2021-10-06 15:13:11.688:</strong>INFO :oejs.Server:main: Started Server@45b9a632{STARTING}[11.0.7,sto=5000] @861ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:28:05.720:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:05.748:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@305ffe9e<mark>{HTTP/1.1, (http/1.1, h2c)}{0.0.0.0:8080}</mark>
+<strong>2022-02-07 12:28:05.755:</strong>INFO :oejs.Server:main: Started Server@4659191b{STARTING}[11.0.8,sto=5000] @451ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -5801,13 +6236,76 @@
 </div>
 </div>
 <div class="sect3">
+<h4 id="og-protocols-http3"><a class="anchor" href="#og-protocols-http3"></a><a class="link" href="#og-protocols-http3">HTTP/3</a></h4>
+<div class="paragraph">
+<p>When you enable support for the HTTP/3 protocol, by default the secure HTTP/2 protocol is also enabled, so that browsers or clients that do not support HTTP/3 will be able to connect to your server.</p>
+</div>
+<div class="paragraph">
+<p>You need to enable:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>ssl</code> Jetty module, which provides the KeyStore and TLS configuration</p>
+</li>
+<li>
+<p>the <code>http3</code> Jetty module, which adds the HTTP/3 protocol on the HTTP/3 connector</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Use the following command (issued from within the <code>$JETTY_BASE</code> directory):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --add-modules=ssl,http3</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Enabling any module Jetty module that supports secure network communication requires a valid KeyStore (read <a href="#og-keystore">this section</a> to create your own KeyStore), that, as a quick example, you can enable with the <a href="#og-module-test-keystore"><code>test-keystore</code> module</a>, that creates on-the-fly a KeyStore containing a self-signed certificate:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --add-modules=test-keystore</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Starting Jetty yields:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar</pre>
+</div>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:28:06.921:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 12:28:07.319:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:07.372:</strong>INFO :oejus.SslContextFactory:main: x509=X509@26425897(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@56a4479a[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 12:28:07.411:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@71984c3{SSL, (ssl, alpn, h2)}{0.0.0.0:8443}
+<strong>2022-02-07 12:28:07.411:</strong>INFO :oejhs.HTTP3ServerConnector:main: HTTP/3+QUIC support is experimental and not suited for production use.
+<strong>2022-02-07 12:28:07.412:</strong>INFO :oejs.AbstractConnector:main: Started HTTP3ServerConnector@2364305a<mark>{h3, (h3)}{0.0.0.0:8444}</mark>
+<strong>2022-02-07 12:28:07.450:</strong>INFO :oejs.Server:main: Started Server@23d1e5d0{STARTING}[11.0.8,sto=5000] @1102ms</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note how Jetty is listening on port <code>8443</code> for HTTP/2 and on port <code>8444</code> for HTTP/3.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 protocol parameters can be configured by editing the <a href="#og-module-http3"><code>http3</code> module</a> properties.</p>
+</div>
+</div>
+<div class="sect3">
 <h4 id="og-protocols-ssl"><a class="anchor" href="#og-protocols-ssl"></a><a class="link" href="#og-protocols-ssl">Configuring Secure Protocols</a></h4>
 <div class="paragraph">
 <p>Secure protocols are normal protocols such as HTTP/1.1, HTTP/2 or WebSocket that are wrapped by the <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS protocol</a>.
-Any network protocol can be wrapped with TLS.</p>
+Any network protocol based on TCP can be wrapped with TLS.</p>
 </div>
 <div class="paragraph">
-<p>The <code>https</code> scheme used in URIs really means <code>tls+http/1.1</code> (or <code>tls+http/2</code>) and similarly the <code>wss</code> scheme used in URIs really means <code>tls+websocket</code>, etc.
+<p>QUIC, the protocol based on UDP that transports HTTP/3, uses TLS messages but not the TLS protocol framing.</p>
+</div>
+<div class="paragraph">
+<p>The <code>https</code> scheme used in URIs really means <code>tls+http/1.1</code> (or <code>tls+http/2</code>, or <code>quic+http/3</code>) and similarly the <code>wss</code> scheme used in URIs really means <code>tls+websocket</code>, etc.
 Senders wrap the underlying protocol bytes (e.g. HTTP bytes or WebSocket bytes) with the TLS protocol, while receivers first interpret the TLS protocol to obtain the underlying protocol bytes, and then interpret the wrapped bytes.</p>
 </div>
 <div class="paragraph">
@@ -6073,7 +6571,7 @@
 <p>Whether SNI is required at the TLS level, defaults to <code>false</code>.
 Its behavior is explained by the following table:</p>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 1. Behavior of the <code>jetty.sslContext.sniRequired</code> property</caption>
+<caption class="title">Table 2. Behavior of the <code>jetty.sslContext.sniRequired</code> property</caption>
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -6158,7 +6656,7 @@
 <p>Whether SNI is required at the HTTP level, defaults to <code>false</code>.
 Its behavior is similar to the <code>jetty.sslContext.sniRequired</code> property above, and is explained by the following table:</p>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 2. Behavior of the <code>jetty.ssl.sniRequired</code> property</caption>
+<caption class="title">Table 3. Behavior of the <code>jetty.ssl.sniRequired</code> property</caption>
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -6225,7 +6723,7 @@
 <p>Whether the certificate sent to the client matches the <code>Host</code> header, defaults to <code>true</code>.
 Its behavior is explained by the following table:</p>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 3. Behavior of the <code>jetty.ssl.sniHostCheck</code> property</caption>
+<caption class="title">Table 4. Behavior of the <code>jetty.ssl.sniHostCheck</code> property</caption>
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -6444,9 +6942,9 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:13:15.000:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:13:15.058:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@bef2d72<mark>{[proxy], ([proxy], http/1.1)}{0.0.0.0:8080}</mark>
-<strong>2021-10-06 15:13:15.075:</strong>INFO :oejs.Server:main: Started Server@b62fe6d{STARTING}[11.0.7,sto=5000] @831ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:28:09.302:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:09.328:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@1cf6d1be<mark>{[proxy], ([proxy], http/1.1)}{0.0.0.0:8080}</mark>
+<strong>2022-02-07 12:28:09.335:</strong>INFO :oejs.Server:main: Started Server@3232a28a{STARTING}[11.0.8,sto=5000] @438ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -6488,11 +6986,11 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code><strong>2021-10-06 15:13:17.968:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
-<strong>2021-10-06 15:13:18.731:</strong>INFO :oejs.Server:main: jetty-11.0.7; built: 2021-10-06T19:59:39.004Z; git: 389a3587725d94cc2470ed06aa184c6e57fe9ce8; jvm 17+35
-<strong>2021-10-06 15:13:18.840:</strong>INFO :oejus.SslContextFactory:main: x509=X509@7d7758be(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@5f9edf14[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
-<strong>2021-10-06 15:13:18.948:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@78ed0eb<mark>{[proxy], ([proxy], ssl, http/1.1)}{0.0.0.0:8443}</mark>
-<strong>2021-10-06 15:13:18.963:</strong>INFO :oejs.Server:main: Started Server@4d14b6c2{STARTING}[11.0.7,sto=5000] @2082ms</code></pre>
+<pre class="CodeRay highlight nowrap"><code><strong>2022-02-07 12:28:10.969:</strong>WARN :oejk.KeystoreGenerator:main: Generating Test Keystore: DO NOT USE IN PRODUCTION!
+<strong>2022-02-07 12:28:11.443:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:11.495:</strong>INFO :oejus.SslContextFactory:main: x509=X509@6955cb39(jetty-test-keystore,h=[localhost],a=[],w=[]) for Server@5f7b97da[provider=null,keyStore=file:///path/to/jetty.base/etc/test-keystore.p12,trustStore=null]
+<strong>2022-02-07 12:28:11.540:</strong>INFO :oejs.AbstractConnector:main: Started ServerConnector@1ef3efa8<mark>{[proxy], ([proxy], ssl, http/1.1)}{0.0.0.0:8443}</mark>
+<strong>2022-02-07 12:28:11.546:</strong>INFO :oejs.Server:main: Started Server@4a194c39{STARTING}[11.0.8,sto=5000] @1122ms</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -9477,7 +9975,7 @@
 <p>There are many configuration parameters for the Apache Jasper JSP Servlet, here are some of them:</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 4. JSP Servlet Parameters</caption>
+<caption class="title">Table 5. JSP Servlet Parameters</caption>
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -11147,7 +11645,7 @@
 <p>This configuration is useful when you develop and test your Jetty server locally.</p>
 </div>
 <div class="paragraph">
-<p>JMX compliant tools such as <a href="https://adoptopenjdk.net/jmc.html">Java Mission Control (JMC)</a> can be started locally on your machine and can attach to other JVMs running on your machine, showing you the registered MBeans among which you will find the Jetty MBeans.</p>
+<p>JMX compliant tools such as <a href="https://adoptium.net/jmc.html">Java Mission Control (JMC)</a> can be started locally on your machine and can attach to other JVMs running on your machine, showing you the registered MBeans among which you will find the Jetty MBeans.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -11507,7 +12005,7 @@
 <p>JMX compliant tools that offer a graphical user interface also must be started specifying the TrustStore path and password.</p>
 </div>
 <div class="paragraph">
-<p>For example, to launch <a href="https://adoptopenjdk.net/jmc.html">Java Mission Control (JMC)</a>:</p>
+<p>For example, to launch <a href="https://adoptium.net/jmc.html">Java Mission Control (JMC)</a>:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -11662,7 +12160,7 @@
 </td>
 <td class="content">
 <div class="paragraph">
-<p>The <code>console-capture</code> Jetty module should be used only in conjunction with the <code>logging-jetty</code> module, as other SLF4J bindings such as LogBack or Log4J2 have their own, more sophisticated, rolling file appenders.</p>
+<p>The <code>console-capture</code> Jetty module should be used only in conjunction with the <code>logging-jetty</code> module, as other SLF4J bindings such as LogBack or Log4j2 have their own, more sophisticated, rolling file appenders.</p>
 </div>
 </td>
 </tr>
@@ -11682,10 +12180,10 @@
 <p><code>logging-logback</code>, to use the <a href="http://logback.qos.ch/">LogBack</a> binding</p>
 </li>
 <li>
-<p><code>logging-log4j2</code>, to use the <a href="https://logging.apache.org/log4j/2.x/">Log4J2</a> binding</p>
+<p><code>logging-log4j2</code>, to use the <a href="https://logging.apache.org/log4j/2.x/">Log4j2</a> binding</p>
 </li>
 <li>
-<p><code>logging-log4j1</code>, to use the <a href="https://logging.apache.org/log4j/1.2/">Log4J1</a> binding (note that Log4J 1.x is end-of-life)</p>
+<p><code>logging-log4j1</code>, to use the <a href="https://logging.apache.org/log4j/1.2/">Log4j1</a> binding (note that Log4j 1.x is end-of-life)</p>
 </li>
 <li>
 <p><code>logging-jul</code>, to use the <code>java.util.logging</code> binding</p>
@@ -11729,7 +12227,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="og-logging-server-custom-log4j2"><a class="anchor" href="#og-logging-server-custom-log4j2"></a><a class="link" href="#og-logging-server-custom-log4j2">Logging with Log4J2</a></h6>
+<h6 id="og-logging-server-custom-log4j2"><a class="anchor" href="#og-logging-server-custom-log4j2"></a><a class="link" href="#og-logging-server-custom-log4j2">Logging with Log4j2</a></h6>
 <div class="paragraph">
 <p>Similarly to <a href="#og-logging-server-custom-logback">logging with LogBack</a>, you can enable the <code>logging-log4j2</code> Jetty module in this way (from the <code>$JETTY_BASE</code> directory):</p>
 </div>
@@ -11739,7 +12237,7 @@
 </div>
 </div>
 <div class="paragraph">
-<p>After accepting the Log4J2 license, you will have the following directory structure:</p>
+<p>After accepting the Log4j2 license, you will have the following directory structure:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -11757,7 +12255,7 @@
 </div>
 </div>
 <div class="paragraph">
-<p>The Jetty module system downloaded the required Log4J2 <code>*.jar</code> files, and created a <code>$JETTY_BASE/resources/log4j2.xml</code> file that you can configure to customize your Log4J2 logging.</p>
+<p>The Jetty module system downloaded the required Log4j2 <code>*.jar</code> files, and created a <code>$JETTY_BASE/resources/log4j2.xml</code> file that you can configure to customize your Log4j2 logging.</p>
 </div>
 </div>
 </div>
@@ -11792,7 +12290,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png" alt="Diagram" width="686" height="174">
+<img src="images/diag-792f4cd700f2b5af8fedd7b0249d25b4.png" alt="Diagram" width="685" height="174">
 </div>
 </div>
 <div class="paragraph">
@@ -11805,7 +12303,70 @@
 <div class="sect3">
 <h4 id="og-logging-request"><a class="anchor" href="#og-logging-request"></a><a class="link" href="#og-logging-request">Request Logging</a></h4>
 <div class="paragraph">
-<p>TODO</p>
+<p>HTTP requests and responses can be logged to provide data that can be later analyzed with other tools, that can provide information such as the most frequently accessed request URIs, the response status codes, the request/response content lengths, geographical information about the clients, etc.</p>
+</div>
+<div class="paragraph">
+<p>Request logging is enabled by enabling the <code>requestlog</code> Jetty module.
+In the example below, both the <code>http</code> Jetty module and the <code>requestlog</code> module are enabled, so that you can make HTTP requests to the server and have them logged:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ cd $JETTY_BASE
+$ java -jar $JETTY_HOME/start.jar --add-modules=http,requestlog</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>$JETTY_BASE</code> directory looks like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>$JETTY_BASE
+├── logs
+├── resources
+│   └── jetty-logging.properties
+└── start.d
+    ├── http.ini
+    └── requestlog.ini</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>$JETTY_BASE/start.d/requestlog.ini</code> file is the Jetty module configuration file that allows you to configure the <code>requestlog</code> module, see <a href="#og-module-requestlog">this section</a> for more details.</p>
+</div>
+<div class="paragraph">
+<p>By default the <code>requestlog</code> Jetty module produces the <code>$JETTY_BASE/logs/yyyy_MM_dd.request.log</code>, where the pattern <code>yyyy_MM_dd</code> is replaced with the current date, for example <code>2020_01_31</code>.</p>
+</div>
+<div class="paragraph">
+<p>The format of the request log lines is the result of a <em>format string</em> that uses formatting symbols to log relevant request/response data.</p>
+</div>
+<div class="paragraph">
+<p>The default format is the <a href="https://en.wikipedia.org/wiki/Common_Log_Format">NCSA Format</a> extended with referrer data and user-agent data.
+A typical log line looks like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight nowrap"><code>192.168.0.100 - - [31/Jan/2020:20:30:40 +0000] &quot;GET / HTTP/1.1&quot; 200 6789 &quot;-&quot; &quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36&quot;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The line above (that uses fake values) shows <code>192.168.0.100</code> for the client IP address, a hard-coded <code>-</code> for the identity, <code>-</code> for the authenticated user name, <code>[31/Jan/2020:20:30:40 +0000]</code> for the date and time with timezone, <code>"GET / HTTP/1.1"</code> for the HTTP request line, <code>200</code> for the HTTP response status code, <code>6789</code> for the HTTP response content length, <code>"-"</code> for the referrer and <code>"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"</code> for the user-agent.</p>
+</div>
+<div class="paragraph">
+<p>The format string can be customized as described in <a href="#og-module-requestlog">this section</a>.
+Request log files are rolled every day, and retained for customizable number of days, by default 90 days.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>When Jetty is behind a load balancer, you want to log the remote client IP address, not the load balancer IP address. Refer to <a href="#og-protocols-proxy">this section</a> to configure the load balancer and Jetty to retain the remote client IP address information.</p>
+</div>
+</td>
+</tr>
+</table>
 </div>
 </div>
 </div>
@@ -11953,287 +12514,298 @@
 </div>
 <div class="listingblock small">
 <div class="content">
-<pre class="CodeRay highlight nowrap"><code>Server@6295d394{STARTING}[11.0.7,sto=5000] - STARTING <i class="conum" data-value="1"></i><b>(1)</b>
-+= QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@a9cd3b1{reserved=0/8,pending=0}] - STARTED <i class="conum" data-value="2"></i><b>(2)</b>
-|  +- org.eclipse.jetty.util.thread.ThreadPoolBudget@13e39c73
-|  += ReservedThreadExecutor@a9cd3b1{reserved=0/8,pending=0} - STARTED
+<pre class="CodeRay highlight nowrap"><code>Server@5fbdfdcf{STARTING}[11.0.8,sto=5000] - STARTING <i class="conum" data-value="1"></i><b>(1)</b>
++= QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}] - STARTED <i class="conum" data-value="2"></i><b>(2)</b>
+|  +- org.eclipse.jetty.util.thread.ThreadPoolBudget@2767e23c
+|  += ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0} - STARTED
 |  |  +&gt; threads size=0
 |  +&gt; threads size=4
-|     +&gt; qtp143110009-18 TIMED_WAITING tid=18 prio=5 IDLE
-|     +&gt; qtp143110009-15 RUNNABLE tid=15 prio=5 SELECTING
-|     +&gt; qtp143110009-16 TIMED_WAITING tid=16 prio=5 IDLE
-|     +&gt; qtp143110009-17-acceptor-0@6a61babe-ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} RUNNABLE tid=17 prio=3 ACCEPTING
-+- org.eclipse.jetty.io.ArrayByteBufferPool@c267ef4
-+= ScheduledExecutorScheduler@47db50c5{STARTED} - STARTED
-+= HandlerList@30ee2816{STARTED} - STARTED <i class="conum" data-value="3"></i><b>(3)</b>
-|  += ContextHandlerCollection@31d7b7bf{STARTED} - STARTED
-|  += DefaultHandler@635eaaf1{STARTED} - STARTED
-+= ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED <i class="conum" data-value="4"></i><b>(4)</b>
-|  +~ QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@a9cd3b1{reserved=0/8,pending=0}] - STARTED
-|  +~ ScheduledExecutorScheduler@47db50c5{STARTED} - STARTED
-|  +- org.eclipse.jetty.io.ArrayByteBufferPool@c267ef4
-|  +- org.eclipse.jetty.io.ArrayRetainableByteBufferPool@5c30a9b0{min=0,max=65536,buckets=64,heap=0/-1,direct=0/-1}
+|     +&gt; qtp350068407-23 TIMED_WAITING tid=23 prio=5 IDLE
+|     +&gt; qtp350068407-21 RUNNABLE tid=21 prio=5 SELECTING
+|     +&gt; qtp350068407-24 TIMED_WAITING tid=24 prio=5 IDLE
+|     +&gt; qtp350068407-22-acceptor-0@1cebe158-ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} RUNNABLE tid=22 prio=3 ACCEPTING
++= AttributeContainerMap@3e08ff24{size=0} - STARTED
++- ArrayByteBufferPool@24569dba{minBufferCapacity=0, maxBufferCapacity=65536, maxQueueLength=-1, factor=1024}
+|  +&gt; java.util.ArrayList@83b907e3(size=4)
+|     +: HeapMemory: 0/2089811968
+|     +: DirectMemory: 0/2089811968
+|     +: Indirect Buckets size=0
+|     +: Direct Buckets size=0
++= ScheduledExecutorScheduler@2362f559{STARTED} - STARTED
++= HandlerList@5ddeb7cb{STARTED} - STARTED <i class="conum" data-value="3"></i><b>(3)</b>
+|  += ContextHandlerCollection@70ed52de{STARTED} - STARTED
+|  += DefaultHandler@496bc455{STARTED} - STARTED
++= ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED <i class="conum" data-value="4"></i><b>(4)</b>
+|  +~ QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}] - STARTED
+|  +~ ScheduledExecutorScheduler@2362f559{STARTED} - STARTED
+|  +- ArrayByteBufferPool@24569dba{minBufferCapacity=0, maxBufferCapacity=65536, maxQueueLength=-1, factor=1024}
+|  |  +&gt; java.util.ArrayList@83b907e3(size=4)
+|  |     +: HeapMemory: 0/2089811968
+|  |     +: DirectMemory: 0/2089811968
+|  |     +: Indirect Buckets size=0
+|  |     +: Direct Buckets size=0
+|  +- org.eclipse.jetty.io.ArrayRetainableByteBufferPool@59402b8f{min=0,max=65536,buckets=64,heap=0/-1,direct=0/-1}
 |  |  +&gt; direct size=64
-|  |  |  +&gt; Bucket@1ddf84b8[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7188af83[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@636be97c[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
+|  |  |  +&gt; Bucket@303cf2ba[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@50a638b5[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
+|  |  |  +&gt; Bucket@76494737[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1817d444[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4a003cbe[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@6ca8564a[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4082ba93[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@50b472aa[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
+|  |  |  +&gt; Bucket@17fc391b[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@31368b99[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
+|  |  |  +&gt; Bucket@2b30a42c[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1725dc0f[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
+|  |  |  +&gt; Bucket@609e8838[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3911c2a7[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
+|  |  |  +&gt; Bucket@359df09a[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@4ac3c60d[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
+|  |  |  +&gt; Bucket@43df23d3[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@4facf68f[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6d60fe40[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@76508ed1[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
+|  |  |  +&gt; Bucket@792b749c[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@41e36e46[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
+|  |  |  +&gt; Bucket@23e84203[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@15c43bd9[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
+|  |  |  +&gt; Bucket@19932c16[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3d74bf60[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
+|  |  |  +&gt; Bucket@73eb439a[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@4f209819[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
+|  |  |  +&gt; Bucket@514646ef[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@15eb5ee5[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
+|  |  |  +&gt; Bucket@305ffe9e[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2145b572[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
+|  |  |  +&gt; Bucket@302c971f[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@39529185[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
+|  |  |  +&gt; Bucket@1972e513[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@72f926e6[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7ae0a9ec[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3daa422a[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
+|  |  |  +&gt; Bucket@35841320[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@31c88ec8[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
+|  |  |  +&gt; Bucket@61c4eee0[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1cbbffcd[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6f10d5b6[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@27ce24aa[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
+|  |  |  +&gt; Bucket@1040be71[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@481a996b[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
+|  |  |  +&gt; Bucket@548a24a[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3d51f06e[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
+|  |  |  +&gt; Bucket@433defed[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7ed7259e[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
+|  |  |  +&gt; Bucket@2a693f59[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@28eaa59a[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
+|  |  |  +&gt; Bucket@3f4faf53[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3427b02d[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7fd50002[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@647e447[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
+|  |  |  +&gt; Bucket@533bda92[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@41fbdac4[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
+|  |  |  +&gt; Bucket@304bb45b[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3c407114[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
+|  |  |  +&gt; Bucket@723ca036[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@35ef1869[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
+|  |  |  +&gt; Bucket@25be7b63[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@c33b74f[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
+|  |  |  +&gt; Bucket@28dcca0c[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@130161f7[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
+|  |  |  +&gt; Bucket@45d84a20[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2c767a52[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
+|  |  |  +&gt; Bucket@52f27fbd[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@619713e5[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4c163e3[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@708f5957[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4a8355dd[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@68999068[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4d0d9fe7[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7722c3c3[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
+|  |  |  +&gt; Bucket@c430e6c[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2ef3eef9[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
+|  |  |  +&gt; Bucket@312aa7c[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@243c4f91[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
+|  |  |  +&gt; Bucket@536f2a7e[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@291ae[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
+|  |  |  +&gt; Bucket@72bc6553[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@61df66b6[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
+|  |  |  +&gt; Bucket@66982506[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@50eac852[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
+|  |  |  +&gt; Bucket@70cf32e3[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@16ec5519[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5a59ca5e[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@2f7298b[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4bdeaabb[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@188715b5[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6c4906d3[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1ea9f6af[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
+|  |  |  +&gt; Bucket@65987993[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@6a192cfe[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
+|  |  |  +&gt; Bucket@71075444[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@5119fb47[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4f32a3ad[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7193666c[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6b695b06[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@20deea7f[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4d1bf319[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@3835c46[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6f53b8a[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@1dde4cb2[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5c80cf32[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@7714e963[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7d900ecf[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@20ce78ec[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
+|  |  |  +&gt; Bucket@6f01b95f[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@393671df[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4007f65e[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@56620197[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
+|  |  |  +&gt; Bucket@1a245833[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@6eda5c9[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
+|  |  |  +&gt; Bucket@673fdbce[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@55b7a4e0[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5965d37[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@5f058f00[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
+|  |  |  +&gt; Bucket@7a5ceedd[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@192d43ce[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
+|  |  |  +&gt; Bucket@4201c465[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
 |  |  |  |  +&gt; entries size=0
-|  |  |  +&gt; Bucket@72057ecf[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
+|  |  |  +&gt; Bucket@5b799640[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
 |  |  |     +&gt; entries size=0
 |  |  +&gt; indirect size=64
-|  |     +&gt; Bucket@1afd44cb[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
+|  |     +&gt; Bucket@6cb107fd[inUse=0,size=0,max=2147483647,closed=false]{capacity=1024,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6973b51b[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
+|  |     +&gt; Bucket@710636b0[inUse=0,size=0,max=2147483647,closed=false]{capacity=2048,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1ab3a8c8[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
+|  |     +&gt; Bucket@3de8f619[inUse=0,size=0,max=2147483647,closed=false]{capacity=3072,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@43195e57[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
+|  |     +&gt; Bucket@2ab4bc72[inUse=0,size=0,max=2147483647,closed=false]{capacity=4096,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@333291e3[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
+|  |     +&gt; Bucket@4e5ed836[inUse=0,size=0,max=2147483647,closed=false]{capacity=5120,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@479d31f3[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
+|  |     +&gt; Bucket@eadd4fb[inUse=0,size=0,max=2147483647,closed=false]{capacity=6144,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@40ef3420[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
+|  |     +&gt; Bucket@740fb309[inUse=0,size=0,max=2147483647,closed=false]{capacity=7168,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@498d318c[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
+|  |     +&gt; Bucket@7bd7d6d6[inUse=0,size=0,max=2147483647,closed=false]{capacity=8192,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6e171cd7[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
+|  |     +&gt; Bucket@43f02ef2[inUse=0,size=0,max=2147483647,closed=false]{capacity=9216,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@402bba4f[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
+|  |     +&gt; Bucket@239a307b[inUse=0,size=0,max=2147483647,closed=false]{capacity=10240,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@795cd85e[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
+|  |     +&gt; Bucket@2a8448fa[inUse=0,size=0,max=2147483647,closed=false]{capacity=11264,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@59fd97a8[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
+|  |     +&gt; Bucket@6f204a1a[inUse=0,size=0,max=2147483647,closed=false]{capacity=12288,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@f5ac9e4[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
+|  |     +&gt; Bucket@2de56eb2[inUse=0,size=0,max=2147483647,closed=false]{capacity=13312,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@123ef382[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
+|  |     +&gt; Bucket@5f8e8a9d[inUse=0,size=0,max=2147483647,closed=false]{capacity=14336,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@dbf57b3[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
+|  |     +&gt; Bucket@5745ca0e[inUse=0,size=0,max=2147483647,closed=false]{capacity=15360,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@384ad17b[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
+|  |     +&gt; Bucket@3ad83a66[inUse=0,size=0,max=2147483647,closed=false]{capacity=16384,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@61862a7f[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
+|  |     +&gt; Bucket@3cce5371[inUse=0,size=0,max=2147483647,closed=false]{capacity=17408,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@441772e[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
+|  |     +&gt; Bucket@17bffc17[inUse=0,size=0,max=2147483647,closed=false]{capacity=18432,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@7334aada[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
+|  |     +&gt; Bucket@6e535154[inUse=0,size=0,max=2147483647,closed=false]{capacity=19456,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1d9b7cce[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
+|  |     +&gt; Bucket@15a34df2[inUse=0,size=0,max=2147483647,closed=false]{capacity=20480,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4d9e68d0[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
+|  |     +&gt; Bucket@5b38c1ec[inUse=0,size=0,max=2147483647,closed=false]{capacity=21504,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@42e99e4a[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
+|  |     +&gt; Bucket@338fc1d8[inUse=0,size=0,max=2147483647,closed=false]{capacity=22528,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@14dd9eb7[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
+|  |     +&gt; Bucket@4722ef0c[inUse=0,size=0,max=2147483647,closed=false]{capacity=23552,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@52e6fdee[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
+|  |     +&gt; Bucket@48e1f6c7[inUse=0,size=0,max=2147483647,closed=false]{capacity=24576,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6c80d78a[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
+|  |     +&gt; Bucket@55cb6996[inUse=0,size=0,max=2147483647,closed=false]{capacity=25600,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@62150f9e[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
+|  |     +&gt; Bucket@1807e3f6[inUse=0,size=0,max=2147483647,closed=false]{capacity=26624,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1a451d4d[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
+|  |     +&gt; Bucket@480d3575[inUse=0,size=0,max=2147483647,closed=false]{capacity=27648,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@7fa98a66[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
+|  |     +&gt; Bucket@f1da57d[inUse=0,size=0,max=2147483647,closed=false]{capacity=28672,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@15ff3e9e[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
+|  |     +&gt; Bucket@194fad1[inUse=0,size=0,max=2147483647,closed=false]{capacity=29696,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5fdcaa40[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
+|  |     +&gt; Bucket@26abb146[inUse=0,size=0,max=2147483647,closed=false]{capacity=30720,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6dc17b83[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
+|  |     +&gt; Bucket@72c8e7b[inUse=0,size=0,max=2147483647,closed=false]{capacity=31744,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5e0826e7[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
+|  |     +&gt; Bucket@65f8f5ae[inUse=0,size=0,max=2147483647,closed=false]{capacity=32768,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@32eff876[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
+|  |     +&gt; Bucket@431cd9b2[inUse=0,size=0,max=2147483647,closed=false]{capacity=33792,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@8dbdac1[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
+|  |     +&gt; Bucket@38467116[inUse=0,size=0,max=2147483647,closed=false]{capacity=34816,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6e20b53a[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
+|  |     +&gt; Bucket@5b7a7f33[inUse=0,size=0,max=2147483647,closed=false]{capacity=35840,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@71809907[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
+|  |     +&gt; Bucket@790da477[inUse=0,size=0,max=2147483647,closed=false]{capacity=36864,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@3ce1e309[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
+|  |     +&gt; Bucket@5c7933ad[inUse=0,size=0,max=2147483647,closed=false]{capacity=37888,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6aba2b86[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
+|  |     +&gt; Bucket@57bc27f5[inUse=0,size=0,max=2147483647,closed=false]{capacity=38912,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@158da8e[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
+|  |     +&gt; Bucket@5fb759d6[inUse=0,size=0,max=2147483647,closed=false]{capacity=39936,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@74e52303[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
+|  |     +&gt; Bucket@4b8d604b[inUse=0,size=0,max=2147483647,closed=false]{capacity=40960,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@47af7f3d[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
+|  |     +&gt; Bucket@5e7cd6cc[inUse=0,size=0,max=2147483647,closed=false]{capacity=41984,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@7c729a55[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
+|  |     +&gt; Bucket@68c9d179[inUse=0,size=0,max=2147483647,closed=false]{capacity=43008,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@3bb9a3ff[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
+|  |     +&gt; Bucket@d554c5f[inUse=0,size=0,max=2147483647,closed=false]{capacity=44032,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@661972b0[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
+|  |     +&gt; Bucket@2dfaea86[inUse=0,size=0,max=2147483647,closed=false]{capacity=45056,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5af3afd9[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
+|  |     +&gt; Bucket@15888343[inUse=0,size=0,max=2147483647,closed=false]{capacity=46080,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@323b36e0[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
+|  |     +&gt; Bucket@33ecda92[inUse=0,size=0,max=2147483647,closed=false]{capacity=47104,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@44ebcd03[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
+|  |     +&gt; Bucket@14fc5f04[inUse=0,size=0,max=2147483647,closed=false]{capacity=48128,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@694abbdc[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
+|  |     +&gt; Bucket@6e2829c7[inUse=0,size=0,max=2147483647,closed=false]{capacity=49152,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@2e005c4b[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
+|  |     +&gt; Bucket@3feb2dda[inUse=0,size=0,max=2147483647,closed=false]{capacity=50176,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4567f35d[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
+|  |     +&gt; Bucket@6a8658ff[inUse=0,size=0,max=2147483647,closed=false]{capacity=51200,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@5ffead27[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
+|  |     +&gt; Bucket@1c742ed4[inUse=0,size=0,max=2147483647,closed=false]{capacity=52224,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6356695f[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
+|  |     +&gt; Bucket@333d4a8c[inUse=0,size=0,max=2147483647,closed=false]{capacity=53248,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4f18837a[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
+|  |     +&gt; Bucket@55de24cc[inUse=0,size=0,max=2147483647,closed=false]{capacity=54272,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@359f7cdf[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
+|  |     +&gt; Bucket@dc7df28[inUse=0,size=0,max=2147483647,closed=false]{capacity=55296,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@1fa268de[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
+|  |     +&gt; Bucket@30f842ca[inUse=0,size=0,max=2147483647,closed=false]{capacity=56320,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4f6ee6e4[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
+|  |     +&gt; Bucket@69c81773[inUse=0,size=0,max=2147483647,closed=false]{capacity=57344,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4466af20[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
+|  |     +&gt; Bucket@4d14b6c2[inUse=0,size=0,max=2147483647,closed=false]{capacity=58368,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@a514af7[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
+|  |     +&gt; Bucket@7e990ed7[inUse=0,size=0,max=2147483647,closed=false]{capacity=59392,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@6b927fb[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
+|  |     +&gt; Bucket@c05fddc[inUse=0,size=0,max=2147483647,closed=false]{capacity=60416,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@3e58a80e[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
+|  |     +&gt; Bucket@25df00a0[inUse=0,size=0,max=2147483647,closed=false]{capacity=61440,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4fb61f4a[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
+|  |     +&gt; Bucket@4d15107f[inUse=0,size=0,max=2147483647,closed=false]{capacity=62464,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@4fb0f2b9[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
+|  |     +&gt; Bucket@7b4c50bc[inUse=0,size=0,max=2147483647,closed=false]{capacity=63488,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@79924b[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
+|  |     +&gt; Bucket@5884a914[inUse=0,size=0,max=2147483647,closed=false]{capacity=64512,inuse=0(0%)}
 |  |     |  +&gt; entries size=0
-|  |     +&gt; Bucket@7b9a4292[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
+|  |     +&gt; Bucket@50378a4[inUse=0,size=0,max=2147483647,closed=false]{capacity=65536,inuse=0(0%)}
 |  |        +&gt; entries size=0
-|  +- org.eclipse.jetty.server.AbstractConnector$1@4a94ee4
-|  += HttpConnectionFactory@62e136d3[HTTP/1.1] - STARTED
-|  |  +- HttpConfiguration@12468a38{32768/8192,8192/8192,https://:0,[]}
+|  +- org.eclipse.jetty.server.AbstractConnector$1@60f00693
+|  += HttpConnectionFactory@69e1dd28[HTTP/1.1] - STARTED
+|  |  +- HttpConfiguration@34bde49d{32768/8192,8192/8192,https://:0,[]}
 |  |     +&gt; customizers size=0
 |  |     +&gt; formEncodedMethods size=2
 |  |     |  +&gt; POST
@@ -12254,39 +12826,39 @@
 |  |     +&gt; maxErrorDispatches=10
 |  |     +&gt; minRequestDataRate=0
 |  |     +&gt; minResponseDataRate=0
-|  |     +&gt; requestCookieCompliance=org.eclipse.jetty.http.CookieCompliance@9f116cc
-|  |     +&gt; responseCookieCompliance=org.eclipse.jetty.http.CookieCompliance@9f116cc
+|  |     +&gt; requestCookieCompliance=org.eclipse.jetty.http.CookieCompliance@23f5b5dc
+|  |     +&gt; responseCookieCompliance=org.eclipse.jetty.http.CookieCompliance@23f5b5dc
 |  |     +&gt; notifyRemoteAsyncErrors=true
 |  |     +&gt; relativeRedirectAllowed=false
-|  += SelectorManager@ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED
-|  |  += ManagedSelector@7ec7ffd3{STARTED} id=0 keys=0 selected=0 updates=0 - STARTED <i class="conum" data-value="5"></i><b>(5)</b>
-|  |     += AdaptiveExecutionStrategy@5b239d7d/SelectorProducer@6572421/PRODUCING/p=false/QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@a9cd3b1{reserved=0/8,pending=0}][pc=0,pic=0,pec=0,epc=0]@2021-10-06T15:13:21.458121-05:00 - STARTED
-|  |     |  +- SelectorProducer@6572421
-|  |     |  +~ QueuedThreadPool[qtp143110009]@887af79{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@a9cd3b1{reserved=0/8,pending=0}] - STARTED
-|  |     +&gt; updates @ 2021-10-06T15:13:21.455455-05:00 size=0
-|  |     +&gt; keys @ 2021-10-06T15:13:21.457346-05:00 size=0 <i class="conum" data-value="6"></i><b>(6)</b>
-|  +- sun.nio.ch.ServerSocketChannelImpl[/[0:0:0:0:0:0:0:0]:8080]
-|  +- qtp143110009-17-acceptor-0@6a61babe-ServerConnector@1184ab05{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
-+- org.eclipse.jetty.util.component.HaltLifeCycleListener@6b81ce95
-+= ErrorHandler@2a798d51{STARTED} - STARTED
-+&gt; startJarLoader@28ba21f3 <i class="conum" data-value="7"></i><b>(7)</b>
+|  += SelectorManager@ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED
+|  |  += ManagedSelector@7139992f{STARTED} id=0 keys=0 selected=0 updates=0 - STARTED <i class="conum" data-value="5"></i><b>(5)</b>
+|  |     += AdaptiveExecutionStrategy@69504ae9/SelectorProducer@7dfd3c81/PRODUCING/p=false/QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}][pc=0,pic=0,pec=0,epc=0]@2022-02-07T12:28:12.877218+01:00 - STARTED
+|  |     |  +- SelectorProducer@7dfd3c81
+|  |     |  +~ QueuedThreadPool[qtp350068407]@14dd9eb7{STARTED,4&lt;=4&lt;=200,i=2,r=-1,q=0}[ReservedThreadExecutor@6fa51cd4{reserved=0/16,pending=0}] - STARTED
+|  |     +&gt; updates @ 2022-02-07T12:28:12.874678+01:00 size=0
+|  |     +&gt; keys @ 2022-02-07T12:28:12.87596+01:00 size=0 <i class="conum" data-value="6"></i><b>(6)</b>
+|  +- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8080]
+|  +- qtp350068407-22-acceptor-0@1cebe158-ServerConnector@248e319b{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
++- org.eclipse.jetty.util.component.HaltLifeCycleListener@2584b82d
++= ErrorHandler@7bbc8656{STARTED} - STARTED
++&gt; startJarLoader@4b553d26 <i class="conum" data-value="7"></i><b>(7)</b>
    +&gt; URLs size=9
    |  +&gt; file:/path/to/jetty.base/resources/
    |  +&gt; file:/path/to/jetty.home/lib/logging/slf4j-api-2.0.0-alpha5.jar
-   |  +&gt; file:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.7.jar
+   |  +&gt; file:/path/to/jetty.home/lib/logging/jetty-slf4j-impl-11.0.8.jar
    |  +&gt; file:/path/to/jetty.home/lib/jetty-jakarta-servlet-api-5.0.2.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-http-11.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-server-11.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-xml-11.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-util-11.0.7.jar
-   |  +&gt; file:/path/to/jetty.home/lib/jetty-io-11.0.7.jar
-   +&gt; jdk.internal.loader.ClassLoaders$AppClassLoader@42110406
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-http-11.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-server-11.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-xml-11.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-util-11.0.8.jar
+   |  +&gt; file:/path/to/jetty.home/lib/jetty-io-11.0.8.jar
+   +&gt; jdk.internal.loader.ClassLoaders$AppClassLoader@277050dc
       +&gt; packages size=4
       |  +&gt; package org.eclipse.jetty.start.config
       |  +&gt; package org.eclipse.jetty.start.builders
       |  +&gt; package org.eclipse.jetty.start.shaded.util
       |  +&gt; package org.eclipse.jetty.start
-      +&gt; jdk.internal.loader.ClassLoaders$PlatformClassLoader@3f5f02d7
+      +&gt; jdk.internal.loader.ClassLoaders$PlatformClassLoader@5a7fe64f
          +&gt; packages size=2
             +&gt; package sun.util.resources.provider
             +&gt; package sun.util.resources.cldr.provider
@@ -12412,6 +12984,106 @@
 </div>
 </div>
 </div>
+<div class="sect3">
+<h4 id="og-troubleshooting-debugging"><a class="anchor" href="#og-troubleshooting-debugging"></a><a class="link" href="#og-troubleshooting-debugging">Remote Debugging</a></h4>
+<div class="paragraph">
+<p>The Java Virtual Machines allows remote processes on different hosts to connect for debugging purposes, by using specific command line options.</p>
+</div>
+<div class="admonitionblock caution">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-caution" title="Caution"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>While it is possible to enable remote debugging on a Jetty server, it is typically not recommended for security and performance reasons.
+Only enable remote debugging on a Jetty server as a last resort to troubleshoot issues that could not be troubleshot otherwise.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>You can easily create a custom Jetty module (see <a href="#og-modules-custom">this section</a>) with the following content:</p>
+</div>
+<div class="listingblock">
+<div class="title">remote-debug.mod</div>
+<div class="content">
+<pre>[description]
+Enables remote debugging
+
+[exec]
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>[exec]</code> directive (documented <a href="#og-modules-directive-exec">here</a>) is necessary to pass the <code>-agentlib:jdwp</code> JVM option to the forked JVM that runs Jetty, so that you can attach with a debugger.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The <code>address</code> parameter of the <code>-agentlib:jdwp</code> command line option specifies the network address and port the Jetty JVM listens on for remote debugging.</p>
+</div>
+<div class="paragraph">
+<p>Please refer to the <a href="https://docs.oracle.com/en/java/javase/17/docs/specs/jpda/conninv.html">Java Debug Wire Protocol documentation</a> for additional information about the <code>-agentlib:jdwp</code> command line option and its parameters.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>You can now enable the <code>remote-debug</code> Jetty module with the following command issued from the <code>$JETTY_BASE</code> directory:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ java -jar $JETTY_HOME/start.jar --add-modules=server,remote-debug</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The command above minimally adds a Jetty server without connectors (via the <code>server</code> Jetty module) and the <code>remote-debug</code> Jetty module, and produces the following <code>$JETTY_BASE</code> directory structure:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>$JETTY_BASE
+├── modules
+│   └── remote-debug.mod
+├── resources
+│   └── jetty-logging.properties
+└── start.d
+    ├── <mark>remote-debug.ini</mark>
+    └── server.ini</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You can easily disable the <code>remote-debug</code> Jetty module as explained in <a href="#og-start-configure-disable">this section</a>.</p>
+</div>
+<div class="paragraph">
+<p>Alternatively, you can enable the <code>remote-debug</code> module on the command line, as explained in <a href="#og-start-configure-enable-command-line">this section</a>.</p>
+</div>
+<div class="paragraph">
+<p>Starting the Jetty server with the <code>remote-debug</code> module enabled yields:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight nowrap"><code>WARN  : Forking second JVM due to forking module(s): [remote-debug]. Use --dry-run to generate the command line to avoid forking.
+<mark>Listening for transport dt_socket at address: 5005</mark>
+<strong>2022-02-07 12:28:13.972:</strong>INFO :oejs.Server:main: jetty-11.0.8; built: 2022-02-07T11:10:38.355Z; git: 79cc9cf90ed1d7844fde4376001a5d54d6c68975; jvm 11.0.14+9
+<strong>2022-02-07 12:28:14.000:</strong>INFO :oejs.Server:main: Started Server@4fb0f2b9{STARTING}[11.0.8,sto=5000] @264ms</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note how the JVM is listening on port <code>5005</code> to allow remote debuggers to connect.</p>
+</div>
+<div class="paragraph">
+<p>If you want to avoid to fork a second JVM to pass the <code>-agentlib:jdwp</code> JVM option, please read <a href="#og-start-configure-dry-run">this section</a>.</p>
+</div>
+</div>
 </div>
 <div class="sect2">
 <h3 id="og-xml"><a class="anchor" href="#og-xml"></a><a class="link" href="#og-xml">Jetty XML</a></h3>
@@ -12950,8 +13622,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 11.0.7<br>
-Last updated 2021-10-06 14:52:31 -0500
+Version 11.0.8<br>
+Last updated 2022-01-27 18:21:06 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache
index 5c382db..9a04f9f 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-05cfcead1245ff0fbcf3af8873998cee.png.cache
@@ -1 +1 @@
-{"checksum":"05cfcead1245ff0fbcf3af8873998cee","options":{"size_limit":"4096"},"width":445,"height":210}
\ No newline at end of file
+{"checksum":"05cfcead1245ff0fbcf3af8873998cee","options":{"size_limit":"4096"},"width":471,"height":209}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache
index 9444e4c..50b8caa 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-136e615bb97d8356ceb17a851c86817a.png.cache
@@ -1 +1 @@
-{"checksum":"136e615bb97d8356ceb17a851c86817a","options":{"size_limit":"4096"},"width":369,"height":208}
\ No newline at end of file
+{"checksum":"136e615bb97d8356ceb17a851c86817a","options":{"size_limit":"4096"},"width":366,"height":207}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache
index 18b2a0d..60c7e44 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-1ed737fca2f0d63f7ebac20672a2e222.png.cache
@@ -1 +1 @@
-{"checksum":"1ed737fca2f0d63f7ebac20672a2e222","options":{"size_limit":"4096"},"width":676,"height":572}
\ No newline at end of file
+{"checksum":"1ed737fca2f0d63f7ebac20672a2e222","options":{"size_limit":"4096"},"width":686,"height":569}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache
index 18fc929..8accbd8 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3ca149653ee220164efd33ca869b97b5.png.cache
@@ -1 +1 @@
-{"checksum":"3ca149653ee220164efd33ca869b97b5","options":{"size_limit":"4096"},"width":659,"height":339}
\ No newline at end of file
+{"checksum":"3ca149653ee220164efd33ca869b97b5","options":{"size_limit":"4096"},"width":666,"height":337}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache
index eb067d5..2fa0076 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-3e23a5cd9673dbe358271d004cc0d714.png.cache
@@ -1 +1 @@
-{"checksum":"3e23a5cd9673dbe358271d004cc0d714","options":{"size_limit":"4096"},"width":345,"height":284}
\ No newline at end of file
+{"checksum":"3e23a5cd9673dbe358271d004cc0d714","options":{"size_limit":"4096"},"width":374,"height":284}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache
index 7b8805e..ad85b35 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-4760564aad148998e116357e8f3a5450.png.cache
@@ -1 +1 @@
-{"checksum":"4760564aad148998e116357e8f3a5450","options":{"size_limit":"4096"},"width":671,"height":517}
\ No newline at end of file
+{"checksum":"4760564aad148998e116357e8f3a5450","options":{"size_limit":"4096"},"width":684,"height":514}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache
index 9c63069..e550087 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png.cache
@@ -1 +1 @@
-{"checksum":"63a9fb2dbcfbcb3fb7bb1dffc2609836","options":{"size_limit":"4096"},"width":900,"height":241}
\ No newline at end of file
+{"checksum":"63a9fb2dbcfbcb3fb7bb1dffc2609836","options":{"size_limit":"4096"},"width":954,"height":240}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache
index f8b11be..72426dc 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-8bbf1fa0b84011383e811eaf9e630100.png.cache
@@ -1 +1 @@
-{"checksum":"8bbf1fa0b84011383e811eaf9e630100","options":{"size_limit":"4096"},"width":340,"height":176}
\ No newline at end of file
+{"checksum":"8bbf1fa0b84011383e811eaf9e630100","options":{"size_limit":"4096"},"width":363,"height":176}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache
index 87127cf..3487f42 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png.cache
@@ -1 +1 @@
-{"checksum":"ae4b86cecdafb2b8e1afb35b06f359a1","options":{"size_limit":"4096"},"width":166,"height":203}
\ No newline at end of file
+{"checksum":"ae4b86cecdafb2b8e1afb35b06f359a1","options":{"size_limit":"4096"},"width":274,"height":315}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache
index 5073b48..66b488d 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-d8ecf025f2e851a45b4d2132df024ecb.png.cache
@@ -1 +1 @@
-{"checksum":"d8ecf025f2e851a45b4d2132df024ecb","options":{"size_limit":"4096"},"width":682,"height":100}
\ No newline at end of file
+{"checksum":"d8ecf025f2e851a45b4d2132df024ecb","options":{"size_limit":"4096"},"width":720,"height":99}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache
index 8758588..e6bf6ac 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-e7fd1b7ba54e07262bd726c9fe979363.png.cache
@@ -1 +1 @@
-{"checksum":"e7fd1b7ba54e07262bd726c9fe979363","options":{"size_limit":"4096"},"width":711,"height":413}
\ No newline at end of file
+{"checksum":"e7fd1b7ba54e07262bd726c9fe979363","options":{"size_limit":"4096"},"width":703,"height":411}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache
index 37d3f9b..e089f43 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-ec0156d64fc9a225c5e022fc352d7d46.png.cache
@@ -1 +1 @@
-{"checksum":"ec0156d64fc9a225c5e022fc352d7d46","options":{"size_limit":"4096"},"width":515,"height":541}
\ No newline at end of file
+{"checksum":"ec0156d64fc9a225c5e022fc352d7d46","options":{"size_limit":"4096"},"width":549,"height":540}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache
index 3ea4558..845d759 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fada5fbf7628dc70c998680727a069bd.png.cache
@@ -1 +1 @@
-{"checksum":"fada5fbf7628dc70c998680727a069bd","options":{"size_limit":"4096"},"width":687,"height":511}
\ No newline at end of file
+{"checksum":"fada5fbf7628dc70c998680727a069bd","options":{"size_limit":"4096"},"width":704,"height":508}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache
index dbb7dfe..1574d71 100644
--- a/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache
+++ b/documentation/jetty-11/programming-guide/.asciidoctor/diagram/diag-fb3e088ea5480f2b172677334c79d51f.png.cache
@@ -1 +1 @@
-{"checksum":"fb3e088ea5480f2b172677334c79d51f","options":{"size_limit":"4096"},"width":1214,"height":305}
\ No newline at end of file
+{"checksum":"fb3e088ea5480f2b172677334c79d51f","options":{"size_limit":"4096"},"width":1320,"height":304}
\ No newline at end of file
diff --git a/documentation/jetty-11/programming-guide/asciidoctor.css b/documentation/jetty-11/programming-guide/asciidoctor.css
index 65ec3f3..98f27c4 100644
--- a/documentation/jetty-11/programming-guide/asciidoctor.css
+++ b/documentation/jetty-11/programming-guide/asciidoctor.css
@@ -1,18 +1,16 @@
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -24,20 +22,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -57,7 +57,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -66,14 +66,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -81,8 +81,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -90,7 +88,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -105,7 +103,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -113,7 +111,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -125,7 +123,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -133,7 +131,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -167,11 +165,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -184,29 +182,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -214,7 +216,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -224,9 +226,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -235,7 +236,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -263,7 +264,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -279,14 +280,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -305,7 +307,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -325,8 +327,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -373,7 +373,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -381,19 +381,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -417,7 +418,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
diff --git a/documentation/jetty-11/programming-guide/coderay-asciidoctor.css b/documentation/jetty-11/programming-guide/coderay-asciidoctor.css
index d01b0a8..83b9d7e 100644
--- a/documentation/jetty-11/programming-guide/coderay-asciidoctor.css
+++ b/documentation/jetty-11/programming-guide/coderay-asciidoctor.css
@@ -1,15 +1,15 @@
-/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */
 pre.CodeRay{background:#f7f7f8}
-.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
+.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
 .CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
 .CodeRay .line-numbers strong{color:#000}
 table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.CodeRay td{vertical-align:top;line-height:inherit}
 table.CodeRay td.line-numbers{text-align:right}
 table.CodeRay td.code{padding:0 0 0 .75em}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .debug{color:#fff!important;background:navy!important}
 .CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-name{color:navy}
 .CodeRay .attribute-value{color:#700}
 .CodeRay .binary{color:#509}
 .CodeRay .comment{color:#998;font-style:italic}
@@ -18,7 +18,7 @@
 .CodeRay .char .delimiter{color:#039}
 .CodeRay .class{color:#458;font-weight:bold}
 .CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .constant,.CodeRay .predefined-constant{color:teal}
 .CodeRay .color{color:#099}
 .CodeRay .class-variable{color:#369}
 .CodeRay .decorator{color:#b0b}
@@ -33,7 +33,7 @@
 .CodeRay .exception{color:inherit}
 .CodeRay .filename{color:#099}
 .CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
+.CodeRay .global-variable{color:teal}
 .CodeRay .hex{color:#058}
 .CodeRay .integer,.CodeRay .float{color:#099}
 .CodeRay .include{color:#555}
@@ -44,7 +44,7 @@
 .CodeRay .inline-delimiter{color:#d14}
 .CodeRay .important{color:#555;font-weight:bold}
 .CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
+.CodeRay .instance-variable{color:teal}
 .CodeRay .label{color:#970}
 .CodeRay .local-variable{color:#963}
 .CodeRay .octal{color:#40e}
@@ -54,7 +54,7 @@
 .CodeRay .directive{font-weight:bold}
 .CodeRay .type{font-weight:bold}
 .CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold}
 .CodeRay .key{color:#808}
 .CodeRay .key .delimiter{color:#606}
 .CodeRay .key .char{color:#80f}
@@ -74,7 +74,7 @@
 .CodeRay .symbol{color:#990073}
 .CodeRay .symbol .content{color:#a60}
 .CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
+.CodeRay .tag{color:teal}
 .CodeRay .tag-special{color:#d70}
 .CodeRay .variable{color:#036}
 .CodeRay .insert{background:#afa}
diff --git a/documentation/jetty-11/programming-guide/index.html b/documentation/jetty-11/programming-guide/index.html
index c84c987..a074364 100644
--- a/documentation/jetty-11/programming-guide/index.html
+++ b/documentation/jetty-11/programming-guide/index.html
@@ -4,7 +4,8 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="Jetty Developers">
 <title>Eclipse Jetty: Programming Guide</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <link rel="stylesheet" href="./asciidoctor.css">
@@ -20,8 +21,8 @@
 <div class="details">
 <span id="author" class="author">Jetty Developers</span><br>
 <span id="email" class="email"><a href="mailto:jetty-dev@eclipse.org">jetty-dev@eclipse.org</a></span><br>
-<span id="revnumber">version 11.0.7,</span>
-<span id="revdate">2021-10-06</span>
+<span id="revnumber">version 11.0.8,</span>
+<span id="revdate">2022-02-07</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Jetty Programming Guide</div>
@@ -29,10 +30,14 @@
 <li><a href="#pg-eclipse-jetty-programming-guide">Eclipse Jetty Programming Guide</a></li>
 <li><a href="#pg-client">Client Libraries</a>
 <ul class="sectlevel2">
-<li><a href="#pg-client-io-arch">Client Libraries I/O Architecture</a>
+<li><a href="#pg-client-io-arch">I/O Architecture</a>
 <ul class="sectlevel3">
-<li><a href="#pg-client-io-arch-network">Client Libraries Network Layer</a></li>
-<li><a href="#pg-client-io-arch-protocol">Client Libraries Protocol Layer</a></li>
+<li><a href="#pg-client-io-arch-network">Network Layer</a>
+<ul class="sectlevel4">
+<li><a href="#pg-client-io-arch-unix-domain">Unix-Domain Support</a></li>
+</ul>
+</li>
+<li><a href="#pg-client-io-arch-protocol">Protocol Layer</a></li>
 </ul>
 </li>
 <li><a href="#pg-client-http">HTTP Client</a>
@@ -80,8 +85,10 @@
 <ul class="sectlevel4">
 <li><a href="#pg-client-http-transport-http11">HTTP/1.1 Transport</a></li>
 <li><a href="#pg-client-http-transport-http2">HTTP/2 Transport</a></li>
+<li><a href="#pg-client-http-transport-http3">HTTP/3 Transport</a></li>
 <li><a href="#pg-client-http-transport-fcgi">FastCGI Transport</a></li>
 <li><a href="#pg-client-http-transport-dynamic">Dynamic Transport</a></li>
+<li><a href="#pg-client-http-transport-unix-domain">Unix-Domain Configuration</a></li>
 </ul>
 </li>
 </ul>
@@ -98,6 +105,16 @@
 <li><a href="#pg-client-http2-push">Receiving HTTP/2 Pushes</a></li>
 </ul>
 </li>
+<li><a href="#pg-client-http3">HTTP/3 Client Library</a>
+<ul class="sectlevel3">
+<li><a href="#pg-client-http3-intro">Introducing HTTP3Client</a></li>
+<li><a href="#pg-client-http3-connect">Connecting to the Server</a></li>
+<li><a href="#pg-client-http3-configure">Configuring the Session</a></li>
+<li><a href="#pg-client-http3-request">Sending a Request</a></li>
+<li><a href="#pg-client-http3-response">Receiving a Response</a></li>
+<li><a href="#pg-client-http3-reset">Resetting a Request or Response</a></li>
+</ul>
+</li>
 <li><a href="#pg-client-websocket">WebSocket Client</a>
 <ul class="sectlevel3">
 <li><a href="#pg-client-websocket-start">Starting WebSocketClient</a></li>
@@ -154,11 +171,12 @@
 </li>
 <li><a href="#pg-server-http">HTTP Server Libraries</a>
 <ul class="sectlevel3">
-<li><a href="#pg-server-http-request-processing">Server Request Processing</a>
+<li><a href="#pg-server-http-request-processing">Request Processing</a>
 <ul class="sectlevel4">
 <li><a href="#pg-server-http-channel-events">HttpChannel Events</a></li>
 </ul>
 </li>
+<li><a href="#pg-server-http-request-logging">Request Logging</a></li>
 <li><a href="#pg-server-http-connector">Server Connectors</a>
 <ul class="sectlevel4">
 <li><a href="#pg-server-http-connector-protocol">Configuring Protocols</a>
@@ -167,6 +185,7 @@
 <li><a href="#pg-server-http-connector-protocol-http11-tls">Encrypted HTTP/1.1 (https)</a></li>
 <li><a href="#pg-server-http-connector-protocol-http2">Clear-Text HTTP/2</a></li>
 <li><a href="#pg-server-http-connector-protocol-http2-tls">Encrypted HTTP/2</a></li>
+<li><a href="#pg-server-http-connector-protocol-http3">HTTP/3</a></li>
 <li><a href="#pg-server-http-connector-protocol-proxy-http11">Jetty Behind a Load Balancer</a></li>
 </ul>
 </li>
@@ -222,6 +241,15 @@
 <li><a href="#pg-server-http2-push">HTTP/2 Push of Resources</a></li>
 </ul>
 </li>
+<li><a href="#pg-server-http3">HTTP/3 Server Library</a>
+<ul class="sectlevel3">
+<li><a href="#pg-server-http3-intro">Introduction</a></li>
+<li><a href="#pg-server-http3-setup">Server Setup</a></li>
+<li><a href="#pg-server-http3-request">Receiving a Request</a></li>
+<li><a href="#pg-server-http3-response">Sending a Response</a></li>
+<li><a href="#pg-server-http3-reset">Resetting a Request</a></li>
+</ul>
+</li>
 <li><a href="#pg-server-session">HTTP Session Management</a>
 <ul class="sectlevel3">
 <li><a href="#pg-server-session-architecture">Session Architecture</a></li>
@@ -429,7 +457,7 @@
 <li><a href="#pg-arch-io-connection-listener">Jetty I/O: <code>Connection.Listener</code></a></li>
 </ul>
 </li>
-<li><a href="#pg-arch-io-echo">Jetty I/O: Network Echo</a></li>
+<li><a href="#pg-arch-io-echo">Jetty I/O: TCP Network Echo</a></li>
 </ul>
 </li>
 <li><a href="#pg-arch-listener">Jetty Listeners</a></li>
@@ -494,7 +522,7 @@
 <p>The Eclipse Jetty Programming Guide targets developers who want to use the Eclipse Jetty libraries in their applications.</p>
 </div>
 <div class="paragraph">
-<p>The Eclipse Jetty libraries provide the client-side and server-side APIs to work with various web protocols such as HTTP/1.1, HTTP/2, WebSocket and FastCGI.</p>
+<p>The Eclipse Jetty libraries provide the client-side and server-side APIs to work with various web protocols such as HTTP/1.1, HTTP/2, HTTP/3, WebSocket and FastCGI.</p>
 </div>
 <div class="paragraph">
 <p>You may use the <a href="#pg-client">Eclipse Jetty client-side library</a> in your application to make calls to third party REST services, or to other REST microservices in your system.</p>
@@ -513,7 +541,7 @@
 <div class="paragraph">
 <p>The Eclipse Jetty Project provides client-side libraries that allow you to embed a client in your applications.
 A typical example is a client application that needs to contact a third party service via HTTP (for example a REST service).
-Another example is a proxy application that receives HTTP requests and forwards them as FCGI requests to a PHP application such as WordPress, or receives HTTP/1.1 requests and converts them to HTTP/2.
+Another example is a proxy application that receives HTTP requests and forwards them as FCGI requests to a PHP application such as WordPress, or receives HTTP/1.1 requests and converts them to HTTP/2 or HTTP/3.
 Yet another example is a client application that needs to receive events from a WebSocket server.</p>
 </div>
 <div class="paragraph">
@@ -531,6 +559,9 @@
 <p><a href="#pg-client-http2">The Low-Level HTTP/2 Client Library</a> for low-level HTTP/2</p>
 </li>
 <li>
+<p><a href="#pg-client-http3">The Low-Level HTTP/3 Client Library</a> for low-level HTTP/3</p>
+</li>
+<li>
 <p><a href="#pg-client-websocket">The WebSocket client library</a></p>
 </li>
 </ul>
@@ -539,7 +570,7 @@
 <p>If you are interested in the low-level details of how the Eclipse Jetty client libraries work, or are interested in writing a custom protocol, look at the <a href="#pg-client-io-arch">Client I/O Architecture</a>.</p>
 </div>
 <div class="sect2">
-<h3 id="pg-client-io-arch"><a class="anchor" href="#pg-client-io-arch"></a><a class="link" href="#pg-client-io-arch">Client Libraries I/O Architecture</a></h3>
+<h3 id="pg-client-io-arch"><a class="anchor" href="#pg-client-io-arch"></a><a class="link" href="#pg-client-io-arch">I/O Architecture</a></h3>
 <div class="paragraph">
 <p>The Jetty client libraries provide the basic components and APIs to implement a network client.</p>
 </div>
@@ -560,7 +591,7 @@
 </ol>
 </div>
 <div class="sect3">
-<h4 id="pg-client-io-arch-network"><a class="anchor" href="#pg-client-io-arch-network"></a><a class="link" href="#pg-client-io-arch-network">Client Libraries Network Layer</a></h4>
+<h4 id="pg-client-io-arch-network"><a class="anchor" href="#pg-client-io-arch-network"></a><a class="link" href="#pg-client-io-arch-network">Network Layer</a></h4>
 <div class="paragraph">
 <p>The Jetty client libraries use the common I/O design described in <a href="#pg-arch-io">this section</a>.
 The main client-side component is the <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/ClientConnector.html"><code>ClientConnector</code></a>.</p>
@@ -690,9 +721,43 @@
 <div class="paragraph">
 <p>Please refer to the <code>ClientConnector</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/ClientConnector.html">javadocs</a> for the complete list of configurable parameters.</p>
 </div>
+<div class="sect4">
+<h5 id="pg-client-io-arch-unix-domain"><a class="anchor" href="#pg-client-io-arch-unix-domain"></a><a class="link" href="#pg-client-io-arch-unix-domain">Unix-Domain Support</a></h5>
+<div class="paragraph">
+<p><a href="https://openjdk.java.net/jeps/380">JEP 380</a> introduced Unix-Domain sockets support in Java 16, on all operative systems.</p>
+</div>
+<div class="paragraph">
+<p><code>ClientConnector</code> can be configured to support Unix-Domain sockets in the following way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// This is the path where the server &quot;listens&quot; on.</span>
+Path unixDomainPath = Path.of(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/server.sock</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// Creates a ClientConnector that uses Unix-Domain</span>
+<span class="comment">// sockets, not the network, to connect to the server.</span>
+ClientConnector clientConnector = ClientConnector.forUnixDomain(unixDomainPath);
+clientConnector.start();</code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>You can use Unix-Domain sockets support only when you run your client application with Java 16 or later.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
 </div>
 <div class="sect3">
-<h4 id="pg-client-io-arch-protocol"><a class="anchor" href="#pg-client-io-arch-protocol"></a><a class="link" href="#pg-client-io-arch-protocol">Client Libraries Protocol Layer</a></h4>
+<h4 id="pg-client-io-arch-protocol"><a class="anchor" href="#pg-client-io-arch-protocol"></a><a class="link" href="#pg-client-io-arch-protocol">Protocol Layer</a></h4>
 <div class="paragraph">
 <p>The protocol layer builds on top of the network layer to generate the bytes to be written to the network and to parse the bytes read from the network.</p>
 </div>
@@ -1078,16 +1143,23 @@
 <p>However, when all you need to do is to perform a <code>GET</code> request to a resource, Jetty&#8217;s HTTP client offers also a synchronous API; a programming interface where the thread that issued the request blocks until the request/response conversation is complete.</p>
 </div>
 <div class="paragraph">
-<p>Jetty&#8217;s HTTP client supports <a href="#pg-client-http-transport">different transports</a>: HTTP/1.1, FastCGI and HTTP/2. This means that the semantic of an HTTP request: " <code>GET</code> the resource <code>/index.html</code> " can be carried over the network in different formats.
-The most common and default format is HTTP/1.1. That said, Jetty&#8217;s HTTP client can carry the same request using the FastCGI format or the HTTP/2 format.</p>
+<p>Jetty&#8217;s HTTP client supports different <a href="#pg-client-http-transport">transports protocols</a>: HTTP/1.1, HTTP/2, HTTP/3 and FastCGI. This means that the semantic of an HTTP request such as: " <code>GET</code> the resource <code>/index.html</code> " can be carried over the network in different formats.
+The most common and default format is HTTP/1.1. That said, Jetty&#8217;s HTTP client can carry the same request using the HTTP/2 format, the HTTP/3 format, or the FastCGI format.</p>
 </div>
 <div class="paragraph">
-<p>The <a href="#pg-client-http-transport-fcgi">FastCGI transport</a> is heavily used in Jetty&#8217;s <a href="#pg-server-fastcgi">FastCGI support</a> that allows Jetty to work as a reverse proxy to PHP (exactly like Apache or Nginx do) and therefore be able to serve, for example, WordPress websites.</p>
+<p>Furthermore, every transport protocol can be sent either over the network or via Unix-Domain sockets.
+Supports for Unix-Domain sockets requires Java 16 or later, since Unix-Domain sockets support has been introduced in OpenJDK with <a href="https://openjdk.java.net/jeps/380">JEP 380</a>.</p>
+</div>
+<div class="paragraph">
+<p>The <a href="#pg-client-http-transport-fcgi">FastCGI transport</a> is heavily used in Jetty&#8217;s <a href="#pg-server-fastcgi">FastCGI support</a> that allows Jetty to work as a reverse proxy to PHP (exactly like Apache or Nginx do) and therefore be able to serve, for example, WordPress websites, often in conjunction with Unix-Domain sockets (although it&#8217;s possible to use FastCGI via network too).</p>
 </div>
 <div class="paragraph">
 <p>The HTTP/2 transport allows Jetty&#8217;s HTTP client to perform requests using HTTP/2 to HTTP/2 enabled web sites, see also Jetty&#8217;s <a href="#pg-client-http2">HTTP/2 support</a>.</p>
 </div>
 <div class="paragraph">
+<p>The HTTP/3 transport allows Jetty&#8217;s HTTP client to perform requests using HTTP/3 to HTTP/3 enabled web sites, see also Jetty&#8217;s <a href="#pg-client-http3">HTTP/3 support</a>.</p>
+</div>
+<div class="paragraph">
 <p>Out of the box features that you get with the Jetty HTTP client include:</p>
 </div>
 <div class="ulist">
@@ -1118,7 +1190,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-client<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -1335,7 +1407,7 @@
 <h4 id="pg-client-http-request-processing"><a class="anchor" href="#pg-client-http-request-processing"></a><a class="link" href="#pg-client-http-request-processing">HttpClient Request Processing</a></h4>
 <div class="imageblock">
 <div class="content">
-<img src="diag-4760564aad148998e116357e8f3a5450.png" alt="Diagram" width="671" height="517">
+<img src="images/diag-4760564aad148998e116357e8f3a5450.png" alt="Diagram" width="684" height="514">
 </div>
 </div>
 <div class="paragraph">
@@ -2109,7 +2181,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-136e615bb97d8356ceb17a851c86817a.png" alt="Diagram" width="369" height="208">
+<img src="images/diag-136e615bb97d8356ceb17a851c86817a.png" alt="Diagram" width="366" height="207">
 </div>
 </div>
 <div class="paragraph">
@@ -2216,7 +2288,7 @@
 <p>Configured in this way, <code>HttpClient</code> makes requests to the HTTP proxy (for plain-text HTTP requests) or establishes a tunnel via HTTP <code>CONNECT</code> (for encrypted HTTPS requests).</p>
 </div>
 <div class="paragraph">
-<p>Proxying is supported for both HTTP/1.1 and HTTP/2.</p>
+<p>Proxying is supported for HTTP/1.1 and HTTP/2.</p>
 </div>
 <div class="sect4">
 <h5 id="pg-client-http-proxy-authentication"><a class="anchor" href="#pg-client-http-proxy-authentication"></a><a class="link" href="#pg-client-http-proxy-authentication">Proxy Authentication Support</a></h5>
@@ -2251,7 +2323,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-e7fd1b7ba54e07262bd726c9fe979363.png" alt="Diagram" width="711" height="413">
+<img src="images/diag-e7fd1b7ba54e07262bd726c9fe979363.png" alt="Diagram" width="703" height="411">
 </div>
 </div>
 <div class="paragraph">
@@ -2265,13 +2337,13 @@
 <div class="sect3">
 <h4 id="pg-client-http-transport"><a class="anchor" href="#pg-client-http-transport"></a><a class="link" href="#pg-client-http-transport">HttpClient Pluggable Transports</a></h4>
 <div class="paragraph">
-<p>Jetty&#8217;s <code>HttpClient</code> can be configured to use different transports to carry the semantic of HTTP requests and responses.</p>
+<p>Jetty&#8217;s <code>HttpClient</code> can be configured to use different transport protocols to carry the semantic of HTTP requests and responses.</p>
 </div>
 <div class="paragraph">
 <p>This means that the intention of a client to request resource <code>/index.html</code> using the <code>GET</code> method can be carried over the network in different formats.</p>
 </div>
 <div class="paragraph">
-<p>A <code>HttpClient</code> transport is the component that is in charge of converting a high-level, semantic, HTTP requests such as &#8220;`GET<code> resource </code>/index.html`&#8221; into the specific format understood by the server (for example, HTTP/2), and to convert the server response from the specific format (HTTP/2) into high-level, semantic objects that can be used by applications.</p>
+<p>An <code>HttpClient</code> transport is the component that is in charge of converting a high-level, semantic, HTTP requests such as " <code>GET</code> resource <code>/index.html</code> " into the specific format understood by the server (for example, HTTP/2 or HTTP/3), and to convert the server response from the specific format (HTTP/2 or HTTP/3) into high-level, semantic objects that can be used by applications.</p>
 </div>
 <div class="paragraph">
 <p>The most common protocol format is HTTP/1.1, a textual protocol with lines separated by <code>\r\n</code>:</p>
@@ -2300,19 +2372,39 @@
 </div>
 </div>
 <div class="paragraph">
-<p>Similarly, HTTP/2 is a binary protocol that transports the same information in a yet different format.</p>
+<p>Similarly, HTTP/2 is a binary protocol that transports the same information in a yet different format via TCP, while HTTP/3 is a binary protocol that transports the same information in yet another format via UDP.</p>
 </div>
 <div class="paragraph">
 <p>A protocol may be <em>negotiated</em> between client and server.
 A request for a resource may be sent using one protocol (for example, HTTP/1.1), but the response may arrive in a different protocol (for example, HTTP/2).</p>
 </div>
 <div class="paragraph">
-<p><code>HttpClient</code> supports 3 static transports, each speaking only one protocol: <a href="#pg-client-http-transport-http11">HTTP/1.1</a>, <a href="#pg-client-http-transport-http2">HTTP/2</a> and <a href="#pg-client-http-transport-fcgi">FastCGI</a>, all of them with 2 variants: clear-text and TLS encrypted.</p>
+<p><code>HttpClient</code> supports these static transports, each speaking only one protocol:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#pg-client-http-transport-http11">HTTP/1.1</a> (both clear-text and TLS encrypted)</p>
+</li>
+<li>
+<p><a href="#pg-client-http-transport-http2">HTTP/2</a> (both clear-text and TLS encrypted)</p>
+</li>
+<li>
+<p><a href="#pg-client-http-transport-http3">HTTP/3</a> (only encrypted via QUIC+TLS)</p>
+</li>
+<li>
+<p><a href="#pg-client-http-transport-fcgi">FastCGI</a> (both clear-text and TLS encrypted)</p>
+</li>
+</ul>
 </div>
 <div class="paragraph">
 <p><code>HttpClient</code> also supports one <a href="#pg-client-http-transport-dynamic">dynamic transport</a>, that can speak different protocols and can select the right protocol by negotiating it with the server or by explicit indication from applications.</p>
 </div>
 <div class="paragraph">
+<p>Furthermore, every transport protocol can be sent either over the network or via Unix-Domain sockets.
+Supports for Unix-Domain sockets requires Java 16 or later, since Unix-Domain sockets support has been introduced in OpenJDK with <a href="https://openjdk.java.net/jeps/380">JEP 380</a>.</p>
+</div>
+<div class="paragraph">
 <p>Applications are typically not aware of the actual protocol being used.
 This allows them to write their logic against a high-level API that hides the details of the specific protocol being used over the network.</p>
 </div>
@@ -2369,6 +2461,31 @@
 </div>
 </div>
 <div class="sect4">
+<h5 id="pg-client-http-transport-http3"><a class="anchor" href="#pg-client-http-transport-http3"></a><a class="link" href="#pg-client-http-transport-http3">HTTP/3 Transport</a></h5>
+<div class="paragraph">
+<p>The HTTP/3 transport can be configured in this way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// The HTTP3Client powers the HTTP/3 transport.</span>
+HTTP3Client h3Client = <span class="keyword">new</span> HTTP3Client();
+h3Client.getQuicConfiguration().setSessionRecvWindow(<span class="integer">64</span> * <span class="integer">1024</span> * <span class="integer">1024</span>);
+
+<span class="comment">// Create and configure the HTTP/3 transport.</span>
+HttpClientTransportOverHTTP3 transport = <span class="keyword">new</span> HttpClientTransportOverHTTP3(h3Client);
+
+HttpClient client = <span class="keyword">new</span> HttpClient(transport);
+client.start();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>HTTP3Client</code> is the lower-level client that provides an API based on HTTP/3 concepts such as <em>sessions</em>, <em>streams</em> and <em>frames</em> that are specific to HTTP/3. See <a href="#pg-client-http3">the HTTP/3 client section</a> for more information.</p>
+</div>
+<div class="paragraph">
+<p><code>HttpClientTransportOverHTTP3</code> uses <code>HTTP3Client</code> to format high-level semantic HTTP requests (like "GET resource /index.html") into the HTTP/3 specific format.</p>
+</div>
+</div>
+<div class="sect4">
 <h5 id="pg-client-http-transport-fcgi"><a class="anchor" href="#pg-client-http-transport-fcgi"></a><a class="link" href="#pg-client-http-transport-fcgi">FastCGI Transport</a></h5>
 <div class="paragraph">
 <p>The FastCGI transport can be configured in this way:</p>
@@ -2395,7 +2512,7 @@
 <p>The static transports work well if you know in advance the protocol you want to speak with the server, or if the server only supports one protocol (such as FastCGI).</p>
 </div>
 <div class="paragraph">
-<p>With the advent of HTTP/2, however, servers are now able to support multiple protocols, at least both HTTP/1.1 and HTTP/2.</p>
+<p>With the advent of HTTP/2 and HTTP/3, however, servers are now able to support multiple protocols, at least both HTTP/1.1 and HTTP/2.</p>
 </div>
 <div class="paragraph">
 <p>The HTTP/2 protocol is typically negotiated between client and server.
@@ -2514,6 +2631,64 @@
 If the server does not support ALPN, the client will try to use the first protocol configured in <code>HttpClientTransportDynamic</code>, and the communication may succeed or fail depending on whether the server supports the protocol chosen by the client.</p>
 </div>
 </div>
+<div class="sect4">
+<h5 id="pg-client-http-transport-unix-domain"><a class="anchor" href="#pg-client-http-transport-unix-domain"></a><a class="link" href="#pg-client-http-transport-unix-domain">Unix-Domain Configuration</a></h5>
+<div class="paragraph">
+<p>All the transports can be configured with a <code>ClientConnector</code>, the component that is responsible for the transmission of the bytes generated by the transport to the server.</p>
+</div>
+<div class="paragraph">
+<p>By default, <code>ClientConnector</code> uses TCP networking to send bytes to the server and receive bytes from the server.</p>
+</div>
+<div class="paragraph">
+<p>When you are using Java 16 or later, <code>ClientConnector</code> also support <a href="#pg-client-io-arch-unix-domain">Unix-Domain sockets</a>, and every transport can be configured to use Unix-Domain sockets instead of TCP networking.</p>
+</div>
+<div class="paragraph">
+<p>To configure Unix-Domain sockets, you can create a <code>ClientConnector</code> instance in the following way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// This is the path where the server &quot;listens&quot; on.</span>
+Path unixDomainPath = Path.of(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/server.sock</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// Creates a ClientConnector that uses Unix-Domain</span>
+<span class="comment">// sockets, not the network, to connect to the server.</span>
+ClientConnector unixDomainClientConnector = ClientConnector.forUnixDomain(unixDomainPath);
+
+<span class="comment">// Use Unix-Domain for HTTP/1.1.</span>
+HttpClientTransportOverHTTP http1Transport = <span class="keyword">new</span> HttpClientTransportOverHTTP(unixDomainClientConnector);
+
+<span class="comment">// You can use Unix-Domain also for HTTP/2.</span>
+HTTP2Client http2Client = <span class="keyword">new</span> HTTP2Client(unixDomainClientConnector);
+HttpClientTransportOverHTTP2 http2Transport = <span class="keyword">new</span> HttpClientTransportOverHTTP2(http2Client);
+
+<span class="comment">// You can also use UnixDomain for the dynamic transport.</span>
+ClientConnectionFactory.Info http1 = HttpClientConnectionFactory.HTTP11;
+ClientConnectionFactoryOverHTTP2.HTTP2 http2 = <span class="keyword">new</span> ClientConnectionFactoryOverHTTP2.HTTP2(http2Client);
+HttpClientTransportDynamic dynamicTransport = <span class="keyword">new</span> HttpClientTransportDynamic(unixDomainClientConnector, http1, http2);
+
+<span class="comment">// Choose the transport you prefer for HttpClient, for example the dynamic transport.</span>
+HttpClient httpClient = <span class="keyword">new</span> HttpClient(dynamicTransport);
+httpClient.start();</code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>You can use Unix-Domain sockets support only when you run your client application with Java 16 or later.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>You can configure a Jetty server to use Unix-Domain sockets, as explained in <a href="#pg-server-http-connector">this section</a>.</p>
+</div>
+</div>
 </div>
 </div>
 <div class="sect2">
@@ -2540,7 +2715,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http2<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>http2-client<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -2574,7 +2749,7 @@
 A <em>session</em> typically has a long life&#8201;&#8212;&#8201;once the TCP connection is established, it remains open until it is not used anymore (and therefore it is closed by the idle timeout mechanism), until a fatal error occurs (for example, a network failure), or if one of the peers decides unilaterally to close the TCP connection.</p>
 </div>
 <div class="paragraph">
-<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection.
+<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection, or <em>session</em>.
 Each request/response cycle is represented by a <em>stream</em>.
 Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
 A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
@@ -2725,7 +2900,7 @@
 
 <span class="comment">// Configure the request headers.</span>
 HttpFields requestHeaders = HttpFields.build()
-    .put(HttpHeader.USER_AGENT, <span class="string"><span class="delimiter">&quot;</span><span class="content">Jetty HTTP2Client 11.0.7</span><span class="delimiter">&quot;</span></span>);
+    .put(HttpHeader.USER_AGENT, <span class="string"><span class="delimiter">&quot;</span><span class="content">Jetty HTTP2Client 11.0.8</span><span class="delimiter">&quot;</span></span>);
 
 <span class="comment">// The request metadata with method, URI and headers.</span>
 MetaData.Request request = <span class="keyword">new</span> MetaData.Request(<span class="string"><span class="delimiter">&quot;</span><span class="content">GET</span><span class="delimiter">&quot;</span></span>, HttpURI.from(<span class="string"><span class="delimiter">&quot;</span><span class="content"><a href="http://localhost:8080/path" class="bare">http://localhost:8080/path</a></span><span class="delimiter">&quot;</span></span>), HttpVersion.HTTP_2, requestHeaders);
@@ -3054,6 +3229,299 @@
 </div>
 </div>
 <div class="sect2">
+<h3 id="pg-client-http3"><a class="anchor" href="#pg-client-http3"></a><a class="link" href="#pg-client-http3">HTTP/3 Client Library</a></h3>
+<div class="paragraph">
+<p>In the vast majority of cases, client applications should use the generic, high-level, <a href="#pg-client-http">HTTP client library</a> that also provides HTTP/3 support via the pluggable <a href="#pg-client-http-transport-http3">HTTP/3 transport</a> or the <a href="#pg-client-http-transport-dynamic">dynamic transport</a>.</p>
+</div>
+<div class="paragraph">
+<p>The high-level HTTP library supports cookies, authentication, redirection, connection pooling and a number of other features that are absent in the low-level HTTP/3 library.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 client library has been designed for those applications that need low-level access to HTTP/3 features such as <em>sessions</em>, <em>streams</em> and <em>frames</em>, and this is quite a rare use case.</p>
+</div>
+<div class="paragraph">
+<p>See also the correspondent <a href="#pg-server-http3">HTTP/3 server library</a>.</p>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-intro"><a class="anchor" href="#pg-client-http3-intro"></a><a class="link" href="#pg-client-http3-intro">Introducing HTTP3Client</a></h4>
+<div class="paragraph">
+<p>The Maven artifact coordinates for the HTTP/3 client library are the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
+  <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http3<span class="tag">&lt;/groupId&gt;</span>
+  <span class="tag">&lt;artifactId&gt;</span>http3-client<span class="tag">&lt;/artifactId&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
+<span class="tag">&lt;/dependency&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The main class is named <code>org.eclipse.jetty.http3.client.HTTP3Client</code>, and must be created, configured and started before use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Instantiate HTTP3Client.</span>
+HTTP3Client http3Client = <span class="keyword">new</span> HTTP3Client();
+
+<span class="comment">// Configure HTTP3Client, for example:</span>
+http3Client.getHTTP3Configuration().setStreamIdleTimeout(<span class="integer">15000</span>);
+
+<span class="comment">// Start HTTP3Client.</span>
+http3Client.start();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>When your application stops, or otherwise does not need <code>HTTP3Client</code> anymore, it should stop the <code>HTTP3Client</code> instance (or instances) that were started:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Stop HTTP3Client.</span>
+http3Client.stop();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>HTTP3Client</code> allows client applications to connect to an HTTP/3 server.
+A <em>session</em> represents a single connection to an HTTP/3 server and is defined by class <code>org.eclipse.jetty.http3.api.Session</code>.
+A <em>session</em> typically has a long life&#8201;&#8212;&#8201;once the connection is established, it remains active until it is not used anymore (and therefore it is closed by the idle timeout mechanism), until a fatal error occurs (for example, a network failure), or if one of the peers decides unilaterally to close the connection.</p>
+</div>
+<div class="paragraph">
+<p>HTTP/3 is a multiplexed protocol because it relies on the multiplexing capabilities of QUIC, the protocol based on UDP that transports HTTP/3 frames.
+Thanks to multiplexing, multiple HTTP/3 requests are sent on the same QUIC connection, or <em>session</em>.
+Each request/response cycle is represented by a <em>stream</em>.
+Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
+A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-connect"><a class="anchor" href="#pg-client-http3-connect"></a><a class="link" href="#pg-client-http3-connect">Connecting to the Server</a></h4>
+<div class="paragraph">
+<p>The first thing an application should do is to connect to the server and obtain a <code>Session</code>.
+The following example connects to the server:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Address of the server's port.</span>
+<span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+
+<span class="comment">// Connect to the server, the CompletableFuture will be</span>
+<span class="comment">// notified when the connection is succeeded (or failed).</span>
+CompletableFuture&lt;Session.Client&gt; sessionCF = http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener() {});
+
+<span class="comment">// Block to obtain the Session.</span>
+<span class="comment">// Alternatively you can use the CompletableFuture APIs to avoid blocking.</span>
+Session session = sessionCF.get();</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-configure"><a class="anchor" href="#pg-client-http3-configure"></a><a class="link" href="#pg-client-http3-configure">Configuring the Session</a></h4>
+<div class="paragraph">
+<p>The <code>connect(&#8230;&#8203;)</code> method takes a <code>Session.Client.Listener</code> parameter.
+This listener&#8217;s <code>onPreface(&#8230;&#8203;)</code> method is invoked just before establishing the connection to the server to gather the client configuration to send to the server.
+Client applications can override this method to change the default configuration:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; onPreface(Session session)
+    {
+        <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; configuration = <span class="keyword">new</span> <span class="predefined-type">HashMap</span>&lt;&gt;();
+
+        <span class="comment">// Add here configuration settings.</span>
+
+        <span class="keyword">return</span> configuration;
+    }
+});</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>Session.Client.Listener</code> is notified of session events originated by the server such as receiving a <code>SETTINGS</code> frame from the server, or the server closing the connection, or the client timing out the connection due to idleness.
+Please refer to the <code>Session.Client.Listener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/http3/api/Session.Client.Listener.html">javadocs</a> for the complete list of events.</p>
+</div>
+<div class="paragraph">
+<p>Once a <code>Session</code> has been established, the communication with the server happens by exchanging <em>frames</em>.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-request"><a class="anchor" href="#pg-client-http3-request"></a><a class="link" href="#pg-client-http3-request">Sending a Request</a></h4>
+<div class="paragraph">
+<p>Sending an HTTP request to the server, and receiving a response, creates a <em>stream</em> that encapsulates the exchange of HTTP/3 frames that compose the request and the response.</p>
+</div>
+<div class="paragraph">
+<p>In order to send an HTTP request to the server, the client must send a <code>HEADERS</code> frame.
+<code>HEADERS</code> frames carry the request method, the request URI and the request headers.
+Sending the <code>HEADERS</code> frame opens the <code>Stream</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+CompletableFuture&lt;Session.Client&gt; sessionCF = http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener() {});
+Session.Client session = sessionCF.get();
+
+<span class="comment">// Configure the request headers.</span>
+HttpFields requestHeaders = HttpFields.build()
+    .put(HttpHeader.USER_AGENT, <span class="string"><span class="delimiter">&quot;</span><span class="content">Jetty HTTP3Client 11.0.8</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// The request metadata with method, URI and headers.</span>
+MetaData.Request request = <span class="keyword">new</span> MetaData.Request(<span class="string"><span class="delimiter">&quot;</span><span class="content">GET</span><span class="delimiter">&quot;</span></span>, HttpURI.from(<span class="string"><span class="delimiter">&quot;</span><span class="content"><a href="http://localhost:8444/path" class="bare">http://localhost:8444/path</a></span><span class="delimiter">&quot;</span></span>), HttpVersion.HTTP_3, requestHeaders);
+
+<span class="comment">// The HTTP/3 HEADERS frame, with endStream=true</span>
+<span class="comment">// to signal that this request has no content.</span>
+HeadersFrame headersFrame = <span class="keyword">new</span> HeadersFrame(request, <span class="predefined-constant">true</span>);
+
+<span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener() {});</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note how <code>Session.newRequest(&#8230;&#8203;)</code> takes a <code>Stream.Client.Listener</code> parameter.
+This listener is notified of stream events originated by the server such as receiving <code>HEADERS</code> or <code>DATA</code> frames that are part of the response, discussed in more details in the <a href="#pg-client-http3-response">section below</a>.
+Please refer to the <code>Stream.Client.Listener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/http3/api/Stream.Client.Listener.html">javadocs</a> for the complete list of events.</p>
+</div>
+<div class="paragraph">
+<p>HTTP requests may have content, which is sent using the <code>Stream</code> APIs:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="predefined-type">SocketAddress</span> serverAddress = <span class="keyword">new</span> <span class="predefined-type">InetSocketAddress</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">localhost</span><span class="delimiter">&quot;</span></span>, <span class="integer">8444</span>);
+CompletableFuture&lt;Session.Client&gt; sessionCF = http3Client.connect(serverAddress, <span class="keyword">new</span> Session.Client.Listener() {});
+Session.Client session = sessionCF.get();
+
+<span class="comment">// Configure the request headers.</span>
+HttpFields requestHeaders = HttpFields.build()
+    .put(HttpHeader.CONTENT_TYPE, <span class="string"><span class="delimiter">&quot;</span><span class="content">application/json</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// The request metadata with method, URI and headers.</span>
+MetaData.Request request = <span class="keyword">new</span> MetaData.Request(<span class="string"><span class="delimiter">&quot;</span><span class="content">POST</span><span class="delimiter">&quot;</span></span>, HttpURI.from(<span class="string"><span class="delimiter">&quot;</span><span class="content">http://localhost:8444/path</span><span class="delimiter">&quot;</span></span>), HttpVersion.HTTP_3, requestHeaders);
+
+<span class="comment">// The HTTP/3 HEADERS frame, with endStream=false to</span>
+<span class="comment">// signal that there will be more frames in this stream.</span>
+HeadersFrame headersFrame = <span class="keyword">new</span> HeadersFrame(request, <span class="predefined-constant">false</span>);
+
+<span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+CompletableFuture&lt;Stream&gt; streamCF = session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener() {});
+
+<span class="comment">// Block to obtain the Stream.</span>
+<span class="comment">// Alternatively you can use the CompletableFuture APIs to avoid blocking.</span>
+Stream stream = streamCF.get();
+
+<span class="comment">// The request content, in two chunks.</span>
+<span class="predefined-type">String</span> content1 = <span class="string"><span class="delimiter">&quot;</span><span class="content">{</span><span class="char">\&quot;</span><span class="content">greet</span><span class="char">\&quot;</span><span class="content">: </span><span class="char">\&quot;</span><span class="content">hello world</span><span class="char">\&quot;</span><span class="content">}</span><span class="delimiter">&quot;</span></span>;
+<span class="predefined-type">ByteBuffer</span> buffer1 = StandardCharsets.UTF_8.encode(content1);
+<span class="predefined-type">String</span> content2 = <span class="string"><span class="delimiter">&quot;</span><span class="content">{</span><span class="char">\&quot;</span><span class="content">user</span><span class="char">\&quot;</span><span class="content">: </span><span class="char">\&quot;</span><span class="content">jetty</span><span class="char">\&quot;</span><span class="content">}</span><span class="delimiter">&quot;</span></span>;
+<span class="predefined-type">ByteBuffer</span> buffer2 = StandardCharsets.UTF_8.encode(content2);
+
+<span class="comment">// Send the first DATA frame on the stream, with endStream=false</span>
+<span class="comment">// to signal that there are more frames in this stream.</span>
+CompletableFuture&lt;Stream&gt; dataCF1 = stream.data(<span class="keyword">new</span> DataFrame(buffer1, <span class="predefined-constant">false</span>));
+
+<span class="comment">// Only when the first chunk has been sent we can send the second,</span>
+<span class="comment">// with endStream=true to signal that there are no more frames.</span>
+dataCF1.thenCompose(s -&gt; s.data(<span class="keyword">new</span> DataFrame(buffer2, <span class="predefined-constant">true</span>)));</code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+When sending two <code>DATA</code> frames consecutively, the second call to <code>Stream.data(&#8230;&#8203;)</code> must be done only when the first is completed, or a <code>WritePendingException</code> will be thrown.
+Use the <code>CompletableFuture</code> APIs to ensure that the second <code>Stream.data(&#8230;&#8203;)</code> call is performed when the first completed successfully.
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-response"><a class="anchor" href="#pg-client-http3-response"></a><a class="link" href="#pg-client-http3-response">Receiving a Response</a></h4>
+<div class="paragraph">
+<p>Response events are delivered to the <code>Stream.Client.Listener</code> passed to <code>Session.newRequest(&#8230;&#8203;)</code>.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP response is typically composed of a <code>HEADERS</code> frame containing the HTTP status code and the response headers, and optionally one or more <code>DATA</code> frames containing the response content bytes.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 protocol also supports response trailers (that is, headers that are sent after the response content) that also are sent using a <code>HEADERS</code> frame.</p>
+</div>
+<div class="paragraph">
+<p>A client application can therefore receive the HTTP/3 frames sent by the server by implementing the relevant methods in <code>Stream.Client.Listener</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onResponse(Stream.Client stream, HeadersFrame frame)
+    {
+        MetaData metaData = frame.getMetaData();
+        MetaData.Response response = (MetaData.Response)metaData;
+        <span class="predefined-type">System</span>.getLogger(<span class="string"><span class="delimiter">&quot;</span><span class="content">http3</span><span class="delimiter">&quot;</span></span>).log(INFO, <span class="string"><span class="delimiter">&quot;</span><span class="content">Received response {0}</span><span class="delimiter">&quot;</span></span>, response);
+    }
+
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onDataAvailable(Stream.Client stream)
+    {
+        <span class="comment">// Read a chunk of the content.</span>
+        Stream.Data data = stream.readData();
+        <span class="keyword">if</span> (data == <span class="predefined-constant">null</span>)
+        {
+            <span class="comment">// No data available now, demand to be called back.</span>
+            stream.demand();
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// Process the content.</span>
+            process(data.getByteBuffer());
+
+            <span class="comment">// Notify the implementation that the content has been consumed.</span>
+            data.complete();
+
+            <span class="keyword">if</span> (!data.isLast())
+            {
+                <span class="comment">// Demand to be called back.</span>
+                stream.demand();
+            }
+        }
+    }
+});</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-client-http3-reset"><a class="anchor" href="#pg-client-http3-reset"></a><a class="link" href="#pg-client-http3-reset">Resetting a Request or Response</a></h4>
+<div class="paragraph">
+<p>In HTTP/3, clients and servers have the ability to tell to the other peer that they are not interested anymore in either the request or the response, by resetting the stream.</p>
+</div>
+<div class="paragraph">
+<p>The <code>HTTP3Client</code> APIs allow client applications to send and receive this "reset" event:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Open a Stream by sending the HEADERS frame.</span>
+CompletableFuture&lt;Stream&gt; streamCF = session.newRequest(headersFrame, <span class="keyword">new</span> Stream.Client.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onFailure(Stream.Client stream, <span class="type">long</span> error, <span class="predefined-type">Throwable</span> failure)
+    {
+        <span class="comment">// The server reset this stream.</span>
+    }
+});
+Stream stream = streamCF.get();
+
+<span class="comment">// Reset this stream (for example, the user closed the application).</span>
+stream.reset(HTTP3ErrorCode.REQUEST_CANCELLED_ERROR.code(), <span class="keyword">new</span> <span class="exception">ClosedChannelException</span>());</code></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
 <h3 id="pg-client-websocket"><a class="anchor" href="#pg-client-websocket"></a><a class="link" href="#pg-client-websocket">WebSocket Client</a></h3>
 <div class="paragraph">
 <p>Jetty&#8217;s <code>WebSocketClient</code> is a more powerful alternative to the WebSocket client provided by the standard JSR 356 <code>javax.websocket</code> APIs.</p>
@@ -3073,7 +3541,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-jetty-client<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -3161,7 +3629,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-fada5fbf7628dc70c998680727a069bd.png" alt="Diagram" width="687" height="511">
+<img src="images/diag-fada5fbf7628dc70c998680727a069bd.png" alt="Diagram" width="704" height="508">
 </div>
 </div>
 <div class="paragraph">
@@ -3215,7 +3683,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-1ed737fca2f0d63f7ebac20672a2e222.png" alt="Diagram" width="676" height="572">
+<img src="images/diag-1ed737fca2f0d63f7ebac20672a2e222.png" alt="Diagram" width="686" height="569">
 </div>
 </div>
 <div class="paragraph">
@@ -3369,6 +3837,8 @@
 <li>
 <p>The <em>message</em> event.
 The message event is emitted when a WebSocket message is received.
+Only one thread at a time will be delivering a message event to the <code>onMessage</code> method; the next message event will not be delivered until the previous call to the <code>onMessage</code> method has exited.
+Endpoints will always be notified of message events in the same order they were received over the network.
 The message event can be of two types:</p>
 <div class="ulist">
 <ul>
@@ -4175,12 +4645,15 @@
 <div class="ulist">
 <ul>
 <li>
-<p>HTTP support for HTTP/1.0, HTTP/1.1, HTTP/2, clear-text or encrypted, for applications that want to embed Jetty as a generic HTTP server or proxy, via the <a href="#pg-server-http">HTTP libraries</a></p>
+<p>HTTP support for HTTP/1.0, HTTP/1.1, HTTP/2, clear-text or encrypted, HTTP/3, for applications that want to embed Jetty as a generic HTTP server or proxy, via the <a href="#pg-server-http">HTTP libraries</a></p>
 </li>
 <li>
 <p>HTTP/2 low-level support, for applications that want to explicitly handle low-level HTTP/2 <em>sessions</em>, <em>streams</em> and <em>frames</em>, via the <a href="#pg-server-http2">HTTP/2 libraries</a></p>
 </li>
 <li>
+<p>HTTP/3 low-level support, for applications that want to explicitly handle low-level HTTP/3 <em>sessions</em>, <em>streams</em> and <em>frames</em>, via the <a href="#pg-server-http3">HTTP/3 libraries</a></p>
+</li>
+<li>
 <p>WebSocket support, for applications that want to embed a WebSocket server, via the <a href="#pg-server-websocket">WebSocket libraries</a></p>
 </li>
 <li>
@@ -4392,7 +4865,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -4401,14 +4874,14 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-05cfcead1245ff0fbcf3af8873998cee.png" alt="Diagram" width="445" height="210">
+<img src="images/diag-05cfcead1245ff0fbcf3af8873998cee.png" alt="Diagram" width="471" height="209">
 </div>
 </div>
 <div class="paragraph">
 <p>The components that accept connections from clients are <code>org.eclipse.jetty.server.Connector</code> implementations.</p>
 </div>
 <div class="paragraph">
-<p>When a Jetty server interprets the HTTP protocol (both HTTP/1.1 and HTTP/2), it uses <code>org.eclipse.jetty.server.Handler</code> instances to process incoming requests and eventually produce responses.</p>
+<p>When a Jetty server interprets the HTTP protocol (HTTP/1.1, HTTP/2 or HTTP/3), it uses <code>org.eclipse.jetty.server.Handler</code> instances to process incoming requests and eventually produce responses.</p>
 </div>
 <div class="paragraph">
 <p>A <code>Server</code> must be created, configured and started:</p>
@@ -4458,7 +4931,7 @@
 <p>If you are interested in writing your server application based on the Servlet APIs, jump to <a href="#pg-server-http-handler-use-servlet">this section</a>.</p>
 </div>
 <div class="sect3">
-<h4 id="pg-server-http-request-processing"><a class="anchor" href="#pg-server-http-request-processing"></a><a class="link" href="#pg-server-http-request-processing">Server Request Processing</a></h4>
+<h4 id="pg-server-http-request-processing"><a class="anchor" href="#pg-server-http-request-processing"></a><a class="link" href="#pg-server-http-request-processing">Request Processing</a></h4>
 <div class="paragraph">
 <p>The Jetty HTTP request processing is outlined below in the diagram below.
 You may want to refer to the <a href="#pg-arch-io">Jetty I/O architecture</a> for additional information about the classes mentioned below.</p>
@@ -4471,7 +4944,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-3ca149653ee220164efd33ca869b97b5.png" alt="Diagram" width="659" height="339">
+<img src="images/diag-3ca149653ee220164efd33ca869b97b5.png" alt="Diagram" width="666" height="337">
 </div>
 </div>
 <div class="paragraph">
@@ -4479,7 +4952,7 @@
 This event is converted to a call to <code>AbstractConnection.onFillable()</code>, where the <code>Connection</code> first reads from the <code>EndPoint</code> into a <code>ByteBuffer</code>, and then calls a protocol specific parser to parse the bytes in the <code>ByteBuffer</code>.</p>
 </div>
 <div class="paragraph">
-<p>The parser emit events that are protocol specific; the HTTP/2 parser, for example, emits events for each HTTP/2 frame that has been parsed.
+<p>The parser emit events that are protocol specific; the HTTP/2 parser, for example, emits events for each HTTP/2 frame that has been parsed, and similarly does the HTTP/3 parser.
 The parser events are then converted to protocol independent events such as <em>"request start"</em>, <em>"request headers"</em>, <em>"request content chunk"</em>, etc.
 that in turn are converted into method calls to <code>HttpChannel</code>.</p>
 </div>
@@ -4490,7 +4963,7 @@
 <h5 id="pg-server-http-channel-events"><a class="anchor" href="#pg-server-http-channel-events"></a><a class="link" href="#pg-server-http-channel-events">HttpChannel Events</a></h5>
 <div class="paragraph">
 <p>The central component processing HTTP requests is <code>HttpChannel</code>.
-There is a 1-to-1 relationship between an HTTP request/response and an <code>HttpChannel</code>, no matter what is the specific protocol that carries the HTTP request over the network (HTTP/1.1, HTTP/2 or FastCGI).</p>
+There is a 1-to-1 relationship between an HTTP request/response and an <code>HttpChannel</code>, no matter what is the specific protocol that carries the HTTP request over the network (HTTP/1.1, HTTP/2, HTTP/3 or FastCGI).</p>
 </div>
 <div class="paragraph">
 <p>Advanced server applications may be interested in the progress of the processing of an HTTP request/response by <code>HttpChannel</code>.
@@ -4610,6 +5083,97 @@
 </div>
 </div>
 <div class="sect3">
+<h4 id="pg-server-http-request-logging"><a class="anchor" href="#pg-server-http-request-logging"></a><a class="link" href="#pg-server-http-request-logging">Request Logging</a></h4>
+<div class="paragraph">
+<p>HTTP requests and responses can be logged to provide data that can be later analyzed with other tools.
+These tools can provide information such as the most frequently accessed request URIs, the response status codes, the request/response content lengths, geographical information about the clients, etc.</p>
+</div>
+<div class="paragraph">
+<p>The default request/response log line format is the <a href="https://en.wikipedia.org/wiki/Common_Log_Format">NCSA Format</a> extended with referrer data and user-agent data.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Typically, the extended NCSA format is the is enough and it&#8217;s the standard used and understood by most log parsing tools and monitoring tools.</p>
+</div>
+<div class="paragraph">
+<p>To customize the request/response log line format see the <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/server/CustomRequestLog.html"><code>CustomRequestLog</code> javadocs</a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Request logging can be enabled at the server level, or at the web application context level.</p>
+</div>
+<div class="paragraph">
+<p>The request logging output can be directed to an SLF4J logger named <code>"org.eclipse.jetty.server.RequestLog"</code> at <code>INFO</code> level, and therefore to any logging library implementation of your choice (see also <a href="#pg-troubleshooting-logging">this section</a> about logging).</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// Sets the RequestLog to log to an SLF4J logger named &quot;org.eclipse.jetty.server.RequestLog&quot; at INFO level.</span>
+server.setRequestLog(<span class="keyword">new</span> CustomRequestLog(<span class="keyword">new</span> Slf4jRequestLogWriter(), CustomRequestLog.EXTENDED_NCSA_FORMAT));</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Alternatively, the request logging output can be directed to a daily rolling file of your choice, and the file name must contain <code>yyyy_MM_dd</code> so that rolled over files retain their date:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// Use a file name with the pattern 'yyyy_MM_dd' so rolled over files retain their date.</span>
+RequestLogWriter logWriter = <span class="keyword">new</span> RequestLogWriter(<span class="string"><span class="delimiter">&quot;</span><span class="content">/var/log/yyyy_MM_dd.jetty.request.log</span><span class="delimiter">&quot;</span></span>);
+<span class="comment">// Retain rolled over files for 2 weeks.</span>
+logWriter.setRetainDays(<span class="integer">14</span>);
+<span class="comment">// Log times are in the current time zone.</span>
+logWriter.setTimeZone(<span class="predefined-type">TimeZone</span>.getDefault().getID());
+
+<span class="comment">// Set the RequestLog to log to the given file, rolling over at midnight.</span>
+server.setRequestLog(<span class="keyword">new</span> CustomRequestLog(logWriter, CustomRequestLog.EXTENDED_NCSA_FORMAT));</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For maximum flexibility, you can log to multiple <code>RequestLog</code>s using class <code>RequestLog.Collection</code>, for example by logging with different formats or to different outputs.</p>
+</div>
+<div class="paragraph">
+<p>You can use <code>CustomRequestLog</code> with a custom <code>RequestLog.Writer</code> to direct the request logging output to your custom targets (for example, an RDBMS).
+You can implement your own <code>RequestLog</code> if you want to have functionalities that are not implemented by <code>CustomRequestLog</code>.</p>
+</div>
+<div class="paragraph">
+<p>Request logging can also be enabled at the web application context level, using <code>RequestLogHandler</code> (see <a href="#pg-server-http-handler">this section</a> about how to organize Jetty <code>Handler</code>s) to wrap a web application <code>Handler</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// Create a first ServletContextHandler for your main application.</span>
+ServletContextHandler mainContext = <span class="keyword">new</span> ServletContextHandler();
+mainContext.setContextPath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/main</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// Create a RequestLogHandler to log requests for your main application.</span>
+RequestLogHandler requestLogHandler = <span class="keyword">new</span> RequestLogHandler();
+requestLogHandler.setRequestLog(<span class="keyword">new</span> CustomRequestLog());
+<span class="comment">// Wrap the main application with the request log handler.</span>
+requestLogHandler.setHandler(mainContext);
+
+<span class="comment">// Create a second ServletContextHandler for your other application.</span>
+<span class="comment">// No request logging for this application.</span>
+ServletContextHandler otherContext = <span class="keyword">new</span> ServletContextHandler();
+mainContext.setContextPath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/other</span><span class="delimiter">&quot;</span></span>);
+
+server.setHandler(<span class="keyword">new</span> HandlerList(requestLogHandler, otherContext));</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
 <h4 id="pg-server-http-connector"><a class="anchor" href="#pg-server-http-connector"></a><a class="link" href="#pg-server-http-connector">Server Connectors</a></h4>
 <div class="paragraph">
 <p>A <code>Connector</code> is the component that handles incoming requests from clients, and works in conjunction with <code>ConnectionFactory</code> instances.</p>
@@ -4623,7 +5187,7 @@
 <p><code>org.eclipse.jetty.server.ServerConnector</code>, for TCP/IP sockets.</p>
 </li>
 <li>
-<p><code>org.eclipse.jetty.unixdomain.server.UnixDomainServerConnector</code> for Unix-Domain sockets.</p>
+<p><code>org.eclipse.jetty.unixdomain.server.UnixDomainServerConnector</code> for Unix-Domain sockets (requires Java 16 or later).</p>
 </li>
 </ul>
 </div>
@@ -4688,6 +5252,20 @@
 server.start();</code></pre>
 </div>
 </div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>You can use Unix-Domain sockets support only when you run your server with Java 16 or later.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
 <div class="paragraph">
 <p>The <em>acceptors</em> are threads (typically only one) that compete to accept socket connections.
 When a connection is accepted, <code>ServerConnector</code> wraps the accepted <code>SocketChannel</code> and passes it to the <a href="#pg-arch-io-selector-manager"><code>SelectorManager</code></a>.
@@ -4906,6 +5484,60 @@
 </div>
 </div>
 <div class="sect5">
+<h6 id="pg-server-http-connector-protocol-http3"><a class="anchor" href="#pg-server-http-connector-protocol-http3"></a><a class="link" href="#pg-server-http-connector-protocol-http3">HTTP/3</a></h6>
+<div class="paragraph">
+<p>HTTP/3 is based on UDP, differently from HTTP/1 and HTTP/2 that are based on TCP.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP/3 client may initiate a connection (using the QUIC protocol via UDP) on the canonical HTTP secure port <code>443</code>, but chances are that the connection may not succeed (for example, the server does not listen for UDP on port <code>443</code>, only listens for TCP).</p>
+</div>
+<div class="paragraph">
+<p>For this reason, HTTP servers typically listen on the canonical HTTP secure port <code>443</code> for HTTP/1 and HTTP/2, and advertise the availability HTTP/3 as an <a href="https://datatracker.ietf.org/doc/html/rfc7838"><em>HTTP alternate service</em></a> on a different port (and possibly a different host).</p>
+</div>
+<div class="paragraph">
+<p>For example, an HTTP/2 response may include the following header:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>Alt-Svc: h3=&quot;:843&quot;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The presence of this header indicates that protocol <code>h3</code> is available on the same host (since no host is defined before the port), but on port <code>843</code>.
+The HTTP/3 client may now initiate a QUIC connection on port <code>843</code> and make HTTP/3 requests.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/diag-24a0ef88281611e6f6ebbb9d395e2e68.png" alt="Diagram" width="321" height="250">
+</div>
+</div>
+<div class="paragraph">
+<p>The code necessary to configure HTTP/2 is described in <a href="#pg-server-http-connector-protocol-http2-tls">this section</a>.</p>
+</div>
+<div class="paragraph">
+<p>To setup HTTP/3, for example on port <code>843</code>, you need the following code (some of which could be shared with other connectors such as HTTP/2&#8217;s):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Server server = <span class="keyword">new</span> Server();
+
+SslContextFactory.Server sslContextFactory = <span class="keyword">new</span> SslContextFactory.Server();
+sslContextFactory.setKeyStorePath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/keystore</span><span class="delimiter">&quot;</span></span>);
+sslContextFactory.setKeyStorePassword(<span class="string"><span class="delimiter">&quot;</span><span class="content">secret</span><span class="delimiter">&quot;</span></span>);
+
+HttpConfiguration httpConfig = <span class="keyword">new</span> HttpConfiguration();
+httpConfig.addCustomizer(<span class="keyword">new</span> SecureRequestCustomizer());
+
+<span class="comment">// Create and configure the HTTP/3 connector.</span>
+HTTP3ServerConnector connector = <span class="keyword">new</span> HTTP3ServerConnector(server, sslContextFactory, <span class="keyword">new</span> HTTP3ServerConnectionFactory(httpConfig));
+connector.setPort(<span class="integer">843</span>);
+server.addConnector(connector);
+
+server.start();</code></pre>
+</div>
+</div>
+</div>
+<div class="sect5">
 <h6 id="pg-server-http-connector-protocol-proxy-http11"><a class="anchor" href="#pg-server-http-connector-protocol-proxy-http11"></a><a class="link" href="#pg-server-http-connector-protocol-proxy-http11">Jetty Behind a Load Balancer</a></h6>
 <div class="paragraph">
 <p>It is often the case that Jetty receives connections from a load balancer configured to distribute the load among many Jetty backend servers.</p>
@@ -5028,7 +5660,7 @@
 </ul>
 </div>
 <div class="paragraph">
-<p>The <code>HandlerCollection</code> behavior (invoking <em>all</em> handlers) is useful when for example the last <code>Handler</code> is a logging <code>Handler</code> that logs the request(that may have been modified by previous handlers).</p>
+<p>The <code>HandlerCollection</code> behavior (invoking <em>all</em> handlers) is useful when for example the last <code>Handler</code> is a logging <code>Handler</code> that logs the request (that may have been modified by previous handlers).</p>
 </div>
 <div class="paragraph">
 <p>The <code>HandlerList</code> behavior (invoking handlers up to the first that calls <code>Request.setHandled(true)</code>) is useful when each handler processes a different URIs or a different virtual hosts: <code>Handler</code>s are invoked one after the other until one matches the URI or virtual host.</p>
@@ -5449,7 +6081,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-rewrite<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -5726,7 +6358,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-servlet<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -6109,12 +6741,12 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http2<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>http2-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection.
+<p>HTTP/2 is a multiplexed protocol: it allows multiple HTTP/2 requests to be sent on the same TCP connection, or <em>session</em>.
 Each request/response cycle is represented by a <em>stream</em>.
 Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
 A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
@@ -6195,7 +6827,7 @@
 <p>The <code>ServerSessionListener</code> interface defines a number of methods that are invoked by the implementation upon the occurrence of HTTP/2 events, and that server applications can override to react to those events.</p>
 </div>
 <div class="paragraph">
-<p>Please refer to the `ServerSessionListener`<a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/http2/api/server/ServerSessionListener.html">javadocs</a> for the complete list of events.</p>
+<p>Please refer to the <code>ServerSessionListener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/http2/api/server/ServerSessionListener.html">javadocs</a> for the complete list of events.</p>
 </div>
 <div class="paragraph">
 <p>The first event is the <em>accept</em> event and happens when a client opens a new TCP connection to the server and the server accepts the connection.
@@ -6556,6 +7188,320 @@
 </div>
 </div>
 <div class="sect2">
+<h3 id="pg-server-http3"><a class="anchor" href="#pg-server-http3"></a><a class="link" href="#pg-server-http3">HTTP/3 Server Library</a></h3>
+<div class="paragraph">
+<p>In the vast majority of cases, server applications should use the generic, high-level, <a href="#pg-server-http">HTTP server library</a> that also provides HTTP/3 support via the HTTP/3 connector and <code>ConnectionFactory</code>s as described in details <a href="#pg-server-http-connector-protocol-http3">here</a>.</p>
+</div>
+<div class="paragraph">
+<p>The low-level HTTP/3 server library has been designed for those applications that need low-level access to HTTP/3 features such as <em>sessions</em>, <em>streams</em> and <em>frames</em>, and this is quite a rare use case.</p>
+</div>
+<div class="paragraph">
+<p>See also the correspondent <a href="#pg-client-http3">HTTP/3 client library</a>.</p>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-intro"><a class="anchor" href="#pg-server-http3-intro"></a><a class="link" href="#pg-server-http3-intro">Introduction</a></h4>
+<div class="paragraph">
+<p>The Maven artifact coordinates for the HTTP/3 client library are the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
+  <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.http3<span class="tag">&lt;/groupId&gt;</span>
+  <span class="tag">&lt;artifactId&gt;</span>http3-server<span class="tag">&lt;/artifactId&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
+<span class="tag">&lt;/dependency&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>HTTP/3 is a multiplexed protocol because it relies on the multiplexing capabilities of QUIC, the protocol based on UDP that transports HTTP/3 frames.
+Thanks to multiplexing, multiple HTTP/3 requests are sent on the same QUIC connection, or <em>session</em>.
+Each request/response cycle is represented by a <em>stream</em>.
+Therefore, a single <em>session</em> manages multiple concurrent <em>streams</em>.
+A <em>stream</em> has typically a very short life compared to the <em>session</em>: a <em>stream</em> only exists for the duration of the request/response cycle and then disappears.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-setup"><a class="anchor" href="#pg-server-http3-setup"></a><a class="link" href="#pg-server-http3-setup">Server Setup</a></h4>
+<div class="paragraph">
+<p>The low-level HTTP/3 support is provided by <code>org.eclipse.jetty.http3.server.RawHTTP3ServerConnectionFactory</code> and <code>org.eclipse.jetty.http3.api.Session.Server.Listener</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// Create a Server instance.</span>
+Server server = <span class="keyword">new</span> Server();
+
+<span class="comment">// HTTP/3 is always secure, so it always need a SslContextFactory.</span>
+SslContextFactory.Server sslContextFactory = <span class="keyword">new</span> SslContextFactory.Server();
+sslContextFactory.setKeyStorePath(<span class="string"><span class="delimiter">&quot;</span><span class="content">/path/to/keystore</span><span class="delimiter">&quot;</span></span>);
+sslContextFactory.setKeyStorePassword(<span class="string"><span class="delimiter">&quot;</span><span class="content">secret</span><span class="delimiter">&quot;</span></span>);
+
+<span class="comment">// The listener for session events.</span>
+Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener() {};
+
+<span class="comment">// Create and configure the RawHTTP3ServerConnectionFactory.</span>
+RawHTTP3ServerConnectionFactory http3 = <span class="keyword">new</span> RawHTTP3ServerConnectionFactory(sessionListener);
+http3.getHTTP3Configuration().setStreamIdleTimeout(<span class="integer">15000</span>);
+
+<span class="comment">// Create and configure the HTTP3ServerConnector.</span>
+HTTP3ServerConnector connector = <span class="keyword">new</span> HTTP3ServerConnector(server, sslContextFactory, http3);
+<span class="comment">// Configure the max number of requests per QUIC connection.</span>
+connector.getQuicConfiguration().setMaxBidirectionalRemoteStreams(<span class="integer">1024</span>);
+
+<span class="comment">// Add the Connector to the Server.</span>
+server.addConnector(connector);
+
+<span class="comment">// Start the Server so it starts accepting connections from clients.</span>
+server.start();</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Where server applications using the <a href="#pg-server-http">high-level server library</a> deal with HTTP requests and responses in <code>Handler</code>s, server applications using the low-level HTTP/3 server library deal directly with HTTP/3 <em>session</em>s, <em>stream</em>s and <em>frame</em>s in a <code>Session.Server.Listener</code> implementation.</p>
+</div>
+<div class="paragraph">
+<p>The <code>Session.Server.Listener</code> interface defines a number of methods that are invoked by the implementation upon the occurrence of HTTP/3 events, and that server applications can override to react to those events.</p>
+</div>
+<div class="paragraph">
+<p>Please refer to the <code>Session.Server.Listener</code> <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/http3/api/Session.Server.Listener.html">javadocs</a> for the complete list of events.</p>
+</div>
+<div class="paragraph">
+<p>The first event is the <em>accept</em> event and happens when a client opens a new QUIC connection to the server and the server accepts the connection.
+This is the first occasion where server applications have access to the HTTP/3 <code>Session</code> object:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="type">void</span> onAccept(Session session)
+    {
+        <span class="predefined-type">SocketAddress</span> remoteAddress = session.getRemoteSocketAddress();
+        <span class="predefined-type">System</span>.getLogger(<span class="string"><span class="delimiter">&quot;</span><span class="content">http3</span><span class="delimiter">&quot;</span></span>).log(INFO, <span class="string"><span class="delimiter">&quot;</span><span class="content">Connection from {0}</span><span class="delimiter">&quot;</span></span>, remoteAddress);
+    }
+};</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>After the QUIC connection has been established, both client and server send an HTTP/3 <code>SETTINGS</code> frame to exchange their HTTP/3 configuration.
+This generates the <em>preface</em> event, where applications can customize the HTTP/3 settings by returning a map of settings that the implementation will send to the other peer:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; onPreface(Session session)
+    {
+        <span class="predefined-type">Map</span>&lt;<span class="predefined-type">Long</span>, <span class="predefined-type">Long</span>&gt; settings = <span class="keyword">new</span> <span class="predefined-type">HashMap</span>&lt;&gt;();
+
+        <span class="comment">// Customize the settings</span>
+
+        <span class="keyword">return</span> settings;
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-request"><a class="anchor" href="#pg-server-http3-request"></a><a class="link" href="#pg-server-http3-request">Receiving a Request</a></h4>
+<div class="paragraph">
+<p>Receiving an HTTP request from the client, and sending a response, creates a <em>stream</em> that encapsulates the exchange of HTTP/3 frames that compose the request and the response.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP request is made of a <code>HEADERS</code> frame, that carries the request method, the request URI and the request headers, and optional <code>DATA</code> frames that carry the request content.</p>
+</div>
+<div class="paragraph">
+<p>Receiving the <code>HEADERS</code> frame opens the <code>Stream</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        MetaData.Request request = (MetaData.Request)frame.getMetaData();
+
+        <span class="comment">// Return a Stream.Server.Listener to handle the request events,</span>
+        <span class="comment">// for example request content events or a request reset.</span>
+        <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener() {};
+    }
+};</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Server applications should return a <code>Stream.Server.Listener</code> implementation from <code>onRequest(&#8230;&#8203;)</code> to be notified of events generated by the client, such as <code>DATA</code> frames carrying request content, or a reset event indicating that the client wants to <em>reset</em> the request, or an idle timeout event indicating that the client was supposed to send more frames but it did not.</p>
+</div>
+<div class="paragraph">
+<p>The example below shows how to receive request content:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        MetaData.Request request = (MetaData.Request)frame.getMetaData();
+
+        <span class="comment">// Demand to be called back when data is available.</span>
+        stream.demand();
+
+        <span class="comment">// Return a Stream.Server.Listener to handle the request content.</span>
+        <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener()
+        {
+            <span class="annotation">@Override</span>
+            <span class="directive">public</span> <span class="type">void</span> onDataAvailable(Stream.Server stream)
+            {
+                <span class="comment">// Read a chunk of the request content.</span>
+                Stream.Data data = stream.readData();
+
+                <span class="keyword">if</span> (data == <span class="predefined-constant">null</span>)
+                {
+                    <span class="comment">// No data available now, demand to be called back.</span>
+                    stream.demand();
+                }
+                <span class="keyword">else</span>
+                {
+                    <span class="comment">// Get the content buffer.</span>
+                    <span class="predefined-type">ByteBuffer</span> buffer = data.getByteBuffer();
+
+                    <span class="comment">// Consume the buffer, here - as an example - just log it.</span>
+                    <span class="predefined-type">System</span>.getLogger(<span class="string"><span class="delimiter">&quot;</span><span class="content">http3</span><span class="delimiter">&quot;</span></span>).log(INFO, <span class="string"><span class="delimiter">&quot;</span><span class="content">Consuming buffer {0}</span><span class="delimiter">&quot;</span></span>, buffer);
+
+                    <span class="comment">// Tell the implementation that the buffer has been consumed.</span>
+                    data.complete();
+
+                    <span class="keyword">if</span> (!data.isLast())
+                    {
+                        <span class="comment">// Demand to be called back.</span>
+                        stream.demand();
+                    }
+                }
+            }
+        };
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-response"><a class="anchor" href="#pg-server-http3-response"></a><a class="link" href="#pg-server-http3-response">Sending a Response</a></h4>
+<div class="paragraph">
+<p>After receiving an HTTP request, a server application must send an HTTP response.</p>
+</div>
+<div class="paragraph">
+<p>An HTTP response is typically composed of a <code>HEADERS</code> frame containing the HTTP status code and the response headers, and optionally one or more <code>DATA</code> frames containing the response content bytes.</p>
+</div>
+<div class="paragraph">
+<p>The HTTP/3 protocol also supports response trailers (that is, headers that are sent after the response content) that also are sent using a <code>HEADERS</code> frame.</p>
+</div>
+<div class="paragraph">
+<p>A server application can send a response in this way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        <span class="comment">// Send a response after reading the request.</span>
+        MetaData.Request request = (MetaData.Request)frame.getMetaData();
+        <span class="keyword">if</span> (frame.isLast())
+        {
+            respond(stream, request);
+            <span class="keyword">return</span> <span class="predefined-constant">null</span>;
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// Demand to be called back when data is available.</span>
+            stream.demand();
+            <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener()
+            {
+                <span class="annotation">@Override</span>
+                <span class="directive">public</span> <span class="type">void</span> onDataAvailable(Stream.Server stream)
+                {
+                    Stream.Data data = stream.readData();
+                    <span class="keyword">if</span> (data == <span class="predefined-constant">null</span>)
+                    {
+                        stream.demand();
+                    }
+                    <span class="keyword">else</span>
+                    {
+                        <span class="comment">// Consume the request content.</span>
+                        data.complete();
+                        <span class="keyword">if</span> (data.isLast())
+                            respond(stream, request);
+                    }
+                }
+            };
+        }
+    }
+
+    <span class="directive">private</span> <span class="type">void</span> respond(Stream.Server stream, MetaData.Request request)
+    {
+        <span class="comment">// Prepare the response HEADERS frame.</span>
+
+        <span class="comment">// The response HTTP status and HTTP headers.</span>
+        MetaData.Response response = <span class="keyword">new</span> MetaData.Response(HttpVersion.HTTP_3, HttpStatus.OK_200, HttpFields.EMPTY);
+
+        <span class="keyword">if</span> (HttpMethod.GET.is(request.getMethod()))
+        {
+            <span class="comment">// The response content.</span>
+            <span class="predefined-type">ByteBuffer</span> resourceBytes = getResourceBytes(request);
+
+            <span class="comment">// Send the HEADERS frame with the response status and headers,</span>
+            <span class="comment">// and a DATA frame with the response content bytes.</span>
+            stream.respond(<span class="keyword">new</span> HeadersFrame(response, <span class="predefined-constant">false</span>))
+                .thenCompose(s -&gt; s.data(<span class="keyword">new</span> DataFrame(resourceBytes, <span class="predefined-constant">true</span>)));
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// Send just the HEADERS frame with the response status and headers.</span>
+            stream.respond(<span class="keyword">new</span> HeadersFrame(response, <span class="predefined-constant">true</span>));
+        }
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="pg-server-http3-reset"><a class="anchor" href="#pg-server-http3-reset"></a><a class="link" href="#pg-server-http3-reset">Resetting a Request</a></h4>
+<div class="paragraph">
+<p>A server application may decide that it does not want to accept the request.
+For example, it may throttle the client because it sent too many requests in a time window, or the request is invalid (and does not deserve a proper HTTP response), etc.</p>
+</div>
+<div class="paragraph">
+<p>A request can be reset in this way:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Session.Server.Listener sessionListener = <span class="keyword">new</span> Session.Server.Listener()
+{
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> Stream.Server.Listener onRequest(Stream.Server stream, HeadersFrame frame)
+    {
+        <span class="type">float</span> requestRate = calculateRequestRate();
+
+        <span class="keyword">if</span> (requestRate &gt; maxRequestRate)
+        {
+            stream.reset(HTTP3ErrorCode.REQUEST_REJECTED_ERROR.code(), <span class="keyword">new</span> <span class="exception">RejectedExecutionException</span>());
+            <span class="keyword">return</span> <span class="predefined-constant">null</span>;
+        }
+        <span class="keyword">else</span>
+        {
+            <span class="comment">// The request is accepted.</span>
+            MetaData.Request request = (MetaData.Request)frame.getMetaData();
+            <span class="comment">// Return a Stream.Listener to handle the request events.</span>
+            <span class="keyword">return</span> <span class="keyword">new</span> Stream.Server.Listener() {};
+        }
+    }
+};</code></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
 <h3 id="pg-server-session"><a class="anchor" href="#pg-server-session"></a><a class="link" href="#pg-server-session">HTTP Session Management</a></h3>
 <div class="paragraph">
 <p>Sessions are a concept within the Servlet API which allow requests to store and retrieve information across the time a user spends in an application.
@@ -6612,7 +7558,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-ec0156d64fc9a225c5e022fc352d7d46.png" alt="Diagram" width="515" height="541">
+<img src="images/diag-ec0156d64fc9a225c5e022fc352d7d46.png" alt="Diagram" width="549" height="540">
 </div>
 </div>
 </div>
@@ -7255,7 +8201,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-fb3e088ea5480f2b172677334c79d51f.png" alt="Diagram" width="1214" height="305">
+<img src="images/diag-fb3e088ea5480f2b172677334c79d51f.png" alt="Diagram" width="1320" height="304">
 </div>
 </div>
 <div class="paragraph">
@@ -7499,7 +8445,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-8bbf1fa0b84011383e811eaf9e630100.png" alt="Diagram" width="340" height="176">
+<img src="images/diag-8bbf1fa0b84011383e811eaf9e630100.png" alt="Diagram" width="363" height="176">
 </div>
 </div>
 <div class="paragraph">
@@ -7737,7 +8683,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-ae4b86cecdafb2b8e1afb35b06f359a1.png" alt="Diagram" width="166" height="203">
+<img src="images/diag-ae4b86cecdafb2b8e1afb35b06f359a1.png" alt="Diagram" width="274" height="315">
 </div>
 </div>
 <div class="paragraph">
@@ -7889,7 +8835,7 @@
 <h5 id="pg-server-session-cachingsessiondatastore"><a class="anchor" href="#pg-server-session-cachingsessiondatastore"></a><a class="link" href="#pg-server-session-cachingsessiondatastore">The CachingSessionDataStore</a></h5>
 <div class="imageblock">
 <div class="content">
-<img src="diag-3e23a5cd9673dbe358271d004cc0d714.png" alt="Diagram" width="345" height="284">
+<img src="images/diag-3e23a5cd9673dbe358271d004cc0d714.png" alt="Diagram" width="374" height="284">
 </div>
 </div>
 <div class="paragraph">
@@ -8047,7 +8993,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-jakarta-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -8280,7 +9226,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-jetty-api<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -8292,7 +9238,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty.websocket<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>websocket-jetty-server<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -8855,7 +9801,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-d8ecf025f2e851a45b4d2132df024ecb.png" alt="Diagram" width="682" height="100">
+<img src="images/diag-d8ecf025f2e851a45b4d2132df024ecb.png" alt="Diagram" width="720" height="99">
 </div>
 </div>
 <div class="paragraph">
@@ -8899,7 +9845,7 @@
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png" alt="Diagram" width="900" height="241">
+<img src="images/diag-63a9fb2dbcfbcb3fb7bb1dffc2609836.png" alt="Diagram" width="954" height="240">
 </div>
 </div>
 <div class="paragraph">
@@ -10950,9 +11896,11 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;configuration&gt;</span>
   <span class="tag">&lt;webApp&gt;</span>
     <span class="tag">&lt;contextPath&gt;</span>/${build.finalName}<span class="tag">&lt;/contextPath&gt;</span>
-    <span class="tag">&lt;baseResource</span> <span class="attribute-name">implementation</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">org.eclipse.jetty.util.resource.ResourceCollection</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
-      <span class="tag">&lt;resourcesAsCSV&gt;</span>src/main/webapp,/home/johndoe/path/to/my/other/source,/yet/another/folder<span class="tag">&lt;/resourcesAsCSV&gt;</span>
-    <span class="tag">&lt;/baseResource&gt;</span>
+    <span class="tag">&lt;resourceBases&gt;</span>
+      <span class="tag">&lt;resourceBase&gt;</span>src/main/webapp<span class="tag">&lt;/resourceBase&gt;</span>
+      <span class="tag">&lt;resourceBase&gt;</span>/home/johndoe/path/to/my/other/source<span class="tag">&lt;/resourceBase&gt;</span>
+      <span class="tag">&lt;resourceBase&gt;</span>/yet/another/folder<span class="tag">&lt;/resourceBase&gt;</span>
+    <span class="tag">&lt;/resourceBases&gt;</span>
   <span class="tag">&lt;/webApp&gt;</span>
 <span class="tag">&lt;/configuration&gt;</span></code></pre>
 </div>
@@ -11974,7 +12922,7 @@
 <p><code>SocketChannel</code>s that are passed to <code>SelectorManager</code> are wrapped into two related components: an <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/EndPoint.html"><code>EndPoint</code></a> and a <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/Connection.html"><code>Connection</code></a>.</p>
 </div>
 <div class="paragraph">
-<p><code>EndPoint</code> is the Jetty abstraction for a <code>SocketChannel</code>: you can read bytes from an <code>EndPoint</code> via <code>EndPoint.fill(ByteBuffer)</code>, you can write bytes to an <code>EndPoint</code> via <code>EndPoint.flush(ByteBuffer...)</code> and <code>EndPoint.write(Callback, ByteBuffer...)</code>, you can close an <code>EndPoint</code> via <code>EndPoint.close()</code>, etc.</p>
+<p><code>EndPoint</code> is the Jetty abstraction for a <code>SocketChannel</code> or a <code>DatagramChannel</code>: you can read bytes from an <code>EndPoint</code>, you can write bytes to an <code>EndPoint</code> , you can close an <code>EndPoint</code>, etc.</p>
 </div>
 <div class="paragraph">
 <p><code>Connection</code> is the Jetty abstraction that is responsible to read bytes from the <code>EndPoint</code> and to deserialize the read bytes into objects.
@@ -11982,13 +12930,13 @@
 Conversely, an HTTP/1.1 client-side <code>Connection</code> implementation is responsible to deserialize HTTP/1.1 response bytes into an HTTP response object.</p>
 </div>
 <div class="paragraph">
-<p><code>Connection</code> is the abstraction that implements the reading side of a specific protocol such as HTTP/1.1, or HTTP/2, or WebSocket: it is able to read incoming communication in that protocol.</p>
+<p><code>Connection</code> is the abstraction that implements the reading side of a specific protocol such as HTTP/1.1, or HTTP/2, or HTTP/3, or WebSocket: it is able to read incoming communication in that protocol.</p>
 </div>
 <div class="paragraph">
 <p>The writing side for a specific protocol <em>may</em> be implemented in the <code>Connection</code> but may also be implemented in other components, although eventually the bytes to be written will be written through the <code>EndPoint</code>.</p>
 </div>
 <div class="paragraph">
-<p>While there is primarily just one implementation of <code>EndPoint</code>,<a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/SocketChannelEndPoint.html"><code>SocketChannelEndPoint</code></a> (used both on the client-side and on the server-side), there are many implementations of <code>Connection</code>, typically two for each protocol (one for the client-side and one for the server-side).</p>
+<p>While there are primarily only two implementations of <code>EndPoint</code>,<a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/SocketChannelEndPoint.html"><code>SocketChannelEndPoint</code></a> for TCP and <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/DatagramChannelEndPoint.html"><code>DatagramChannelEndPoint</code></a> for UDP (used both on the client-side and on the server-side), there are many implementations of <code>Connection</code>, typically two for each protocol (one for the client-side and one for the server-side).</p>
 </div>
 <div class="paragraph">
 <p>The <code>EndPoint</code> and <code>Connection</code> pairs can be chained, for example in case of encrypted communication using the TLS protocol.
@@ -11999,26 +12947,14 @@
 <code>EndPoint</code> supports changing the <code>Connection</code> object on-the-fly via <code>EndPoint.upgrade(Connection)</code>.
 This allows to use the HTTP/1.1 <code>Connection</code> during the initial communication and later to replace it with a WebSocket <code>Connection</code>.</p>
 </div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-TODO: add a section on <code>UpgradeFrom</code> and <code>UpgradeTo</code>?
-</td>
-</tr>
-</table>
-</div>
 <div class="paragraph">
 <p><code>SelectorManager</code> is an abstract class because while it knows how to create concrete <code>EndPoint</code> instances, it does not know how to create protocol specific <code>Connection</code> instances.</p>
 </div>
 <div class="paragraph">
-<p>Creating <code>Connection</code> instances is performed on the server-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/server/ConnectionFactory.html"><code>ConnectionFactory</code></a>s and on the client-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/ClientConnectionFactory.html"><code>ClientConnectionFactory</code></a>s</p>
+<p>Creating <code>Connection</code> instances is performed on the server-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/server/ConnectionFactory.html"><code>ConnectionFactory</code></a>s and on the client-side by <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/io/ClientConnectionFactory.html"><code>ClientConnectionFactory</code></a>s.</p>
 </div>
 <div class="paragraph">
-<p>On the server-side, the component that aggregates a <code>SelectorManager</code> with a set of <code>ConnectionFactory</code>s is <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/server/ServerConnector.html"><code>ServerConnector</code></a>s for TCP/IP sockets, and <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/unixdomain/server/UnixDomainServerConnector.html"><code>UnixDomainServerConnector</code></a> for Unix-Domain sockets (see the <a href="#pg-server-io-arch">server-side architecture section</a> for more information).</p>
+<p>On the server-side, the component that aggregates a <code>SelectorManager</code> with a set of <code>ConnectionFactory</code>s is <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/server/ServerConnector.html"><code>ServerConnector</code></a> for TCP sockets, <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/quic/server/QuicServerConnector.html"><code>QuicServerConnector</code></a> for QUIC sockets, and <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/unixdomain/server/UnixDomainServerConnector.html"><code>UnixDomainServerConnector</code></a> for Unix-Domain sockets (see the <a href="#pg-server-io-arch">server-side architecture section</a> for more information).</p>
 </div>
 <div class="paragraph">
 <p>On the client-side, the components that aggregates a <code>SelectorManager</code> with a set of <code>ClientConnectionFactory</code>s are <a href="https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/client/HttpClientTransport.html"><code>HttpClientTransport</code></a> subclasses (see the <a href="#pg-client-io-arch">client-side architecture section</a> for more information).</p>
@@ -12030,17 +12966,17 @@
 <p>The Jetty I/O library use Java NIO to handle I/O, so that I/O is non-blocking.</p>
 </div>
 <div class="paragraph">
-<p>At the Java NIO level, in order to be notified when a <code>SocketChannel</code> has data to be read, the <code>SelectionKey.OP_READ</code> flag must be set.</p>
+<p>At the Java NIO level, in order to be notified when a <code>SocketChannel</code> or <code>DatagramChannel</code> has data to be read, the <code>SelectionKey.OP_READ</code> flag must be set.</p>
 </div>
 <div class="paragraph">
 <p>In the Jetty I/O library, you can call <code>EndPoint.fillInterested(Callback)</code> to declare interest in the "read" (also called "fill") event, and the <code>Callback</code> parameter is the object that is notified when such an event occurs.</p>
 </div>
 <div class="paragraph">
-<p>At the Java NIO level, a <code>SocketChannel</code> is always writable, unless it becomes TCP congested.
-In order to be notified when a <code>SocketChannel</code> uncongests and it is therefore writable again, the <code>SelectionKey.OP_WRITE</code> flag must be set.</p>
+<p>At the Java NIO level, a <code>SocketChannel</code> or <code>DatagramChannel</code> is always writable, unless it becomes congested.
+In order to be notified when a channel uncongests and it is therefore writable again, the <code>SelectionKey.OP_WRITE</code> flag must be set.</p>
 </div>
 <div class="paragraph">
-<p>In the Jetty I/O library, you can call <code>EndPoint.write(Callback, ByteBuffer&#8230;&#8203;)</code> to write the <code>ByteBuffer</code>s and the <code>Callback</code> parameter is the object that is notified when the whole write is finished (i.e. <em>all</em> <code>ByteBuffer</code>s have been fully written, even if they are delayed by TCP congestion/uncongestion).</p>
+<p>In the Jetty I/O library, you can call <code>EndPoint.write(Callback, ByteBuffer&#8230;&#8203;)</code> to write the <code>ByteBuffer</code>s and the <code>Callback</code> parameter is the object that is notified when the whole write is finished (i.e. <em>all</em> <code>ByteBuffer</code>s have been fully written, even if they are delayed by congestion/uncongestion).</p>
 </div>
 <div class="paragraph">
 <p>The <code>EndPoint</code> APIs abstract out the Java NIO details by providing non-blocking APIs based on <code>Callback</code> objects for I/O operations.
@@ -12108,7 +13044,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="pg-arch-io-echo"><a class="anchor" href="#pg-arch-io-echo"></a><a class="link" href="#pg-arch-io-echo">Jetty I/O: Network Echo</a></h4>
+<h4 id="pg-arch-io-echo"><a class="anchor" href="#pg-arch-io-echo"></a><a class="link" href="#pg-arch-io-echo">Jetty I/O: TCP Network Echo</a></h4>
 <div class="paragraph">
 <p>With the concepts above it is now possible to write a simple, fully non-blocking, <code>Connection</code> implementation that simply echoes the bytes that it reads back to the other peer.</p>
 </div>
@@ -12448,7 +13384,7 @@
 <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
   <span class="tag">&lt;groupId&gt;</span>org.eclipse.jetty<span class="tag">&lt;/groupId&gt;</span>
   <span class="tag">&lt;artifactId&gt;</span>jetty-jmx<span class="tag">&lt;/artifactId&gt;</span>
-  <span class="tag">&lt;version&gt;</span>11.0.7<span class="tag">&lt;/version&gt;</span>
+  <span class="tag">&lt;version&gt;</span>11.0.8<span class="tag">&lt;/version&gt;</span>
 <span class="tag">&lt;/dependency&gt;</span></code></pre>
 </div>
 </div>
@@ -13004,7 +13940,7 @@
 </div>
 <div class="paragraph">
 <p>The Jetty SLF4J binding only provides an appender that writes to <code>System.err</code>.
-For more advanced configurations (for example, logging to a file), use <a href="http://logback.qos.ch">LogBack</a>, or <a href="https://logging.apache.org/log4j/2.x/">Log4J2</a>, or your preferred SLF4J binding.</p>
+For more advanced configurations (for example, logging to a file), use <a href="http://logback.qos.ch">LogBack</a>, or <a href="https://logging.apache.org/log4j/2.x/">Log4j2</a>, or your preferred SLF4J binding.</p>
 </div>
 <div class="admonitionblock caution">
 <table>
@@ -13013,7 +13949,7 @@
 <i class="fa icon-caution" title="Caution"></i>
 </td>
 <td class="content">
-Only one binding can be present in the class-path or module-path. If you use the LogBack SLF4J binding or the Log4J2 SLF4J binding, remember to remove the Jetty SLF4J binding.
+Only one binding can be present in the class-path or module-path. If you use the LogBack SLF4J binding or the Log4j2 SLF4J binding, remember to remove the Jetty SLF4J binding.
 </td>
 </tr>
 </table>
@@ -13340,8 +14276,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 11.0.7<br>
-Last updated 2021-05-12 15:27:28 -0500
+Version 11.0.8<br>
+Last updated 2022-01-27 18:21:06 +0100
 </div>
 </div>
 </body>
diff --git a/documentation/jetty-11/styles.css b/documentation/jetty-11/styles.css
index 0f4d380..ee1fff6 100644
--- a/documentation/jetty-11/styles.css
+++ b/documentation/jetty-11/styles.css
@@ -1,6 +1,6 @@
 /*
  * ========================================================================
- * Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+ * Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
diff --git a/documentation/jetty-11/toc.css b/documentation/jetty-11/toc.css
index e9eb822..c997911 100644
--- a/documentation/jetty-11/toc.css
+++ b/documentation/jetty-11/toc.css
@@ -1,6 +1,6 @@
 /*
  * ========================================================================
- * Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+ * Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
diff --git a/documentation/jetty-11/toc.js b/documentation/jetty-11/toc.js
index 30e1f07..3624911 100644
--- a/documentation/jetty-11/toc.js
+++ b/documentation/jetty-11/toc.js
@@ -1,6 +1,6 @@
 //
 // ========================================================================
-// Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+// Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //
 // This program and the accompanying materials are made available under the
 // terms of the Eclipse Public License v. 2.0 which is available at
diff --git a/documentation/jetty-9/index.html b/documentation/jetty-9/index.html
index af9fb31..adaa7da 100644
--- a/documentation/jetty-9/index.html
+++ b/documentation/jetty-9/index.html
@@ -4,25 +4,23 @@
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.15">
+<meta name="generator" content="Asciidoctor 2.0.17">
 <title>Jetty : The Definitive Reference</title>
 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
 <style>
-/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
-/* Uncomment @import statement to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
-audio,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment the following line when using as a custom stylesheet */
+/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
+html{font-family:sans-serif;-webkit-text-size-adjust:100%}
 a{background:none}
 a:focus{outline:thin dotted}
 a:active,a:hover{outline:0}
 h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
 b,strong{font-weight:bold}
+abbr{font-size:.9em}
+abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
 dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+hr{height:0}
 mark{background:#ff0;color:#000}
 code,kbd,pre,samp{font-family:monospace;font-size:1em}
 pre{white-space:pre-wrap}
@@ -34,20 +32,22 @@
 img{border:0}
 svg:not(:root){overflow:hidden}
 figure{margin:0}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
 legend{border:0;padding:0}
 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
 button,input{line-height:normal}
 button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
 button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type=checkbox],input[type=radio]{padding:0}
 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
 textarea{overflow:auto;vertical-align:top}
 table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+*,::before,::after{box-sizing:border-box}
 html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
 a:hover{cursor:pointer}
 img,object,embed{max-width:100%;height:auto}
 object,embed{height:100%}
@@ -67,7 +67,7 @@
 a{color:#2156a5;text-decoration:underline;line-height:inherit}
 a:hover,a:focus{color:#1d4b8f}
 a img{border:0}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
 p aside{font-size:.875em;line-height:1.35;font-style:italic}
 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
@@ -76,14 +76,14 @@
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
 h4,h5{font-size:1.125em}
 h6{font-size:1em}
-hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
 em,i{font-style:italic;line-height:inherit}
 strong,b{font-weight:bold;line-height:inherit}
 small{font-size:60%;line-height:inherit}
 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
 ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
 ul.square{list-style-type:square}
 ul.circle{list-style-type:circle}
@@ -91,8 +91,6 @@
 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
 dl dt{margin-bottom:.3125em;font-weight:bold}
 dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
 @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
@@ -100,7 +98,7 @@
 h2{font-size:2.3125em}
 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
 h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;word-wrap:normal}
+table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
 table thead,table tfoot{background:#f7f8f7}
 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
@@ -115,7 +113,7 @@
 :not(pre).nobreak{word-wrap:normal}
 :not(pre).nowrap{white-space:nowrap}
 :not(pre).pre-wrap{white-space:pre-wrap}
-:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
 pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
 pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
 pre>code{display:block}
@@ -123,7 +121,7 @@
 em em{font-style:normal}
 strong strong{font-weight:400}
 .keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
 .keyseq kbd:first-child{margin-left:0}
 .keyseq kbd:last-child{margin-right:0}
 .menuseq,.menuref{color:#000}
@@ -135,7 +133,7 @@
 b.button::before{content:"[";padding:0 3px 0 2px}
 b.button::after{content:"]";padding:0 2px 0 3px}
 p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
 #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
 #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
 #content{margin-top:1.25em}
@@ -143,7 +141,7 @@
 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
-#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
 #header .details span:first-child{margin-left:-.125em}
 #header .details span.email a{color:rgba(0,0,0,.85)}
 #header .details br{display:none}
@@ -177,11 +175,11 @@
 #toc.toc2>ul{font-size:.95em}
 #toc.toc2 ul ul{padding-left:1.25em}
 body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
 #content #toc>:first-child{margin-top:0}
 #content #toc>:last-child{margin-bottom:0}
 #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
 #content{margin-bottom:.625em}
 .sect1{padding-bottom:.625em}
 @media screen and (min-width:768px){#content{margin-bottom:1.25em}
@@ -194,29 +192,33 @@
 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
 details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+details{margin-left:1.25rem}
+details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
+details>summary::-webkit-details-marker{display:none}
+details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
+details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
+details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
 table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
 .admonitionblock>table td.icon{text-align:center;width:80px}
 .admonitionblock>table td.icon img{max-width:none}
 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
 .exampleblock>.content>:first-child{margin-top:0}
 .exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
 .sidebarblock>:first-child{margin-top:0}
 .sidebarblock>:last-child{margin-bottom:0}
 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
+.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
 @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
 @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
-.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
 .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
 .listingblock>.content{position:relative}
 .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
@@ -224,7 +226,7 @@
 .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
 .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
 .listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
 .listingblock pre.prettyprint{border-width:0}
 .prettyprint{background:#f7f7f8}
 pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
@@ -234,9 +236,8 @@
 table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
 table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
 table.linenotable td.code{padding-left:.75em}
-table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
-pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
-pre.pygments .lineno::before{content:"";margin-right:-.125em}
+table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+pre.pygments span.linenos{display:inline-block;margin-right:.75em}
 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
 .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
 .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
@@ -245,7 +246,7 @@
 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
 .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
 .verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
 .verseblock pre strong{font-weight:400}
 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
@@ -273,7 +274,7 @@
 table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
 table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
 table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
 th.halign-left,td.halign-left{text-align:left}
 th.halign-right,td.halign-right{text-align:right}
 th.halign-center,td.halign-center{text-align:center}
@@ -289,14 +290,15 @@
 ul li ol{margin-left:1.5em}
 dl dd{margin-left:1.125em}
 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
 ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
 ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
 ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+li>p:empty:only-child::before{content:"";display:inline-block}
+ul.checklist>li>p:first-child{margin-left:-1em}
+ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
+ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
 ul.inline>li{margin-left:1.25em}
 .unstyled dl dt{font-weight:400;font-style:normal}
 ol.arabic{list-style-type:decimal}
@@ -315,7 +317,7 @@
 .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
 .colist td:not([class]):first-child img{max-width:none}
 .colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
 .imageblock.left{margin:.25em .625em 1.25em 0}
 .imageblock.right{margin:.25em 0 1.25em .625em}
 .imageblock>.title{margin-bottom:0}
@@ -335,8 +337,6 @@
 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
 #footnotes .footnote:last-of-type{margin-bottom:0}
 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
 div.unbreakable{page-break-inside:avoid}
 .big{font-size:larger}
 .small{font-size:smaller}
@@ -383,7 +383,7 @@
 .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
 .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
 .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
 .conum[data-value] *{color:#fff!important}
 .conum[data-value]+b{display:none}
 .conum[data-value]::after{content:attr(data-value)}
@@ -391,19 +391,20 @@
 b.conum *{color:inherit!important}
 .conum:not([data-value]):empty{display:none}
 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
 p{margin-bottom:1.25rem}
 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
 .print-only{display:none!important}
 @page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+@media print{*{box-shadow:none!important;text-shadow:none!important}
 html{font-size:80%}
 a{color:inherit!important;text-decoration:underline!important}
 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
 a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]{border-bottom:1px dotted}
 abbr[title]::after{content:" (" attr(title) ")"}
 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
 thead{display:table-header-group}
@@ -427,7 +428,7 @@
 .print-only{display:block!important}
 .hide-for-print{display:none!important}
 .show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
 .sect1{padding:0!important}
 .sect1+.sect1{border:0}
 #footer{background:none}
@@ -2425,7 +2426,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -2723,7 +2724,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -7922,7 +7923,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -12938,7 +12939,7 @@
 </div>
 </div>
 <div class="paragraph">
-<p>From this demonstration we can see that Jetty started successfully as a Unix Service from the <code>/opt/jetty/jetty-distribution-9.4.44.v20210927</code> directory.</p>
+<p>From this demonstration we can see that Jetty started successfully as a Unix Service from the <code>/opt/jetty/jetty-distribution-9.4.45.v20220203</code> directory.</p>
 </div>
 <div class="paragraph">
 <p>This configuration works well but it is running Jetty as the root user.</p>
@@ -13203,7 +13204,7 @@
 </div>
 </div>
 <div class="paragraph">
-<p>You now have a configured <code>${jetty.base}</code> in <code>/opt/web/mybase</code> and a <code>${jetty.home}</code> in <code>/opt/jetty/jetty-distribution-9.4.44.v20210927</code>, along with the service level files necessary to start the service.</p>
+<p>You now have a configured <code>${jetty.base}</code> in <code>/opt/web/mybase</code> and a <code>${jetty.home}</code> in <code>/opt/jetty/jetty-distribution-9.4.45.v20220203</code>, along with the service level files necessary to start the service.</p>
 </div>
 <div class="paragraph">
 <p>Test the service to make sure it starts up and runs successfully.</p>
@@ -13312,7 +13313,7 @@
 <p>Download a copy of the ZIP distribution from the <a href="#jetty-downloading">Official Eclipse Download Site</a></p>
 </div>
 <div class="paragraph">
-<p>Extract the contents of the <code>jetty-distribution-9.4.44.v20210927</code> directory to <code>C:\opt\jetty</code></p>
+<p>Extract the contents of the <code>jetty-distribution-9.4.45.v20220203</code> directory to <code>C:\opt\jetty</code></p>
 </div>
 <div class="paragraph">
 <p>Once complete, the contents of the <code>C:\opt\jetty</code> directory should look like this:</p>
@@ -18406,7 +18407,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -22570,7 +22571,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -24297,7 +24298,7 @@
 <div class="paragraph">
 <p>Jetty is decomposed into many jars and dependencies to achieve a minimal footprint by selecting the minimal set of jars.
 Typically it is best to use something like <a href="#jetty-maven-helloworld">Maven</a> to manage jars, however this tutorial uses an aggregate Jar that contains all of the required Jetty classes in one Jar.
-You can manually download the aggregate <a href="https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/9.4.44.v20210927/jetty-all-9.4.44.v20210927-uber.jar"><code>jetty-all.jar</code></a> using <code>curl</code> or a browser.</p>
+You can manually download the aggregate <a href="https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/9.4.45.v20220203/jetty-all-9.4.45.v20220203-uber.jar"><code>jetty-all.jar</code></a> using <code>curl</code> or a browser.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -24351,7 +24352,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -24504,7 +24505,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -24583,7 +24584,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -24687,7 +24688,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -24799,7 +24800,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -24896,7 +24897,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -24984,7 +24985,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -25100,7 +25101,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -25158,7 +25159,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -25230,7 +25231,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -25387,7 +25388,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -25498,7 +25499,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -25767,7 +25768,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -25874,7 +25875,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -26015,7 +26016,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -26196,7 +26197,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -26376,7 +26377,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -26499,7 +26500,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -26600,7 +26601,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -31937,7 +31938,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -32139,7 +32140,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -32218,7 +32219,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -32289,7 +32290,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -32368,7 +32369,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -32433,7 +32434,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -32528,7 +32529,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -32605,7 +32606,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-java" data-lang="java">//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -39386,7 +39387,7 @@
 <div class="content">
 <pre>//
 //  ========================================================================
-//  Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
+//  Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others.
 //  ========================================================================
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -41021,8 +41022,8 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 9.4.44.v20210927<br>
-Last updated 2021-02-19 08:49:11 -0600
+Version 9.4.45.v20220203<br>
+Last updated 2022-01-27 16:04:15 +0100
 </div>
 </div>
 </body>