diff --git a/404.html b/404.html index 7187fe6..dc4002b 100644 --- a/404.html +++ b/404.html @@ -1,4 +1,4 @@ - 404 | ISPmail Guide - Skip to content
+ Skip to content

404

Page not found. Check the URL or try using the search bar.
+

404

Page not found. Check the URL or try using the search bar.
\ No newline at end of file + \ No newline at end of file diff --git a/_astro/splide_min.BRKXMWAJ.css b/_astro/156-overview.BRKXMWAJ.css similarity index 100% rename from _astro/splide_min.BRKXMWAJ.css rename to _astro/156-overview.BRKXMWAJ.css diff --git a/_astro/Code.Bv6B4xdu.css b/_astro/Code.Bv6B4xdu.css new file mode 100644 index 0000000..086976e --- /dev/null +++ b/_astro/Code.Bv6B4xdu.css @@ -0,0 +1 @@ +@layer starlight.components{svg:where(.astro-c6vsoqas){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}}@layer starlight.components{:root{--sl-badge-default-border: var(--sl-color-accent);--sl-badge-default-bg: var(--sl-color-accent-low);--sl-badge-default-text: #fff;--sl-badge-note-border: var(--sl-color-blue);--sl-badge-note-bg: var(--sl-color-blue-low);--sl-badge-note-text: #fff;--sl-badge-danger-border: var(--sl-color-red);--sl-badge-danger-bg: var(--sl-color-red-low);--sl-badge-danger-text: #fff;--sl-badge-success-border: var(--sl-color-green);--sl-badge-success-bg: var(--sl-color-green-low);--sl-badge-success-text: #fff;--sl-badge-caution-border: var(--sl-color-orange);--sl-badge-caution-bg: var(--sl-color-orange-low);--sl-badge-caution-text: #fff;--sl-badge-tip-border: var(--sl-color-purple);--sl-badge-tip-bg: var(--sl-color-purple-low);--sl-badge-tip-text: #fff}[data-theme=light]:root{--sl-badge-default-bg: var(--sl-color-accent-high);--sl-badge-note-bg: var(--sl-color-blue-high);--sl-badge-danger-bg: var(--sl-color-red-high);--sl-badge-success-bg: var(--sl-color-green-high);--sl-badge-caution-bg: var(--sl-color-orange-high);--sl-badge-tip-bg: var(--sl-color-purple-high)}.sl-badge:where(.astro-avdet4wd){display:inline-block;border:1px solid var(--sl-color-border-badge);border-radius:.25rem;font-family:var(--sl-font-system-mono);line-height:normal;color:var(--sl-color-text-badge);background-color:var(--sl-color-bg-badge);overflow-wrap:anywhere}.sidebar-content .sl-badge:where(.astro-avdet4wd){line-height:1;font-size:var(--sl-text-xs);padding:.125rem .375rem}.sidebar-content a[aria-current=page]>.sl-badge:where(.astro-avdet4wd){--sl-color-bg-badge: transparent;--sl-color-border-badge: currentColor;color:inherit}.default:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-default-bg);--sl-color-border-badge: var(--sl-badge-default-border);--sl-color-text-badge: var(--sl-badge-default-text)}.note:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-note-bg);--sl-color-border-badge: var(--sl-badge-note-border);--sl-color-text-badge: var(--sl-badge-note-text)}.danger:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-danger-bg);--sl-color-border-badge: var(--sl-badge-danger-border);--sl-color-text-badge: var(--sl-badge-danger-text)}.success:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-success-bg);--sl-color-border-badge: var(--sl-badge-success-border);--sl-color-text-badge: var(--sl-badge-success-text)}.tip:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-tip-bg);--sl-color-border-badge: var(--sl-badge-tip-border);--sl-color-text-badge: var(--sl-badge-tip-text)}.caution:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-caution-bg);--sl-color-border-badge: var(--sl-badge-caution-border);--sl-color-text-badge: var(--sl-badge-caution-text)}.small:where(.astro-avdet4wd){font-size:var(--sl-text-xs);padding:.125rem .25rem}.medium:where(.astro-avdet4wd){font-size:var(--sl-text-sm);padding:.175rem .35rem}.large:where(.astro-avdet4wd){font-size:var(--sl-text-base);padding:.225rem .45rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6) .sl-badge:where(.astro-avdet4wd){vertical-align:middle}}@layer starlight.components{.card:where(.astro-v5tidmuc){--sl-card-border: var(--sl-color-purple);--sl-card-bg: var(--sl-color-purple-low);border:1px solid var(--sl-color-gray-5);background-color:var(--sl-color-black);padding:clamp(1rem,calc(.125rem + 3vw),2.5rem);flex-direction:column;gap:clamp(.5rem,calc(.125rem + 1vw),1rem)}.card:where(.astro-v5tidmuc):nth-child(4n+1){--sl-card-border: var(--sl-color-orange);--sl-card-bg: var(--sl-color-orange-low)}.card:where(.astro-v5tidmuc):nth-child(4n+3){--sl-card-border: var(--sl-color-green);--sl-card-bg: var(--sl-color-green-low)}.card:where(.astro-v5tidmuc):nth-child(4n+4){--sl-card-border: var(--sl-color-red);--sl-card-bg: var(--sl-color-red-low)}.card:where(.astro-v5tidmuc):nth-child(4n+5){--sl-card-border: var(--sl-color-blue);--sl-card-bg: var(--sl-color-blue-low)}.title:where(.astro-v5tidmuc){font-weight:600;font-size:var(--sl-text-h4);color:var(--sl-color-white);line-height:var(--sl-line-height-headings);gap:1rem;align-items:center}.card:where(.astro-v5tidmuc) .icon:where(.astro-v5tidmuc){border:1px solid var(--sl-card-border);background-color:var(--sl-card-bg);padding:.2em;border-radius:.25rem;flex-shrink:0}.card:where(.astro-v5tidmuc) .body:where(.astro-v5tidmuc){margin:0;font-size:clamp(var(--sl-text-sm),calc(.5rem + 1vw),var(--sl-text-body))}}@layer starlight.components{.card-grid:where(.astro-zntqmydn){display:grid;grid-template-columns:100%;gap:1rem}.card-grid:where(.astro-zntqmydn)>*{margin-top:0!important}@media(min-width:50rem){.card-grid:where(.astro-zntqmydn){grid-template-columns:1fr 1fr;gap:1.5rem}.stagger:where(.astro-zntqmydn){--stagger-height: 5rem;padding-bottom:var(--stagger-height)}.stagger:where(.astro-zntqmydn)>*:nth-child(2n){transform:translateY(var(--stagger-height))}}}@layer starlight.components{.sl-steps{--bullet-size: calc(var(--sl-line-height) * 1rem);--bullet-margin: .375rem;list-style:none;counter-reset:steps-counter var(--sl-steps-start, 0);padding-inline-start:0}.sl-steps>li{counter-increment:steps-counter;position:relative;padding-inline-start:calc(var(--bullet-size) + 1rem);padding-bottom:1px;min-height:calc(var(--bullet-size) + var(--bullet-margin))}.sl-steps>li+li{margin-top:0}.sl-steps>li:before{content:counter(steps-counter);position:absolute;top:0;inset-inline-start:0;width:var(--bullet-size);height:var(--bullet-size);line-height:var(--bullet-size);font-size:var(--sl-text-xs);font-weight:600;text-align:center;color:var(--sl-color-white);background-color:var(--sl-color-gray-6);border-radius:99rem;box-shadow:inset 0 0 0 1px var(--sl-color-gray-5)}.sl-steps>li:after{--guide-width: 1px;content:"";position:absolute;top:calc(var(--bullet-size) + var(--bullet-margin));bottom:var(--bullet-margin);inset-inline-start:calc((var(--bullet-size) - var(--guide-width)) / 2);width:var(--guide-width);background-color:var(--sl-color-hairline-light)}}@layer starlight.content{.sl-steps>li>:first-child{--lh: calc(1em * var(--sl-line-height));--shift-y: calc(.5 * (var(--bullet-size) - var(--lh)));transform:translateY(var(--shift-y));margin-bottom:var(--shift-y)}.sl-steps>li>:first-child:where(h1,h2,h3,h4,h5,h6){--lh: calc(1em * var(--sl-line-height-headings))}@supports (--prop: 1lh){.sl-steps>li>:first-child{--lh: 1lh}}}@layer starlight.components{starlight-file-tree:where(.astro-p67cqifm){--x-space: 1.5rem;--y-space: .125rem;--y-pad: 0;display:block;border:1px solid var(--sl-color-gray-5);padding:1rem;background-color:var(--sl-color-gray-6);font-size:var(--sl-text-xs);font-family:var(--__sl-font-mono);overflow-x:auto}starlight-file-tree:where(.astro-p67cqifm) .directory>details{border:0;padding:0;padding-inline-start:var(--x-space);background:transparent}starlight-file-tree:where(.astro-p67cqifm) .directory>details>summary{margin-inline-start:calc(-1 * var(--x-space));border:0;padding:var(--y-pad) .625rem;font-weight:400;color:var(--sl-color-white);max-width:100%}starlight-file-tree:where(.astro-p67cqifm) .directory>details>summary::marker,starlight-file-tree:where(.astro-p67cqifm) .directory>details>summary::-webkit-details-marker{color:var(--sl-color-gray-3)}starlight-file-tree:where(.astro-p67cqifm) .directory>details>summary:hover,starlight-file-tree:where(.astro-p67cqifm) .directory>details>summary:hover .tree-icon{cursor:pointer;color:var(--sl-color-text-accent);fill:currentColor}starlight-file-tree:where(.astro-p67cqifm) .directory>details>summary:hover~ul{border-color:var(--sl-color-gray-4)}starlight-file-tree:where(.astro-p67cqifm) .directory>details>summary:hover .highlight .tree-icon{color:var(--sl-color-text-invert);fill:currentColor}starlight-file-tree:where(.astro-p67cqifm) ul{margin-inline-start:.5rem;border-inline-start:1px solid var(--sl-color-gray-5);padding:0;padding-inline-start:.125rem;list-style:none}starlight-file-tree:where(.astro-p67cqifm)>ul{margin:0;border:0;padding:0}starlight-file-tree:where(.astro-p67cqifm) li{margin:var(--y-space) 0;padding:var(--y-pad) 0}starlight-file-tree:where(.astro-p67cqifm) .file{margin-inline-start:calc(var(--x-space) - .125rem);color:var(--sl-color-white)}starlight-file-tree:where(.astro-p67cqifm) .tree-entry{display:inline-flex;align-items:flex-start;flex-wrap:wrap;max-width:calc(100% - 1rem)}@media(min-width:30em){starlight-file-tree:where(.astro-p67cqifm) .tree-entry{flex-wrap:nowrap}}starlight-file-tree:where(.astro-p67cqifm) .tree-entry>:first-child{flex-shrink:0}starlight-file-tree:where(.astro-p67cqifm) .empty{color:var(--sl-color-gray-3);padding-inline-start:.375rem}starlight-file-tree:where(.astro-p67cqifm) .comment{color:var(--sl-color-gray-3);padding-inline-start:1.625rem;max-width:24rem;min-width:12rem}starlight-file-tree:where(.astro-p67cqifm) .highlight{display:inline-block;border-radius:.25rem;padding-inline-end:.5rem;color:var(--sl-color-text-invert);background-color:var(--sl-color-text-accent)}starlight-file-tree:where(.astro-p67cqifm) svg{display:inline;fill:var(--sl-color-gray-3);vertical-align:middle;margin-inline:.25rem .375rem;width:.875rem;height:.875rem}starlight-file-tree:where(.astro-p67cqifm) .highlight svg.tree-icon{fill:currentColor}}@layer starlight.components{.sl-link-button:where(.astro-xwgiixxa){align-items:center;border:1px solid transparent;border-radius:999rem;display:inline-flex;font-size:var(--sl-text-sm);gap:.5em;line-height:1.1875;outline-offset:.25rem;padding:.4375rem 1.125rem;text-decoration:none}.sl-link-button:where(.astro-xwgiixxa).primary{background:var(--sl-color-text-accent);border-color:var(--sl-color-text-accent);color:var(--sl-color-black)}.sl-link-button:where(.astro-xwgiixxa).primary:hover{color:var(--sl-color-black)}.sl-link-button:where(.astro-xwgiixxa).secondary{border-color:inherit;color:var(--sl-color-white)}.sl-link-button:where(.astro-xwgiixxa).minimal{color:var(--sl-color-white);padding-inline:0}.sl-link-button:where(.astro-xwgiixxa) svg{flex-shrink:0}@media(min-width:50rem){.sl-link-button:where(.astro-xwgiixxa){font-size:var(--sl-text-base);padding:.9375rem 1.25rem}}.sl-markdown-content .sl-link-button:where(.astro-xwgiixxa){margin-inline-end:1rem}.sl-markdown-content .sl-link-button:where(.astro-xwgiixxa):not(:where(p *)){margin-block:1rem}} diff --git a/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js b/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js similarity index 90% rename from _astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js rename to _astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js index c628d52..b2fd297 100644 --- a/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js +++ b/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js @@ -1 +1 @@ -import{S as r}from"./TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js";class c extends r{set current(e){super.current=e;const t=this.querySelector(".display-current");t&&(t.textContent=e.textContent)}constructor(){super();const e=this.querySelector("details");if(!e)return;const t=()=>{e.open=!1};e.querySelectorAll("a").forEach(s=>{s.addEventListener("click",t)}),window.addEventListener("click",s=>{e.contains(s.target)||t()}),window.addEventListener("keydown",s=>{if(s.key==="Escape"&&e.open){const o=e.contains(document.activeElement);if(t(),o){const n=e.querySelector("summary");n&&n.focus()}}})}}customElements.define("mobile-starlight-toc",c); +import{S as r}from"./TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js";class c extends r{set current(e){super.current=e;const t=this.querySelector(".display-current");t&&(t.textContent=e.textContent)}constructor(){super();const e=this.querySelector("details");if(!e)return;const t=()=>{e.open=!1};e.querySelectorAll("a").forEach(s=>{s.addEventListener("click",t)}),window.addEventListener("click",s=>{e.contains(s.target)||t()}),window.addEventListener("keydown",s=>{if(s.key==="Escape"&&e.open){const o=e.contains(document.activeElement);if(t(),o){const n=e.querySelector("summary");n&&n.focus()}}})}}customElements.define("mobile-starlight-toc",c); diff --git a/_astro/Search.astro_astro_type_script_index_0_lang.BmQ12qYc.js b/_astro/Search.astro_astro_type_script_index_0_lang.BmQ12qYc.js new file mode 100644 index 0000000..bdfcb33 --- /dev/null +++ b/_astro/Search.astro_astro_type_script_index_0_lang.BmQ12qYc.js @@ -0,0 +1 @@ +const y=(function(){const o=typeof document<"u"&&document.createElement("link").relList;return o&&o.supports&&o.supports("modulepreload")?"modulepreload":"preload"})(),S=function(p){return"/"+p},g={},w=function(o,c,d){let h=Promise.resolve();if(c&&c.length>0){let r=function(n){return Promise.all(n.map(i=>Promise.resolve(i).then(s=>({status:"fulfilled",value:s}),s=>({status:"rejected",reason:s}))))};document.getElementsByTagName("link");const t=document.querySelector("meta[property=csp-nonce]"),m=t?.nonce||t?.getAttribute("nonce");h=r(c.map(n=>{if(n=S(n),n in g)return;g[n]=!0;const i=n.endsWith(".css"),s=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${n}"]${s}`))return;const e=document.createElement("link");if(e.rel=i?"stylesheet":y,i||(e.as="script"),e.crossOrigin="",e.href=n,m&&e.setAttribute("nonce",m),document.head.appendChild(e),i)return new Promise((l,a)=>{e.addEventListener("load",l),e.addEventListener("error",()=>a(Error(`Unable to preload CSS for ${n}`)))})}))}function u(r){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=r,window.dispatchEvent(t),!t.defaultPrevented)throw r}return h.then(r=>{for(const t of r||[])t.status==="rejected"&&u(t.reason);return o().catch(u)})},E={ranking:{pageLength:.1,termFrequency:.1,termSaturation:2,termSimilarity:9,diacriticSimilarity:.8}};class v extends HTMLElement{constructor(){super();const o=this.querySelector("button[data-open-modal]"),c=this.querySelector("button[data-close-modal]"),d=this.querySelector("dialog"),h=this.querySelector(".dialog-frame"),u=e=>{("href"in(e.target||{})||document.body.contains(e.target)&&!h.contains(e.target))&&t()},r=e=>{d.showModal(),document.body.toggleAttribute("data-search-modal-open",!0),this.querySelector("input")?.focus(),e?.stopPropagation(),window.addEventListener("click",u)},t=()=>d.close();o.addEventListener("click",r),o.disabled=!1,c.addEventListener("click",t),d.addEventListener("close",()=>{document.body.toggleAttribute("data-search-modal-open",!1),window.removeEventListener("click",u)}),window.addEventListener("keydown",e=>{(e.metaKey===!0||e.ctrlKey===!0)&&e.key==="k"&&(d.open?t():r(),e.preventDefault())});let m={};try{m=JSON.parse(this.dataset.translations||"{}")}catch{}const s=this.dataset.stripTrailingSlash!==void 0?e=>e.replace(/(.)\/(#.*)?$/,"$1$2"):e=>e;window.addEventListener("DOMContentLoaded",()=>{(window.requestIdleCallback||(l=>setTimeout(l,1)))(async()=>{const{PagefindUI:l}=await w(async()=>{const{PagefindUI:a}=await import("./ui-core.DI63gtsE.js");return{PagefindUI:a}},[]);new l({...E,element:"#starlight__search",baseUrl:"/",bundlePath:"/".replace(/\/$/,"")+"/pagefind/",showImages:!1,translations:m,showSubResults:!0,processResult:a=>{a.url=s(a.url),a.sub_results=a.sub_results.map(f=>(f.url=s(f.url),f))}})})})}}customElements.define("site-search",v);export{w as _}; diff --git a/_astro/Search.astro_astro_type_script_index_0_lang.Ucakfv07.js b/_astro/Search.astro_astro_type_script_index_0_lang.Ucakfv07.js deleted file mode 100644 index b6c1dac..0000000 --- a/_astro/Search.astro_astro_type_script_index_0_lang.Ucakfv07.js +++ /dev/null @@ -1 +0,0 @@ -const y="modulepreload",w=function(f){return"/"+f},g={},S=function(m,l,c){let h=Promise.resolve();if(l&&l.length>0){let o=function(n){return Promise.all(n.map(a=>Promise.resolve(a).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))};document.getElementsByTagName("link");const t=document.querySelector("meta[property=csp-nonce]"),u=t?.nonce||t?.getAttribute("nonce");h=o(l.map(n=>{if(n=w(n),n in g)return;g[n]=!0;const a=n.endsWith(".css"),r=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${n}"]${r}`))return;const e=document.createElement("link");if(e.rel=a?"stylesheet":y,a||(e.as="script"),e.crossOrigin="",e.href=n,u&&e.setAttribute("nonce",u),document.head.appendChild(e),a)return new Promise((i,s)=>{e.addEventListener("load",i),e.addEventListener("error",()=>s(Error(`Unable to preload CSS for ${n}`)))})}))}function d(o){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=o,window.dispatchEvent(t),!t.defaultPrevented)throw o}return h.then(o=>{for(const t of o||[])t.status==="rejected"&&d(t.reason);return m().catch(d)})},E={ranking:{pageLength:.1,termFrequency:.1,termSaturation:2,termSimilarity:9}};class v extends HTMLElement{constructor(){super();const m=this.querySelector("button[data-open-modal]"),l=this.querySelector("button[data-close-modal]"),c=this.querySelector("dialog"),h=this.querySelector(".dialog-frame"),d=e=>{("href"in(e.target||{})||document.body.contains(e.target)&&!h.contains(e.target))&&t()},o=e=>{c.showModal(),document.body.toggleAttribute("data-search-modal-open",!0),this.querySelector("input")?.focus(),e?.stopPropagation(),window.addEventListener("click",d)},t=()=>c.close();m.addEventListener("click",o),m.disabled=!1,l.addEventListener("click",t),c.addEventListener("close",()=>{document.body.toggleAttribute("data-search-modal-open",!1),window.removeEventListener("click",d)}),window.addEventListener("keydown",e=>{(e.metaKey===!0||e.ctrlKey===!0)&&e.key==="k"&&(c.open?t():o(),e.preventDefault())});let u={};try{u=JSON.parse(this.dataset.translations||"{}")}catch{}const r=this.dataset.stripTrailingSlash!==void 0?e=>e.replace(/(.)\/(#.*)?$/,"$1$2"):e=>e;window.addEventListener("DOMContentLoaded",()=>{(window.requestIdleCallback||(i=>setTimeout(i,1)))(async()=>{const{PagefindUI:i}=await S(async()=>{const{PagefindUI:s}=await import("./ui-core.9O_Wzz8o.js");return{PagefindUI:s}},[]);new i({...E,element:"#starlight__search",baseUrl:"/",bundlePath:"/".replace(/\/$/,"")+"/pagefind/",showImages:!1,translations:u,showSubResults:!0,processResult:s=>{s.url=r(s.url),s.sub_results=s.sub_results.map(p=>(p.url=r(p.url),p))}})})})}}customElements.define("site-search",v);export{S as _}; diff --git a/_astro/Splide.astro_astro_type_script_index_0_lang.BhdDGSOf.js b/_astro/Splide.astro_astro_type_script_index_0_lang.BhdDGSOf.js deleted file mode 100644 index c3cde34..0000000 --- a/_astro/Splide.astro_astro_type_script_index_0_lang.BhdDGSOf.js +++ /dev/null @@ -1,6 +0,0 @@ -function Jn(e,n){for(var t=0;t-1}function at(e,n){return e.push.apply(e,Ze(n)),e}function fe(e,n,t){e&&ne(n,function(r){r&&e.classList[t?"add":"remove"](r)})}function oe(e,n){fe(e,me(n)?n.split(" "):n,!0)}function Je(e,n){ne(n,e.appendChild.bind(e))}function Ft(e,n){ne(e,function(t){var r=(n||t).parentNode;r&&r.insertBefore(t,n)})}function We(e,n){return hn(e)&&(e.msMatchesSelector||e.matches).call(e,n)}function mn(e,n){var t=e?_e(e.children):[];return n?t.filter(function(r){return We(r,n)}):t}function Qe(e,n){return n?mn(e,n)[0]:e.firstElementChild}var He=Object.keys;function Ie(e,n,t){return e&&(t?He(e).reverse():He(e)).forEach(function(r){r!=="__proto__"&&n(e[r],r)}),e}function Ye(e){return _e(arguments,1).forEach(function(n){Ie(n,function(t,r){e[r]=n[r]})}),e}function he(e){return _e(arguments,1).forEach(function(n){Ie(n,function(t,r){Mt(t)?e[r]=t.slice():Be(t)?e[r]=he({},Be(e[r])?e[r]:{},t):e[r]=t})}),e}function nn(e,n){ne(n||He(e),function(t){delete e[t]})}function ue(e,n){ne(e,function(t){ne(n,function(r){t&&t.removeAttribute(r)})})}function x(e,n,t){Be(n)?Ie(n,function(r,a){x(e,a,r)}):ne(e,function(r){Vt(t)||t===""?ue(r,n):r.setAttribute(n,String(t))})}function Pe(e,n,t){var r=document.createElement(e);return n&&(me(n)?oe(r,n):x(r,n)),t&&Je(t,r),r}function re(e,n,t){if(je(t))return getComputedStyle(e)[n];Vt(t)||(e.style[n]=""+t)}function Xe(e,n){re(e,"display",n)}function An(e){e.setActive&&e.setActive()||e.focus({preventScroll:!0})}function ie(e,n){return e.getAttribute(n)}function rn(e,n){return e&&e.classList.contains(n)}function ee(e){return e.getBoundingClientRect()}function Ne(e){ne(e,function(n){n&&n.parentNode&&n.parentNode.removeChild(n)})}function _n(e){return Qe(new DOMParser().parseFromString(e,"text/html").body)}function ce(e,n){e.preventDefault(),n&&(e.stopPropagation(),e.stopImmediatePropagation())}function yn(e,n){return e&&e.querySelector(n)}function kt(e,n){return n?_e(e.querySelectorAll(n)):[]}function ve(e,n){fe(e,n,!1)}function Ot(e){return e.timeStamp}function Le(e){return me(e)?e:e?e+"px":""}var et="splide",zt="data-"+et;function Ge(e,n){if(!e)throw new Error("["+et+"] "+(n||""))}var Ae=Math.min,ct=Math.max,ft=Math.floor,Ke=Math.ceil,Q=Math.abs;function Sn(e,n,t){return Q(e-n)0)-+(e<0)}function Ct(e,n){return ne(n,function(t){e=e.replace("%s",""+t)}),e}function Gt(e){return e<10?"0"+e:""+e}var an={};function nr(e){return""+e+Gt(an[e]=(an[e]||0)+1)}function Tn(){var e=[];function n(i,s,u,f){a(i,s,function(o,h,d){var g="addEventListener"in o,c=g?o.removeEventListener.bind(o,h,u,f):o.removeListener.bind(o,u);g?o.addEventListener(h,u,f):o.addListener(u),e.push([o,h,d,u,c])})}function t(i,s,u){a(i,s,function(f,o,h){e=e.filter(function(d){return d[0]===f&&d[1]===o&&d[2]===h&&(!u||d[3]===u)?(d[4](),!1):!0})})}function r(i,s,u){var f,o=!0;return typeof CustomEvent=="function"?f=new CustomEvent(s,{bubbles:o,detail:u}):(f=document.createEvent("CustomEvent"),f.initCustomEvent(s,o,!1,u)),i.dispatchEvent(f),f}function a(i,s,u){ne(i,function(f){f&&ne(s,function(o){o.split(" ").forEach(function(h){var d=h.split(".");u(f,d[0],d[1])})})})}function l(){e.forEach(function(i){i[4]()}),de(e)}return{bind:n,unbind:t,dispatch:r,destroy:l}}var ye="mounted",Pt="ready",ge="move",Fe="moved",Ut="click",Ln="active",In="inactive",Nn="visible",Rn="hidden",K="refresh",Z="updated",Me="resize",dt="resized",bn="drag",On="dragging",Dn="dragged",gt="scroll",be="scrolled",rr="overflow",Bt="destroy",Cn="arrows:mounted",Pn="arrows:updated",wn="pagination:mounted",pn="pagination:updated",Wt="navigation:mounted",Ht="autoplay:play",Mn="autoplay:playing",Yt="autoplay:pause",Xt="lazyload:loaded",Vn="sk",xn="sh",vt="ei";function H(e){var n=e?e.event.bus:document.createDocumentFragment(),t=Tn();function r(l,i){t.bind(n,Ze(l).join(" "),function(s){i.apply(i,Mt(s.detail)?s.detail:[])})}function a(l){t.dispatch(n,l,_e(arguments,1))}return e&&e.event.on(Bt,t.destroy),Ye(t,{bus:n,on:r,off:U(t.unbind,n),emit:a})}function Et(e,n,t,r){var a=Date.now,l,i=0,s,u=!0,f=0;function o(){if(!u){if(i=e?Ae((a()-l)/e,1):1,t&&t(i),i>=1&&(n(),l=a(),r&&++f>=r))return d();s=tn(o)}}function h(A){A||c(),l=a()-(A?i*e:0),u=!1,s=tn(o)}function d(){u=!0}function g(){l=a(),i=0,t&&t(i)}function c(){s&&cancelAnimationFrame(s),i=0,s=0,u=!0}function v(A){e=A}function _(){return u}return{start:h,rewind:g,pause:d,cancel:c,set:v,isPaused:_}}function ir(e){var n=e;function t(a){n=a}function r(a){return xt(Ze(a),n)}return{set:t,is:r}}function ar(e,n){var t=Et(0,e,null,1);return function(){t.isPaused()&&t.start()}}function or(e,n,t){var r=e.state,a=t.breakpoints||{},l=t.reducedMotion||{},i=Tn(),s=[];function u(){var c=t.mediaQuery==="min";He(a).sort(function(v,_){return c?+v-+_:+_-+v}).forEach(function(v){o(a[v],"("+(c?"min":"max")+"-width:"+v+"px)")}),o(l,en),h()}function f(c){c&&i.destroy()}function o(c,v){var _=matchMedia(v);i.bind(_,"change",h),s.push([c,_])}function h(){var c=r.is(st),v=t.direction,_=s.reduce(function(A,m){return he(A,m[1].matches?m[0]:{})},{});nn(t),g(_),t.destroy?e.destroy(t.destroy==="completely"):c?(f(!0),e.mount()):v!==t.direction&&e.refresh()}function d(c){matchMedia(en).matches&&(c?he(t,l):nn(t,He(l)))}function g(c,v,_){he(t,c),v&&he(Object.getPrototypeOf(t),c),(_||!r.is(Ce))&&e.emit(Z,t)}return{setup:u,destroy:f,reduce:d,set:g}}var ht="Arrow",mt=ht+"Left",At=ht+"Right",Fn=ht+"Up",kn=ht+"Down",on="rtl",_t="ttb",Lt={width:["height"],left:["top","right"],right:["bottom","left"],x:["y"],X:["Y"],Y:["X"],ArrowLeft:[Fn,At],ArrowRight:[kn,mt]};function ur(e,n,t){function r(l,i,s){s=s||t.direction;var u=s===on&&!i?1:s===_t?0:-1;return Lt[l]&&Lt[l][u]||l.replace(/width|left|right/i,function(f,o){var h=Lt[f.toLowerCase()][u]||f;return o>0?h.charAt(0).toUpperCase()+h.slice(1):h})}function a(l){return l*(t.direction===on?1:-1)}return{resolve:r,orient:a}}var le="role",we="tabindex",sr="disabled",ae="aria-",tt=ae+"controls",zn=ae+"current",un=ae+"selected",te=ae+"label",Kt=ae+"labelledby",Gn=ae+"hidden",$t=ae+"orientation",$e=ae+"roledescription",sn=ae+"live",cn=ae+"busy",fn=ae+"atomic",qt=[le,we,sr,tt,zn,te,Kt,Gn,$t,$e],se=et+"__",Se="is-",It=et,vn=se+"track",cr=se+"list",yt=se+"slide",Un=yt+"--clone",fr=yt+"__container",jt=se+"arrows",St=se+"arrow",Bn=St+"--prev",Wn=St+"--next",Tt=se+"pagination",Hn=Tt+"__page",vr=se+"progress",lr=vr+"__bar",dr=se+"toggle",gr=se+"spinner",Er=se+"sr",hr=Se+"initialized",Re=Se+"active",Yn=Se+"prev",Xn=Se+"next",wt=Se+"visible",pt=Se+"loading",Kn=Se+"focus-in",$n=Se+"overflow",mr=[Re,wt,Yn,Xn,pt,Kn,$n],Ar={slide:yt,clone:Un,arrows:jt,arrow:St,prev:Bn,next:Wn,pagination:Tt,page:Hn,spinner:gr};function _r(e,n){if(En(e.closest))return e.closest(n);for(var t=e;t&&t.nodeType===1&&!We(t,n);)t=t.parentElement;return t}var yr=5,ln=200,qn="touchstart mousedown",Nt="touchmove mousemove",Rt="touchend touchcancel mouseup click";function Sr(e,n,t){var r=H(e),a=r.on,l=r.bind,i=e.root,s=t.i18n,u={},f=[],o=[],h=[],d,g,c;function v(){E(),w(),m()}function _(){a(K,A),a(K,v),a(Z,m),l(document,qn+" keydown",function(S){c=S.type==="keydown"},{capture:!0}),l(i,"focusin",function(){fe(i,Kn,!!c)})}function A(S){var O=qt.concat("style");de(f),ve(i,o),ve(d,h),ue([d,g],O),ue(i,S?O:["style",$e])}function m(){ve(i,o),ve(d,h),o=M(It),h=M(vn),oe(i,o),oe(d,h),x(i,te,t.label),x(i,Kt,t.labelledby)}function E(){d=b("."+vn),g=Qe(d,"."+cr),Ge(d&&g,"A track/list element is missing."),at(f,mn(g,"."+yt+":not(."+Un+")")),Ie({arrows:jt,pagination:Tt,prev:Bn,next:Wn,bar:lr,toggle:dr},function(S,O){u[O]=b("."+S)}),Ye(u,{root:i,track:d,list:g,slides:f})}function w(){var S=i.id||nr(et),O=t.role;i.id=S,d.id=d.id||S+"-track",g.id=g.id||S+"-list",!ie(i,le)&&i.tagName!=="SECTION"&&O&&x(i,le,O),x(i,$e,s.carousel),x(g,le,"presentation")}function b(S){var O=yn(i,S);return O&&_r(O,"."+It)===i?O:void 0}function M(S){return[S+"--"+t.type,S+"--"+t.direction,t.drag&&S+"--draggable",t.isNavigation&&S+"--nav",S===It&&Re]}return Ye(u,{setup:v,mount:_,destroy:A})}var Ve="slide",ke="loop",nt="fade";function Tr(e,n,t,r){var a=H(e),l=a.on,i=a.emit,s=a.bind,u=e.Components,f=e.root,o=e.options,h=o.isNavigation,d=o.updateOnMove,g=o.i18n,c=o.pagination,v=o.slideFocus,_=u.Direction.resolve,A=ie(r,"style"),m=ie(r,te),E=t>-1,w=Qe(r,"."+fr),b;function M(){E||(r.id=f.id+"-slide"+Gt(n+1),x(r,le,c?"tabpanel":"group"),x(r,$e,g.slide),x(r,te,m||Ct(g.slideLabel,[n+1,e.length]))),S()}function S(){s(r,"click",U(i,Ut,p)),s(r,"keydown",U(i,Vn,p)),l([Fe,xn,be],L),l(Wt,k),d&&l(ge,P)}function O(){b=!0,a.destroy(),ve(r,mr),ue(r,qt),x(r,"style",A),x(r,te,m||"")}function k(){var C=e.splides.map(function(T){var D=T.splide.Components.Slides.getAt(n);return D?D.slide.id:""}).join(" ");x(r,te,Ct(g.slideX,(E?t:n)+1)),x(r,tt,C),x(r,le,v?"button":""),v&&ue(r,$e)}function P(){b||L()}function L(){if(!b){var C=e.index;I(),N(),fe(r,Yn,n===C-1),fe(r,Xn,n===C+1)}}function I(){var C=F();C!==rn(r,Re)&&(fe(r,Re,C),x(r,zn,h&&C||""),i(C?Ln:In,p))}function N(){var C=Y(),T=!C&&(!F()||E);if(e.state.is([xe,qe])||x(r,Gn,T||""),x(kt(r,o.focusableNodes||""),we,T?-1:""),v&&x(r,we,T?-1:0),C!==rn(r,wt)&&(fe(r,wt,C),i(C?Nn:Rn,p)),!C&&document.activeElement===r){var D=u.Slides.getAt(e.index);D&&An(D.slide)}}function V(C,T,D){re(D&&w||r,C,T)}function F(){var C=e.index;return C===n||o.cloneStatus&&C===t}function Y(){if(e.is(nt))return F();var C=ee(u.Elements.track),T=ee(r),D=_("left",!0),z=_("right",!0);return ft(C[D])<=Ke(T[D])&&ft(T[z])<=Ke(C[z])}function W(C,T){var D=Q(C-n);return!E&&(o.rewind||e.is(ke))&&(D=Ae(D,e.length-D)),D<=T}var p={index:n,slideIndex:t,slide:r,container:w,isClone:E,mount:M,destroy:O,update:L,style:V,isWithin:W};return p}function Lr(e,n,t){var r=H(e),a=r.on,l=r.emit,i=r.bind,s=n.Elements,u=s.slides,f=s.list,o=[];function h(){d(),a(K,g),a(K,d)}function d(){u.forEach(function(L,I){v(L,I,-1)})}function g(){b(function(L){L.destroy()}),de(o)}function c(){b(function(L){L.update()})}function v(L,I,N){var V=Tr(e,I,N,L);V.mount(),o.push(V),o.sort(function(F,Y){return F.index-Y.index})}function _(L){return L?M(function(I){return!I.isClone}):o}function A(L){var I=n.Controller,N=I.toIndex(L),V=I.hasFocus()?1:t.perPage;return M(function(F){return ot(F.index,N,N+V-1)})}function m(L){return M(L)[0]}function E(L,I){ne(L,function(N){if(me(N)&&(N=_n(N)),hn(N)){var V=u[I];V?Ft(N,V):Je(f,N),oe(N,t.classes.slide),O(N,U(l,Me))}}),l(K)}function w(L){Ne(M(L).map(function(I){return I.slide})),l(K)}function b(L,I){_(I).forEach(L)}function M(L){return o.filter(En(L)?L:function(I){return me(L)?We(I.slide,L):xt(Ze(L),I.index)})}function S(L,I,N){b(function(V){V.style(L,I,N)})}function O(L,I){var N=kt(L,"img"),V=N.length;V?N.forEach(function(F){i(F,"load error",function(){--V||I()})}):I()}function k(L){return L?u.length:o.length}function P(){return o.length>t.perPage}return{mount:h,destroy:g,update:c,register:v,get:_,getIn:A,getAt:m,add:E,remove:w,forEach:b,filter:M,style:S,getLength:k,isEnough:P}}function Ir(e,n,t){var r=H(e),a=r.on,l=r.bind,i=r.emit,s=n.Slides,u=n.Direction.resolve,f=n.Elements,o=f.root,h=f.track,d=f.list,g=s.getAt,c=s.style,v,_,A;function m(){E(),l(window,"resize load",ar(U(i,Me))),a([Z,K],E),a(Me,w)}function E(){v=t.direction===_t,re(o,"maxWidth",Le(t.width)),re(h,u("paddingLeft"),b(!1)),re(h,u("paddingRight"),b(!0)),w(!0)}function w(p){var C=ee(o);(p||_.width!==C.width||_.height!==C.height)&&(re(h,"height",M()),c(u("marginRight"),Le(t.gap)),c("width",O()),c("height",k(),!0),_=C,i(dt),A!==(A=W())&&(fe(o,$n,A),i(rr,A)))}function b(p){var C=t.padding,T=u(p?"right":"left");return C&&Le(C[T]||(Be(C)?0:C))||"0px"}function M(){var p="";return v&&(p=S(),Ge(p,"height or heightRatio is missing."),p="calc("+p+" - "+b(!1)+" - "+b(!0)+")"),p}function S(){return Le(t.height||ee(d).width*t.heightRatio)}function O(){return t.autoWidth?null:Le(t.fixedWidth)||(v?"":P())}function k(){return Le(t.fixedHeight)||(v?t.autoHeight?null:P():S())}function P(){var p=Le(t.gap);return"calc((100%"+(p&&" + "+p)+")/"+(t.perPage||1)+(p&&" - "+p)+")"}function L(){return ee(d)[u("width")]}function I(p,C){var T=g(p||0);return T?ee(T.slide)[u("width")]+(C?0:F()):0}function N(p,C){var T=g(p);if(T){var D=ee(T.slide)[u("right")],z=ee(d)[u("left")];return Q(D-z)+(C?0:F())}return 0}function V(p){return N(e.length-1)-N(0)+I(0,p)}function F(){var p=g(0);return p&&parseFloat(re(p.slide,u("marginRight")))||0}function Y(p){return parseFloat(re(h,u("padding"+(p?"Right":"Left"))))||0}function W(){return e.is(nt)||V(!0)>L()}return{mount:m,resize:w,listSize:L,slideSize:I,sliderSize:V,totalSize:N,getPadding:Y,isOverflow:W}}var Nr=2;function Rr(e,n,t){var r=H(e),a=r.on,l=n.Elements,i=n.Slides,s=n.Direction.resolve,u=[],f;function o(){a(K,h),a([Z,Me],g),(f=_())&&(c(f),n.Layout.resize(!0))}function h(){d(),o()}function d(){Ne(u),de(u),r.destroy()}function g(){var A=_();f!==A&&(fz)&&(L(),O(P(V(),T>z),!0)),i(xe),l(ge,D,z,T),E.start(D,function(){i(pe),l(Fe,D,z,T),q&&q()})}function S(T){O(N(T,!0))}function O(T,D){if(!e.is(nt)){var z=D?T:k(T);re(A,"transform","translate"+c("X")+"("+z+"px)"),T!==z&&l(xn)}}function k(T){if(e.is(ke)){var D=I(T),z=D>n.Controller.getEnd(),q=D<0;(q||z)&&(T=P(T,z))}return T}function P(T,D){var z=T-W(D),q=d();return T-=v(q*(Ke(Q(z)/q)||1))*(D?1:-1),T}function L(){O(V(),!0),E.cancel()}function I(T){for(var D=n.Slides.get(),z=0,q=1/0,$=0;$=0:D<=A[c("scrollWidth")]-ee(m)[c("width")]}function C(T,D){D=je(D)?V():D;var z=T!==!0&&v(D)v(W(!0));return z||q}return{mount:w,move:M,jump:S,translate:O,shift:P,cancel:L,toIndex:I,toPosition:N,getPosition:V,getLimit:W,exceededLimit:C,reposition:b}}function Or(e,n,t){var r=H(e),a=r.on,l=r.emit,i=n.Move,s=i.getPosition,u=i.getLimit,f=i.toPosition,o=n.Slides,h=o.isEnough,d=o.getLength,g=t.omitEnd,c=e.is(ke),v=e.is(Ve),_=U(V,!1),A=U(V,!0),m=t.start||0,E,w=m,b,M,S;function O(){k(),a([Z,K,vt],k),a(dt,P)}function k(){b=d(!0),M=t.perMove,S=t.perPage,E=p();var y=Oe(m,0,g?E:b-1);y!==m&&(m=y,i.reposition())}function P(){E!==p()&&l(vt)}function L(y,G,J){if(!Ee()){var X=N(y),j=W(X);j>-1&&(G||j!==m)&&(z(j),i.move(X,j,w,J))}}function I(y,G,J,X){n.Scroll.scroll(y,G,J,function(){var j=W(i.toIndex(s()));z(g?Ae(j,E):j),X&&X()})}function N(y){var G=m;if(me(y)){var J=y.match(/([+\-<>])(\d+)?/)||[],X=J[1],j=J[2];X==="+"||X==="-"?G=F(m+ +(""+X+(+j||1)),m):X===">"?G=j?C(+j):_(!0):X==="<"&&(G=A(!0))}else G=c?y:Oe(y,0,E);return G}function V(y,G){var J=M||($()?1:S),X=F(m+J*(y?-1:1),m,!(M||$()));return X===-1&&v&&!Sn(s(),u(!y),1)?y?0:E:G?X:W(X)}function F(y,G,J){if(h()||$()){var X=Y(y);X!==y&&(G=y,y=X,J=!1),y<0||y>E?!M&&(ot(0,y,G,!0)||ot(E,G,y,!0))?y=C(T(y)):c?y=J?y<0?-(b%S||S):b:y:t.rewind?y=y<0?E:0:y=-1:J&&y!==G&&(y=C(T(G)+(y0;)if(f(b-1,!0)!==f(y,!0)){y++;break}return Oe(y,0,b-1)}function C(y){return Oe($()?y:S*y,0,E)}function T(y){return $()?Ae(y,E):ft((y>=E?b-1:y)/S)}function D(y){var G=i.toIndex(y);return v?Oe(G,0,E):G}function z(y){y!==m&&(w=m,m=y)}function q(y){return y?w:m}function $(){return!je(t.focus)||t.isNavigation}function Ee(){return e.state.is([xe,qe])&&!!t.waitForTransition}return{mount:O,go:L,scroll:I,getNext:_,getPrev:A,getAdjacent:V,getEnd:p,setIndex:z,getIndex:q,toIndex:C,toPage:T,toDest:D,hasFocus:$,isBusy:Ee}}var Dr="http://www.w3.org/2000/svg",Cr="m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z",rt=40;function Pr(e,n,t){var r=H(e),a=r.on,l=r.bind,i=r.emit,s=t.classes,u=t.i18n,f=n.Elements,o=n.Controller,h=f.arrows,d=f.track,g=h,c=f.prev,v=f.next,_,A,m={};function E(){b(),a(Z,w)}function w(){M(),E()}function b(){var I=t.arrows;I&&!(c&&v)&&k(),c&&v&&(Ye(m,{prev:c,next:v}),Xe(g,I?"":"none"),oe(g,A=jt+"--"+t.direction),I&&(S(),L(),x([c,v],tt,d.id),i(Cn,c,v)))}function M(){r.destroy(),ve(g,A),_?(Ne(h?[c,v]:g),c=v=null):ue([c,v],qt)}function S(){a([ye,Fe,K,be,vt],L),l(v,"click",U(O,">")),l(c,"click",U(O,"<"))}function O(I){o.go(I,!0)}function k(){g=h||Pe("div",s.arrows),c=P(!0),v=P(!1),_=!0,Je(g,[c,v]),!h&&Ft(g,d)}function P(I){var N='
+ Skip to content

Updating the BIOS on Lenovo laptops from Linux using a USB flash stick

Aren’t hardware manufacturers funny? They either require an old-fashioned operating system (Windows) or museum hardware (floppy drives) to update a BIOS. Apparently they never learn and are instead busy adding features like DRM and UEFI to make our lives even more miserable.

However updating the BIOS on my Lenovo X230 laptop was surprisingly easy once I learned how to do that (kudos to a G+ post I stumbled upon).

  1. Go to support.lenovo.com (or better use a search engine becaues the Lenovo website is beautiful but technically pretty broken and slow) and search for the BIOS upgrade of your laptop model.
  2. @@ -98,10 +91,10 @@ The “sdb” tells you that your USB stick is available on /dev/sdb. Don’t ju
  3. Select the USB stick.
  4. Make sure your laptop has its power supply plugged in. (It will refuse to update otherwise.)
  5. Follow the instructions.
  6. -
\ No newline at end of file + \ No newline at end of file diff --git a/bacula-cheatsheet/index.html b/bacula-cheatsheet/index.html index ed8e150..8162393 100644 --- a/bacula-cheatsheet/index.html +++ b/bacula-cheatsheet/index.html @@ -1,4 +1,4 @@ - Bareos/Bacula Cheat Sheet | ISPmail Guide - Skip to content
+ Skip to content

Bareos/Bacula Cheat Sheet

Bacula is a nifty backup software that is network-capable and stores data in the database for faster retrieval in case you need a certain file back. As a big fan of cheat sheets I created this cheat sheet.

- +

Bareos/Bacula Cheat Sheet

Bacula is a nifty backup software that is network-capable and stores data in the database for faster retrieval in case you need a certain file back. As a big fan of cheat sheets I created this cheat sheet.

+
Which files shall be backed up?show filesetsI=Included, E=Excluded
What’s the server doing?status dir
What’s the status of a certain job?status jobid=xx
What’s the client doing?status client
What’s the streamer doing?status storage
Anything new?messages
- +
Start a backuprun…and choose the backup job
Label a new tapelabel…and run mount afterwards
- +

The common way (a user accidentally removed a file and wants the newest version back from the tapes:

  • Use the restore command.
  • @@ -91,46 +84,46 @@
  • cd / ls / dir / mark / markdir / unmark / unmarkdir / lsmark / estimate / pwd / count / find
  • done
- +
Last jobslist jobs…or list jobid=xx’ for a specific job
Statistics about last jobslist jobtotal
Which files were backed up?list files jobid=xx
- +
Statusmeans…
TTerminated normally
CCreated but not yet running
RRunning
BBlocked
ETerminated in Error
eNon-fatal error
fFatal error
DVerify Differences
ACanceled by the user
FWaiting on the File daemon
SWaiting on the Storage daemon
mWaiting for a new Volume to be mounted
MWaiting for a Mount
sWaiting for Storage resource
jWaiting for Job resource
cWaiting for Client resource
dWating for Maximum jobs
tWaiting for Start Time
pWaiting for higher priority job to finish
WTerminated with warnings
- +
Which tapes are in the pool?list media
Remove a tapedelete media
Which pools are defined?list pools
Which tapes are/were used for a certain job?list jobmedia
Assign a tape to a certain pooladd
Change parameters of a tapeupdate volume
- +
Erase a label on the tapemt rewind && mt weof && mt rewind
- - + +

It is data in a SQL database running on the Bareos server. The catalog stores information about all assets like jobs, clients and media. Without the catalog Bareos had no idea which files were backed up and cannot restore them. In case of a disastrous loss of the catalog you need to take the latest bootstrap and start restoring the catalog first using that information. So the catalog itself is also backed up because without it the system is useless.

- +

Volumes (also called “media”) are either files on disk or physical tapes. When backups run they save their data to volumes. Bareos keeps track in the catalog which data can be found on each volume. Usually multiple backups run in parallel leading to a multiplexed stream of data written to volumes. A volume always belongs to exactly one pool. Volumes have names/labels – tapes have the name that is printed on the barcode sticker if the library have a barcode scanner.

- +

A set of volumes. The pool can define a maximum number of volumes, the type of volumes (e.g. disk or tape) and the retention period. For example you can have short-lived disk pools for small frequent backups. On the other hand you may have long-lived tape pools that store data for several weeks or months.

- +

A specific action like a backup, restore or copy (e.g. from disk to tape). Jobs are usually started automatically by the director following a pre-defined schedule. Multiple jobs can run in parallel and share their resources. The catalog keeps track of which jobs have run in the past in order to know which volumes would be required to restore data from them.

In the bconsole you can see the running, past and scheduled jobs by running “stat dir”.

- +

The definition of a job. It is not stored in the catalog but in text files in /etc/bareos.

- +

A server to be backed up. Usually a file-daemon runs on the client. The director will talk to the client to run jobs.

- +

Defines which files or directories to backup from a certain server. A job defines which fileset to use for a backup.

- +

A small text file usually sent out via email frequently. It is required in case of a catalog loss to find the volume that contains the last backup of the catalog.

The upstream documents reads: “The bootstrap file contains ASCII information that permits precise specification of what files should be restored, what volume they are on, and where they are on the volume. It is a relatively compact form of specifying the information, is human readable, and can be edited with any text editor.”

The bootstrap data is not confidential and should be forwarded to an external location in case of a disaster.

- +

Bareos can send messages to the console or via email. Results of jobs are sent via email.

- +

A definition of how often and at what time a job can be run.

- +

Defines a way to write volumes. It is used by the storage daemon. A storage can be a path on the local disks or the name of the tape device. Autochangers (aka “tape libraries”) are also supported.


- +

A volume is locked after being written to. The retention period defines when the volume can be overwritten again.

- +

This applies to tape volumes only. New tapes can be introduced into the “Scratch” pool. If a pool is out of volumes to use then Bareos will take a volume from the Scratch pool and take it into its own pool.

- +

Backups can happen in three different levels: Full, Differential and Incremental. Only Full backups are required. The other levels can be used to save space on volumes.

  • Full: every single file defined in assigned fileset is saved to the volume
  • @@ -174,10 +167,10 @@
    • Using a rare Full backup and rely on many intermediate Incremental backups. If any of the many Incremental backups were faulty you would lose all data back to that time.
    • Losing the Full backup and only keeping Incremental backups. This may occur if the retention periods are not adequately configured for Full backups.
    • -
\ No newline at end of file +
\ No newline at end of file diff --git a/debian-packages-are-so-old/index.html b/debian-packages-are-so-old/index.html index 4959665..3a96d12 100644 --- a/debian-packages-are-so-old/index.html +++ b/debian-packages-are-so-old/index.html @@ -1,4 +1,4 @@ - Debian packages are so old | ISPmail Guide - Skip to content
+ Skip to content

Debian packages are so old

Debian comes with tens of thousands of software packages that you can easily install on your system. But Debian only publishes a new “stable” release every 2-3 years. That creates the impression that Debian packages must always be up to 3 years old. And who wants to work with a three year old piece of software? Are the package maintainers lazy? Should I download my software from its own project website instead?

+

Debian packages are so old

Debian comes with tens of thousands of software packages that you can easily install on your system. But Debian only publishes a new “stable” release every 2-3 years. That creates the impression that Debian packages must always be up to 3 years old. And who wants to work with a three year old piece of software? Are the package maintainers lazy? Should I download my software from its own project website instead?

I feel obliged to briefly discuss this topic because it is a common source of trouble and surprises. And it may make you say…

“What’s the deal? Shouldn’t we just use Debian packages where we find it comfortable and install any other software in a newer version? Just look at the shiny new Roundcube version. Oh, and rspamd has some new features to filter out spam mails. Why don’t we use that? Even their developers urge me to take their updated packages.”

So… why are the packages in the “stable” version of Debian so old? Actually that question is pretty funny when you think about it. “stable” means “stay on the same versions if possible”. You might say that it means “old by design”. The idea is that your system will not surprise you with an unexpected update that breaks a service for many users on a monday morning.

- +

No. “stable” relates to the version. I does not necessarily mean more “robust”. The Debian developers do not pick a certain version that they think is especially good or bug-free. The version that made it into a new stable release of Debian was just there when it was about time to create a new release.

And what about security issues? Software developer usually fix issues in a newer version. How does Debian deal with that?

That is true. Developers hardly ever fix issues in old software. That’s just not fun. Developers like to go forward. While they implement new features they also fix issues on their way. I totally understand that motivation. But that way they force users to accept their changes and new features even if the users just want to fix the security issues. And new versions come with new bugs.

Debian however always tries to backport bug fixes. A Debian package maintainer will try to apply the fix to the stable version in Debian. So you get the benefit of staying on a certain version but at the same time get security updates. That makes it the best possible way to deal with security issues for server administrators. They can rely on their systems without having to fear breaking changes. Only when a new stable version arrives they are forced to consider upgrading.

See also the Debian FAQ on security.

- +

Aside from stable packages there are also unstable packages. Let’s take a look at packages.debian.org/vlc to see which package versions of the famous VLC software are available. This is just a screenshot so you will get different versions:

-

Screenshot of packages.debian.org

+

Screenshot of packages.debian.org

As you can see there are the different releases like “jessie” (very old), “stretch” (old), “buster” (the stable version when this was written), “bullseye” (the upcoming stable release) and “sid”. By default your system will install the current stable version. If you are on Debian “buster” then it will be 3.0.12-0.

If you wanted newer software you could just replace “buster” by “sid” in your /etc/apt/sources.list and upgrade your system. Done. That way every “apt upgrade” will give you the newest packages that Debian has to offer. And in many cases that is very close to the newest version of the actual (upstream) software. Just be aware that sid/unstable is a moving target. It is impossible to coordinate all updated packages. So it may occur that a new package cannot be properly installed, does not work or even breaks something else on your system. I know people who have sid/unstable on their laptops. But those are the kind of people who know a lot about Debian and do not despair when something breaks.

As a middle ground you might use the “testing” variant. Only packages without any serious bugs will be copied to “testing” so you rule out the worst problems. Still this is not failsafe. There are also backported packages that try to make newer software work on an otherwise “stable” system. But this may give you security issues that are not fixed as quickly as needed. Every choice comes with its own compromises.

So as you see Debian’s packages are not old at all. Just when you do a fresh installation you are usually on a “stable” installation. And that’s for a reason. On a server nobody cares if a piece of software is 2 years old. The focus there is on reliability. And “stable” gives you that.

- +

A lot of software is available directly by its developers through their own APT repositories. Can’t I just use them?

Of course. I also pick specific pieces of software from their third-party APT repositories. But those are very rare exceptions and I keep track of what software I get from there. Common problems are:

    @@ -108,10 +101,10 @@
  • files of third-party software should go to /opt but quite often they are scattered in the wrong places
  • expired APT keys because the developers didn’t care about expiry dates
-

However not all is bad. Some third-party packages are very good. Your mileage may vary though.

\ No newline at end of file +
\ No newline at end of file diff --git a/getting-help-on-irc/index.html b/getting-help-on-irc/index.html index d180a0f..c04206a 100644 --- a/getting-help-on-irc/index.html +++ b/getting-help-on-irc/index.html @@ -1,4 +1,4 @@ - Getting help on IRC | ISPmail Guide - Skip to content
+ Skip to content

Getting help on IRC

IRC (Internet Relay Chat) is a real-time chat where you can talk to other people from around the planet. Although many channels deal with smalltalk about the weather, girl-friends and politics there are IRC networks and channels that are dedicated to a piece of software or an operating system. irc.freenode.net for example exists to support open-source projects. In case you need urgent help or just don’t want to use a mailing list then you are welcome on IRC. IRC has been there for ages and has evolved with the time. So it may appear like a hot tub of completely mad people at first. This article is meant to help you understand how to IRC works socially and how to get the most out of it.

- +

Getting help on IRC

IRC (Internet Relay Chat) is a real-time chat where you can talk to other people from around the planet. Although many channels deal with smalltalk about the weather, girl-friends and politics there are IRC networks and channels that are dedicated to a piece of software or an operating system. irc.freenode.net for example exists to support open-source projects. In case you need urgent help or just don’t want to use a mailing list then you are welcome on IRC. IRC has been there for ages and has evolved with the time. So it may appear like a hot tub of completely mad people at first. This article is meant to help you understand how to IRC works socially and how to get the most out of it.

+

Do not start your conversion with “May I ask a question?” or “Can anyone help me?”. Although that may be polite in normal human interaction it does not work that way on IRC. You are supposed to just ask your question right away.

- +

There is nothing worse than “My printer doesn’t work.” or “My mail server doesn’t work.”. How are others supposed to help you if you don’t give them any details? Make sure you include at least this information:

What did you try to accomplish? (I wanted to fetch my mails via POP3.) What has happened (wrongly) instead? (But my inbox remains empty.) @@ -90,47 +83,47 @@ What did you try to find the cause? (I already checked my POP3 account setup.) Are there error messages or log files? (The error message reads: “SSL negotiation failed.”) Has it ever worked? What did you change? (I switched accounts to a new provider. It worked before with another provider.)

If all this information is included then you will have a high chance of getting a useful reply.

- +

Others only know what you tell them. If you change things silently then nobody will know about it. The worst thing you can do is say: “I changed something. Now I have another problem.” It will make others give up instantly. If you expect help you need to work with the supporters.

- +

Your IRC client will likely show you the “topic” of a channel when you enter it. You should find some useful information about how this channel is supposed to work. Often the topic even lists URLs for FAQs and documentation. Asking something that is clearly answered in the topic is considered stupid. If there are FAQ URLs listed in the topic first check if you find your question answered there.

- +

Do not expect a single person to stay online until your problem is fixed. IRC is a stateless medium. Anyone can quit at any time. People stay there because they like staying there. Nobody is paid for helping you.

- +

You can either talk to others in a channel publicly or /msg them privately. However the latter is considered rude if done without being asked. Don’t occupy a single person for your purpose. Others may as well be interested in a solution to your problem, too.

- +

Sometimes you may feel that others are rude. You may get a response like “Reinstall the package. Restart the service. Read the /usr/share/doc/mysoftware/README.” Although this is a very brief reply it is likely not meant to be rude. IRC is often like human interaction without all the friendly bits. Other people have probably answered your question a dozen times today and they just want to help you solve the problem - not become close friends with you. Don’t be offended by it.

- +

Asking the same question every minute is annoying. If anyone in the channel isn’t paying attention then they will neither read you the second and third time. And those who came back from lunch or sleep will likely see in their “lastlog” what has happened lately.

- +

In most channels the only language spoken is English. There are certain local channels like #debian-fr which are specifically for frenchmen. But everywhere else you must not write anything but English. It doesn’t matter if you consider your English language skills bad. Most people in the world speak something different than English, too. And if you find another person that speaks your language then do not start to talk in your local language. Nobody else can follow you and it’s considered rude.

- +

If people tell you to read the documentation then you should do so. Never say: “I’m too lazy. Come on. You all know what I need to do. Just tell me the solution.” This will get you ignored for all eternity. However you can expect to be told where to find the documentation. If you get a URL then follow it and read it. If the documentation is too technical or you don’t understand certain sections then be more specific like: “I have now read chapter 3.1 of the URL you gave me and I understand how virtual domains work in general. But how would I use both virtual and non-virtual domains together?”

- +

Even if you are in a hurry you should allow other participants some time to answer. Sometimes you are lucky and a helpful reply appears within a few seconds. But it is not uncommon that you will have to wait 10-20 minutes until the right person who is familiar with your problem talks to you. The pattern looks something like this:

10:07 Foo joins 10:07 Foo> How can I install the shripdibble module? 10:09 Foo quit

Then at 10:14 an expert on shripdibble joins but can’t help you any more because you gave up too quickly.

- +

Using IRC is a matter of give and take. At the beginning you will surely have more questions than answers. Just ask them and be grateful if you get attention and replies. Others do not expect more than a “Thank you.” for their help.

If you can, please consider staying online in the channel. The more knowledge you gain the more you can help other people. And you probably get to know people you like to hang out with - even if it’s just virtually.

- +

It may sometimes be hard to follow all the conversation on IRC. But if people are trying to help you and need to ask you a few questions please answer them all. If you get asked three questions and only answer one or keep asking the same question time and again (showing that you don’t read what you get asked) you risk to be ignored. Show some initiative and stay focused. Then your problem will likely be fixed within a few minutes.

- +

It doesn’t help anyone if you just say “Nevermind, found it.” and quit the channel. Please tell the others what the solution to your problem was so everybody can learn from it. You will not look stupid - trust me.

- +

When getting responses be careful who you trust. Some people just want to feel important and reply to you although they have no more clue than you do. Perhaps even an “educated guess” might help - just make clear if it’s something that was tried and worked. Some people are even jokers who want to be funny by telling you how to erase your harddisk. So verify others’ proposals instead of applying them blindly.

- +

Sometimes you need to show others more than one line. Perhaps parts of your configuration files or a log file. Never just copy and paste larger amounts of text right into the channel. Always use a pastebin. Pastebins are public services (web sites) where you can paste your text and everybody can access them as a URL. Just paste your contents there and send the URL into the channel. That should allow everybody who’s interested to take a look. Just don’t paste it without any comment. Rather say: “Emails seem to get lost since I installed program foobar. Please take a look at my logs: http://…”

Related links

See also:

\ No newline at end of file +
\ No newline at end of file diff --git a/index.html b/index.html index 4654c97..a5b827b 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ - Welcome to ISPmail – a free guide to your own mail server | ISPmail Guide - Skip to content
+ Skip to content

Welcome to ISPmail – a free guide to your own mail server

ISPmail is a free but extensive do-it-yourself guide to help you build a fully-functional mail server from 100% open-source components. It is based on Debian GNU/Linux. Light enough for your friends and family. Or powerful enough for professional use.
+

Welcome to ISPmail – a free guide to your own mail server

ISPmail is a free but extensive do-it-yourself guide to help you build a fully-functional mail server from 100% open-source components. It is based on Debian GNU/Linux. Light enough for your friends and family. Or powerful enough for professional use.

Educational

This is not a simple copy/paste walkthrough. You will learn the technical details of email exchange on the internet. -And you will understand how the different pieces of software work and interact.

Free

This guide is a not-for-profit fun project. You only need to get an internet domain and a cheap virtual server -(~5€/$ per month). Powered by the desire to make the internet a bit more decentralized.

Since 2003

This guide has been maintained for over 20 years. Made for nerds who want a boring stable mail server that just -works with little maintenance. But with all the features that make it fun.

You’re not alone

You won’t get stuck. Every page of this guide has a comment section to ask questions and discuss the topic. For -real-time help you can join our support chat on Matrix.

Open source

All software that is used is completely open-source. No costs. Your new friends are Debian, Postfix, Dovecot, -Roundcube, MariaDB, Apache and rspamd.

Standards

Only standard protocols are used. IMAP, POP3, SMTP and HTTPS. No proprietary protocols. No vendor lock-in. No public -cloud.

- +And you will understand how the different pieces of software work and interact.

Free

This guide is a not-for-profit fun project. You only need to get an internet domain and a cheap virtual server +(~5€/$ per month). Powered by the desire to make the internet a bit more decentralized.

Since 2003

This guide has been maintained for over 20 years. Made for nerds who want a boring stable mail server that just +works with little maintenance. But with all the features that make it fun.

You’re not alone

You won’t get stuck. Every page of this guide has a comment section to ask questions and discuss the topic. For +real-time help you can join our support chat on Matrix.

Open source

All software that is used is completely open-source. No costs. Your new friends are Debian, Postfix, Dovecot, +Roundcube, MariaDB, Apache and rspamd.

Standards

Only standard protocols are used. IMAP, POP3, SMTP and HTTPS. No proprietary protocols. No vendor lock-in. No public +cloud.

+
  • Kostja:

    @@ -148,9 +141,9 @@ want to thank Christoph for his great work and support and hope the guide will n

    Francisco:

    Thank you Christoph. I’ve just setup my mail server and i’m very happy with it. I’ve learned a lot.

  • -
\ No newline at end of file + \ No newline at end of file diff --git a/ispmail-trixie/anti-spoofing-dkim-spf/index.html b/ispmail-trixie/anti-spoofing-dkim-spf/index.html index b9ac31f..065f166 100644 --- a/ispmail-trixie/anti-spoofing-dkim-spf/index.html +++ b/ispmail-trixie/anti-spoofing-dkim-spf/index.html @@ -1,4 +1,4 @@ - Prevent spoofing using DKIM and SPF | ISPmail Guide - Skip to content
+ Skip to content

Prevent spoofing using DKIM and SPF

+

Prevent spoofing using DKIM and SPF

Email sender spoofing means pretending to be in control of someone else’s email address. This is a common problem with phishing. Often scammers send emails with a sender address of something@paypal.com and hope that the recipient falls for it and trusts them. SMTP does not care which sender address @@ -90,7 +83,7 @@ And bad guys obviously don’t care.

  • DKIM (DomainKeys Identified Mail)
  • DMARC (Domain-based Message Authentication, Reporting and Conformance)
  • - +

    Each email that you receive actually contains two different sender addresses. Understanding the difference is important when it comes to DKIM and DMARC.

    The envelope sender is used by SMTP for delivery and bounce messages. It is not usually shown to the user. It @@ -102,7 +95,7 @@ will be sent back to as undeliverable.

    The visible sender (this is not an official term) is what the recipient sees in their email software. In an actual email this is the From: John <john@example.org> header. If you think of a written letter, then this is the sender as found in the actual letter within the envelope.

    - +

    SPF defines which servers (IP addresses) are allowed to send emails on behalf of a specific domain.

    SPF is essentially a TXT record in your DNS zone that provides machine-readable information for other mail servers. When an email is received, the receiving server can (and usually does) check for an SPF record for your domain to determine @@ -129,7 +122,7 @@ address that is not authorized.

    Of course SPF not only helps other mail servers. Rspamd on your mail server will check for other domains’ SPF records, too.

    - +

    DKIM can prove that an email has not been tampered with on its journey from the sender to the recipient.

    DKIM uses public key cryptography to automatically add a cryptographic signature into the header of each outgoing email. It also uses a TXT record in your domain’s DNS zone to publish the public key.

    @@ -151,7 +144,7 @@ access to the DNS zone, this proves the authenticity.

    Obviously your mail server will both receive and send emails. So if you want to use DKIM (which I recommend) then you need to take care of both parts. But luckily that’s not too hard. The rspamd software on your mail server can take care of both signing outgoing emails and validating incoming signatures.

    - +

    Let’s take a look at such a signature in real life. I have just sent an email from GMail to my personal email account on my own mail server. Google uses DKIM signing so the email got this additional header from Google’s mail servers:

    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
    d=gmail.com; s=20230601; t=1760017775; x=1760622575; darn=workaround.org;
    h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
    :date:message-id:reply-to;
    bh=HmztzLfHhgZON2788h5cwCX7liAbwFqnFGISA15M18Q=;
    b=OKu5D/Ejp7tGy3uxydb7qDccK03OxrdD9vxEKiAXk/y9T5WViCqpg3HrdeB5Izkzdq
    MXvQ+SgGVzJmy9ZgV1A930RRqUIoR2wmlr3GDXPDyRfagJMRV/3v9J71lfSduOFE8q7t
    AIw4oWBm91QAnC5gW+XS7h4lNmRd4pVILkoe09qkLz+7WrU5Xp/WGIKHRK0ST5+EAR25…
    @@ -165,11 +158,11 @@ my own mail server. Google uses DKIM signing so the email got this additional he

    That is the public key that I can use to verify the signature. An automated check can be done using the opendkim-testmsg tool as described later. I can run it and paste the entire email including headers and body into it. If it doesn’t complain with an error message then the signature is correct.

    - +

    Sounds good? Then let’s implement that for your email domains, too.

    If you have skipped the previous section on detecting and filtering out spam emails, then just run these two commands to tell Postfix to send all emails through rspamd:

    @@ -190,7 +183,7 @@ you stay flexible and use a custom selector.

    -----BEGIN PRIVATE KEY-----
    MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALhyevPohneucRGQ
    LXgqtajXhDgOr9kvoX5igRuChC+j7Fxvwh4SuUphMKLynabAvcUUF951BgVB4PXU
    Qoxae7cEkjWATNSiv+Eq0w+AKErdC+BFNDSTk74GZDBBhlroxyudk7QMCZ2nhiOA
    /rY1LypaDQzBiRSV8zjcHC8E2Z5lAgMBAAECgYEAodSn9isVGBrwz8Udb+qhOoPl
    WT3hogA9hGMu/hEUo6wCrNPNkI9DDXSatM2D7xP7LNhFXQR2BNTZaTcUMIsPMXZ9
    157tBVUAcnoRES6BbPyKC7k4dgSXxh687jhSgQWy+OZIU8IbJcoDXXsGjx+6Sb4W
    Ilo9NMCF/QqxRFIne70CQQDhNC4YasFOdJyWACxIbFBt+/HhO5+UboUIrZU5nde7
    N5HEfnP3Ow2C6vdNnGWiv4YpobN7zjz+lFj19rlWvmHDAkEA0auDQVfIiLEUrKvW
    TdhbscpEoYHP+AlM48C+QltKVk+eAnJJHNbBYMVmCmXafgMzFh8QhgG5WXKSlvtz
    G/+UtwJAS4QL0PQ7TeucdlAoiUCI19icC0LLCCLnSTmryF49cPH5V0Jv8H9E0Jmp
    w8Sl8CT5AAzQ+rr1iQiFrDTHgWblsQJBAJGEtSMrts1QAaZZ2PHMQM+jL4DcZKek
    ZM4JXsMVMwG2XlcaVK4EStBMEKcUy9D7jYBD7SbkmWyAPUc2m0yKVP8CQB1zxjA0
    Z700vkWGKhwY4DznuDGjpU9rvQw7pyCJ3TYDT3ACQePmGmVeCtyETJ5XvFV2jSqf
    o9J+GsdbljSnnSw=
    -----END PRIVATE KEY-----

    …and the public key – in the format of a DNS record:

    2025100901._domainkey IN TXT ( "v=DKIM1; k=rsa;"
    "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4cnrz6IZ3rnERkC14KrWo14Q4Dq/ZL6F+YoEbgoQvo+xcb8IeErlKYTCi8p2mwL3FFBfedQYFQeD11EKMWnu3BJI1gEzUor/hKtMPgChK3QvgRTQ0k5O+BmQwQYZa6McrnZO0DAmdp4YjgP62NS8qWg0MwYkUlfM43BwvBNmeZQIDAQAB" ) ;
    - +

    Before you start signing your emails you must make sure that the public key is properly present in your DNS zone for the domain you are sending emails from. Otherwise the recipient will be unable to verify the signature and may incorrectly assume that the email was spoofed.

    @@ -208,7 +201,7 @@ verify that:

    Run this on your server
    dig +short 2025100901._domainkey.example.org txt

    If you get the TXT entry like as follows then you are ready to enable DKIM signing in rspamd for that domain:

    "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4cnrz6IZ3rnERkC14KrWo14Q4Dq/ZL6F+YoEbgoQvo+xcb8IeErlKYTCi8p2mwL3FFBfedQYFQeD11EKMWnu3BJI1gEzUor/hKtMPgChK3QvgRTQ0k5O+BmQwQYZa6McrnZO0DAmdp4YjgP62NS8qWg0MwYkUlfM43BwvBNmeZQIDAQAB"
    - +

    Take the private key that was created earlier (the multi-line string including “…BEGIN PRIVATE KEY…” and “…END PRIVATE KEY…”) and put it into a file at the location where rspamd will look for it:

    /var/lib/rspamd/dkim/example.org.2025100901.key
    @@ -218,7 +211,7 @@ get an error in your rspamd.log file like “lua_dkim_sign_handler: cannot l

    Make sure that only the _rspamd user can read it:

    Run this on your server
    chown _rspamd /var/lib/rspamd/dkim/*
    chmod u=r,go= /var/lib/rspamd/dkim/*

    rspamd will automatically pick up the files and does not need to be restarted when you add new keys for further domains.

    - +

    As explained above it is advised to use DKIM maps. It’s nothing fancy. Just a simple file defining which selector you want to use for signing for a certain domain. rspamd will assume that your selector is always dkim unless specified otherwise in a map. Always use a specific selector so that you can later add new keys to DNS without getting @@ -232,7 +225,7 @@ that file for your own domain and selector:

    Run this on your server
    # Add the mapping of domain/selector (use your own domain here)
    echo example.org 2025100901 > /etc/rspamd/dkim_selectors.map

    That’s all. rspamd now knows that whenever it sees an outgoing email from anyone@example.org it will get the DKIM private key from /var/lib/rspamd/dkim/example.org.2025100901.key and use it to sign the email.

    - +

    You could either just send an email from your mail client (or Roundcube) through your mail server to another email address. Or you could use swaks. Use your own addresses and password of course:

    Run this on your server
    swaks --server localhost:587 \
    --from some.address@example.org \
    --to some.external.address@example.net \
    -tls \
    --auth-user some.address@example.org \
    --auth-password your_secreet_password
    @@ -251,15 +244,15 @@ should look like:

    service.example.org for your domain. That’s totally fine. But rspamd will strip it down to example.org and use the DKIM key for example.org. If that’s not what you want, then add this line to /etc/rspamd/local.d/dkim_signing.conf:

    use_esld = false;

    eSLD is a rarely used acronym that stands for effective second-level domain. In layman’s terms: the part of a domain that only consists of the rightmost two parts. For mails.hawkeye.example.com the eSLD is example.com.

    - - + +

    Let’s take an example header of a spoofed mail:

    Return-Path: <noreply@evil-spammer.com>
    DKIM-Signature: d=evil-spammer.com
    From: <service@paypal.com>

    In this example a bad guy just sent you this email. The SPF check for the evil-spammer.com domain was successful. (You can’t see that from these headers though.) He even added a DKIM signature from his domain. So everything looks right. But in your mail program you see service@paypal.com. So nobody checks that the envelop sender and the visible sender “align”.

    - +

    That’s what DMARC is supposed to solve. It works like this:

    • (A) SPF @@ -283,7 +276,7 @@ sender “align”.

    You can find more examples about the alignment in the RFC 7489 in Appendix B.1.

    - +

    Another feature of DMARC is reporting. You may want to know whether your emails had delivery problems. DMARC has two tags for that purpose:

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/automated-installation/index.html b/ispmail-trixie/automated-installation/index.html index 6589041..e0de5d9 100644 --- a/ispmail-trixie/automated-installation/index.html +++ b/ispmail-trixie/automated-installation/index.html @@ -1,4 +1,4 @@ - Automated installation | ISPmail Guide - Skip to content
    + Skip to content

    Automated installation

    I have spent an extra couple of days to provide you with a shell script that does all the steps of this guide +

    Automated installation

    I have spent an extra couple of days to provide you with a shell script that does all the steps of this guide automatically on a fresh Debian Trixie system. The previous Bookworm guide contained an Ansible playbook for that purpose. But although I know Ansible quite well, I have realized that it can make simple tasks very complicated. So I thought that a shell script is the simplest way.

    -

    To use the automated installer:

    Terminal window
    wget https://workaround.org/ispmail.sh
    chmod +x ispmail.sh
    ./ispmail.sh -f example.org

    Use your main FQDN instead of example.org. It will become the main host name for Roundcube, rspamd, SMTP, IMAP and will be taken as the common name for the Let’s Encrypt certificate.

    -

    This script is something new. So please report your experience while using it down in the comments.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/catch-all/index.html b/ispmail-trixie/catch-all/index.html index e3373fe..78abd64 100644 --- a/ispmail-trixie/catch-all/index.html +++ b/ispmail-trixie/catch-all/index.html @@ -1,4 +1,4 @@ - Catch-all addresses | ISPmail Guide - Skip to content
    + Skip to content

    Catch-all addresses

    +

    Catch-all addresses

    As explained earlier in the tutorial there is way to forward all undefined email addresses in a domain to a certain destination email address. This is called a catch-all alias. Those aliases catch all emails for a domain if there is no specific virtual user or virtual alias for that email address. The drawback is that you will get more spam @@ -88,46 +81,21 @@ of a recipient but the mail server will forward the email instead of rejecting i

    You still want to use catch-all addresses? Well, okay. Let’s do it then. A catchall alias looks like “@example.org” and forwards email for the whole domain to other addresses. We have created the john@example.org user and would like to forward all other email on the domain to kerstin@example.com. So we would add a catchall alias like:

    - - - - - - - - - - - - - -
    sourcedestination
    @example.orgkerstin@example.com
    +

    | source | destination | +| -------------- | --------------------- | +| @example.org | kerstin@example.com |

    But there is a small catch. Postfix will apply the aliases (virtual_alias_maps) before delivering an email. So the catch-all alias will “steal” all emails. But we can add this to the aliases table to prevent that:

    - - - - - - - - - - - - - - - - - -
    emaildestination
    @example.orgkerstin@example.com
    john@example.orgjohn@example.org
    +

    | email | destination | +| ---------------------- | ---------------------- | +| @example.org | kerstin@example.com | +| john@example.org | john@example.org |

    Postfix will consider more specific aliases first. And john@example.org is more specific than @example.org. Consider that someone is trying to reach john@example.org’s mailbox. So to make a mixture of catch-all addresses and specific addresses work, we need this little trickery.

    Postfix will lookup all these mappings for each of:

      -
    • john@example.org (most specific)
    • +
    • john@example.org (most specific)
    • @example.org (catchall – least specific)

    This is outlined in the virtual(5) man page in the TABLE SEARCH @@ -141,10 +109,10 @@ that. For that “john-to-himself” mapping you need to create another “.cf

    Run this on your server
    postmap -q john@example.org mysql:/etc/postfix/mariadb-email2email.cf

    The result should be the same address:

    john@example.org
    -

    Now you are ready to add catch-all aliases.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/catching-spam-with-rspamd/index.html b/ispmail-trixie/catching-spam-with-rspamd/index.html index e04157c..8f5478d 100644 --- a/ispmail-trixie/catching-spam-with-rspamd/index.html +++ b/ispmail-trixie/catching-spam-with-rspamd/index.html @@ -1,4 +1,4 @@ - Catching spam with rspamd | ISPmail Guide - Skip to content
    + Skip to content

    Catching spam with rspamd

    +

    Catching spam with rspamd

    You have come a long way in this guide and your mail server is already fully functional. Now it’s time to deal with filtering out incoming spam emails. I found that rspamd is well-performing choice for that purpose both in speed and detection. rspamd keeps a permanent process running on your mail server that listens to @@ -87,7 +80,7 @@ Every time an email enters your system, Postfix will send it to rspamd to have i checks on the email and computes a total score. The higher the score – the more likely it it spam. And the best thing about milters: the check happens in parallel while Postfix is still in the process of receiving the email. If the score is high enough, Postfix can still reject the email right at the doorstep.

    - +

    Let’s tell Postfix to send all incoming email through rspamd:

    Run this on your server
    postconf smtpd_milters=inet:127.0.0.1:11332
    postconf non_smtpd_milters=inet:127.0.0.1:11332

    For testing we can use a sample spam email that comes with SpamAssassin. It is called GTUBE (Generic Test @@ -115,7 +108,7 @@ communication with the sending server. It just hung up the phone and now it’s to complain about it to the alleged sender. Trust me: the sender you see on a spam email is never the bad guy who sent it. You would complain to the wrong person which is called backscatter.

    - +

    rspamd will however not reject all spam email. It computes a score that tells how likely a certain email is spam. You can tell it which scores you would accept, flag as spam or make the incoming email get rejected. Rspamd checks incoming emails in various ways. Take a look at the /etc/rspamd/actions.conf file:

    @@ -130,7 +123,7 @@ like on infected Wind*ws computers used to try sending an email just once which rejected the spammer. But even malware programmers have learned and may try again after a few minutes thus circumventing greylisting. Your mileage may vary. The problem with greylisting is that the recipient has to wait a couple of minutes for the email to be delivered which may be bothering the users.

    - +

    An email consists of headers and the actual body. Your users will usually only see common header information like the subject, the sender, the recipient and the time the email was sent. But there is way more information like the route the email travelled. Mail software can even add arbitrary extended headers that start with X-. @@ -143,7 +136,7 @@ not necessarily mean something bad about the email. For example R_SPF_ALLOW< score because it is something good about the email. There are a several symbols with a 0.00 score. These do not change the score but show you what rspamd has found. But if you consider certain criteria good or bad then you can define your own scores for them.

    - +

    Your users will not realize that their spam emails have an added X-Spam: Yes header. It is not shown in their mail client. Nor does it move the email out of the inbox into their spam folder. Such emails just appear in their inbox. So let’s be nice and move spam emails to the user’s Junk folder automatically. Dovecot has support @@ -177,7 +170,7 @@ directly into Dovecot using the LMTP socket:

    Click here to get more detailed logs…

    If you find that the delivery to the Junk folder did not work, you may want to increase the log level. Uncomment the line

    log_debug=category=sieve

    in the 99-ispmail-sieve.conf file.

    That will give you a much deeper insight of what Dovecot has been doing. Restart Dovecot, send another email with swaks and check the logs again:

    Run this on your server
    systemctl reload dovecot
    journalctl -eu dovecot
    - +

    One of rspamd’s features is analyzing word patterns using probability theory. That functionality is contained in its statistical module. (Yes, the name is misleading.) Essentially you show rspamd lots of ham (good) and spam (bad) emails and its detection gets better over time.

    @@ -213,7 +206,7 @@ just spam emails will not work. This is defined by the min_learns vari
    Statfile: BAYES_HAM type: redis; length: 0; free blocks: 0;
    total blocks: 0; free: 0.00%; learned: 1411;
    users: 62; languages: 0

    (Don’t worry about the length: 0. That seems to be a bug that has been ignored since 2019. Checking the actual contents of the Redis database reveals that there is actually data stored.)

    - +

    Usually the training database applies to all incoming emails for all users. But you split it up so that each recipient gets their own training.

    Advantage: users work differently. Some have subscribed to a sales newsletter and now believe that marking it as @@ -225,7 +218,7 @@ of spam training the detection will not be improved. For a friends-and-family se

    If you decide you want to use per-user spam training then add/edit the file /etc/rspamd/local.d/classifier-bayes.conf and insert:

    users_enabled = true;
    - +

    Now we are getting to something really cool. Imagine you receive a spam email in your inbox that Rspamd didn’t catch. You could just move it to your Junk folder — but that wouldn’t help Rspamd learn to recognize that kind of spam in the future. Luckily, we can change that.

    @@ -281,13 +274,13 @@ are going on. Some relevant lines:

    The /var/log/rspamd/rspamd.log file will also show that training:

    rspamd_controller_learn_fin_task: <127.0.0.1> learned message as spam: GTUBE1.1010101@example.net
    rspamd_controller_learn_fin_task: <127.0.0.1> learned message as ham: 20251101173211.068172@mailserver

    If you are happy and see no errors (they are highlighted in red), then switch off the debugging again.

    - +

    rspamd keeps a verbose log of its actions in /var/log/rspamd/rspamd.log. If a user complains that a certain email got blocked or at least flagged as spam then take a look at this log. You can match the /var/log/mail.log with it by comparing the Postfix queue ID. Those are the 12-digit hexadecimal number like “95CE05A00547”. Those IDs can be found in the rspamd.log, too:

    <40985d>; task; rspamd_task_write_log: id: <undef>, qid: <95CE05A00547>, ip: 12.13.51.194, from: <…>, (default: F (no action): [3.40/15.00] [MISSING_MID(2.50){},MISSING_DATE(1.00){},MIME_GOOD(-0.10){text/plain;},ARC_NA(0.00){},ASN(0.00){asn:8220, ipnet:212.123.192.0/18, country:GB;},FROM_EQ_ENVFROM(0.00){},FROM_NO_DN(0.00){},RCPT_COUNT_ONE(0.00){1;},RCVD_COUNT_ZERO(0.00){0;},RCVD_TLS_ALL(0.00){},TO_DN_NONE(0.00){},TO_DOM_EQ_FROM_DOM(0.00){},TO_MATCH_ENVRCPT_ALL(0.00){}]), len: 181, time: 16.000ms real, 6.385ms virtual, dns req: 0, digest: <69b289a82827c11f759837c033cd800a>, rcpts: <…>, mime_rcpt: <…>
    - +

    Andi Olsen pointed out that Dovecot has introduced an autoexpunge feature to automatically delete emails in a folder that reach a certain age. This is especially useful for the “Trash” and “Junk” folders. To @@ -295,12 +288,12 @@ enable this feature, create yet another configuration file:

    Run this on your server
    cat > /etc/dovecot/conf.d/99-ispmail-autoexpunge.conf << 'EOF'
    # Remove mails from the Junk and Trash folders after 30 days
    mailbox Junk {
    special_use = \Junk
    auto = subscribe
    mailbox_autoexpunge = 30d
    }
    mailbox Trash {
    special_use = \Trash
    auto = subscribe
    mailbox_autoexpunge = 30d
    }
    # Make expunging more efficient
    mailbox_list_index = yes
    mail_always_cache_fields = date.save
    EOF
    # Restart Dovecot
    systemctl reload dovecot
    - +

    rspamd comes with a neat bonus feature: a web interface. It allows you to check emails for spam, get statistics and fine-tune scores. It is already installed and enabled by default and expects HTTP (not HTTPS!) requests on port 11334 on the localhost interface. I suggest you add a simple proxy configuration to your already working HTTPS-enabled web mail configuration to get access.

    -

    rspamd dashboard

    +

    rspamd dashboard

    You can either create a new virtual host configuration or just edit the /etc/apache2/sites-enabled/000-default-le-ssl.conf file. Anywhere within the VirtualHost tags add:

    <Location /rspamd>
    Require all granted
    </Location>
    @@ -320,10 +313,10 @@ configuration:

    This gives you a password like “sae8thaoTaengeo”. If everything went as expected you should now be able to access the rspamd web interface at https://mail.example.org/rspamd (of course you will use your own server name here).

    You may miss the detailed history in the web interface. /etc/rspamd/local.d/redis.conf The content is: servers = -“127.0.0.1”;

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/database/index.html b/ispmail-trixie/database/index.html index d968e84..6d7a43e 100644 --- a/ispmail-trixie/database/index.html +++ b/ispmail-trixie/database/index.html @@ -1,4 +1,4 @@ - Database setup | ISPmail Guide - Skip to content
    + Skip to content

    Database setup

    Now it’s time to prepare the MariaDB database that stores the information that controls your mail server. In the process +

    Database setup

    Now it’s time to prepare the MariaDB database that stores the information that controls your mail server. In the process you will have to enter SQL queries – the language of relational database servers. You may enter them in a terminal window using the ‘mariadb’ command.

    - +

    This step is simple. Connect to the database using the mariadb command in your shell:

    Run this on your server
    mariadb

    You should see the MariaDB prompt that allows you to enter further SQL commands:

    MariaDB [(none)]>

    To create the new database, send this SQL command:

    CREATE DATABASE mailserver;
    - +

    In this section you will create the basic database called mailserver and two users:

    - - - - - - - - - - - - - - - - - - - - -
    UserPermissionsPurpose
    mailserverreadUsed by Postfix/Dovecot
    mailadminread/writeUsed by you
    Used by Roundcube (for password changes)
    -

    Create the database users:

    grant all privileges on mailserver.* to 'mailadmin'@'localhost' identified by 'MAILADMIN-PASSWORD-HERE';
    grant select on mailserver.* to 'mailserver'@'127.0.0.1' identified by 'MAILSERVER-PASSWORD-HERE';
    - +

    By now you have an empty database and two user accounts to access it. Now you need three tables:

    • virtual_domains
    • @@ -144,32 +120,18 @@ limitation.

    CREATE TABLE IF NOT EXISTS `virtual_aliases` (
    `id` int(11) NOT NULL auto_increment,
    `domain_id` int(11) NOT NULL,
    `source` varchar(100) NOT NULL,
    `destination` varchar(100) NOT NULL,
    PRIMARY KEY (`id`),
    FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
    );
    CREATE TABLE IF NOT EXISTS `virtual_users` (
    `id` int(11) NOT NULL auto_increment,
    `domain_id` int(11) NOT NULL,
    `email` varchar(100) NOT NULL,
    `password` varchar(150) NOT NULL,
    `quota` bigint(11) NOT NULL DEFAULT 0,
    PRIMARY KEY (`id`),
    UNIQUE KEY `email` (`email`),
    FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
    );
    - +

    The first table keeps the list of domains that your mail server will be responsible for. Each row in this table represents a domain.

    • id: A unique number identifying each row. It is set automatically.
    • name: Domain name.
    - - + +

    The second table contains information about your users – or rather: your mailboxes. Each mail account requires one row in this table.

      @@ -187,41 +149,12 @@ schemes should get a new password if possible to increase security. can take up. The default value is 0 which applies the default quota. This is an optional feature that is discussed later.
    - - + +

    The third table contain optional forwardings from one email address to another – or several other – addresses.

    • id: A unique number identifying each row. It is set automatically.
    • @@ -229,56 +162,21 @@ later.
    • source: The alias email address.
    • destination: The email address where this alias gets forwarded to.
    - +

    Too much theory so far? I can imagine. Let’s populate the database with an example.org domain, a john@example.org email account and a forwarding of jack@example.org to john@example.org. We will use that information in the next chapter to play with.

    @@ -293,10 +191,10 @@ chapter to play with.

    …to create a secure hash of the simple password “summersun”. Once you have installed Dovecot you can try that yourself but you will get a different output. The reason is that the passwords are salted. Every time you will get a different hash. That prevents -reverse-engineering the original password.

    \ No newline at end of file + \ No newline at end of file diff --git a/ispmail-trixie/dns-records/index.html b/ispmail-trixie/dns-records/index.html index 5e0a573..8a57449 100644 --- a/ispmail-trixie/dns-records/index.html +++ b/ispmail-trixie/dns-records/index.html @@ -1,4 +1,4 @@ - DNS records | ISPmail Guide - Skip to content
    + Skip to content

    DNS records

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    +

    DNS records

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    As shown in the slideshow, you need to have proper DNS records set up. Say that you want to receive emails for the example.com domain. If some other mail server on the internet wants to send an email to your server, it looks for two records:

    @@ -104,17 +97,17 @@ know how to reach it.

    email delivery (SMTP).

    - - + +

    In zone syntax you would create something like:

    @ IN MX 10 smtp
    smtp IN A 100.64.17.3
    smtp IN AAAA fd7a:115c:a1e0::17

    If possible, also add a PTR record that makes the IP addresses point back to the name smtp.example.com. Other mail servers may be more likely so flag your sent emails as spam if you do not have a PTR record. Preferable the forward (A/AAAA) and reverse (PTR) records match.

    -
    +
    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/dovecot/index.html b/ispmail-trixie/dovecot/index.html index 38e9fdc..f263398 100644 --- a/ispmail-trixie/dovecot/index.html +++ b/ispmail-trixie/dovecot/index.html @@ -1,4 +1,4 @@ - Dovecot | ISPmail Guide - Skip to content
    + Skip to content

    Dovecot

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    +

    Dovecot

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    In this chapter we will configure Dovecot so that it knows how to deliver incoming emails.

    - +

    On your disk all the mailboxes will live in the directory /var/vmail. To separate the mailboxes from the rest of your system, let’s create a new user and group that will own the mailboxes:

    Run this on your server
    groupadd --system vmail
    useradd --system --gid vmail vmail
    mkdir -p /var/vmail
    chown -R vmail:vmail /var/vmail
    chmod u=rwx,g=rx,o= /var/vmail
    - +

    The configuration files for Dovecot are found in /etc/dovecot/conf.d. All these files are loaded by Dovecot. This is done by this magical line at the end of the /etc/dovecot/dovecot.conf file:

    !include conf.d/*.conf

    It loads all files in /etc/dovecot/conf.d/ that end in “.conf” in alphanumerical order. Let’s edit a couple of files for our purpose.

    - +

    The /etc/dovecot/conf.d/10-auth.conf file is dealing with authentication. At the end of this file you will find a list of authentication backends that Dovecot ships with. By default it will use system users (those from /etc/passwd). But we want to use the MariaDB database backend. Please comment out all include statements:

    Edit your /etc/dovecot/conf.d/10-auth.conf
    #!include auth-system.conf.ext
    #!include auth-sql.conf.ext
    #!include auth-ldap.conf.ext
    #!include auth-passwdfile.conf.ext
    #!include auth-checkpassword.conf.ext
    #!include auth-static.conf.ext

    Every line starting with # is disabled. Only lines starting with ! are considered.

    - +

    The file at /etc/dovecot/conf.d/10-mail.conf contains many settings regarding mailboxes, like where they are located, who owns them and what is their layout? Create a new file /etc/dovecot/conf.d/99-ispmail-mail.conf that overrides these defaults:

    @@ -117,26 +110,26 @@ directory. used that schema in previous guides and make sure you can migrate your mailboxes from other mail servers. This overrides the setting in in 10-mail.conf. - +

    This configuration file at /etc/dovecot/conf.d/10-master.conf deals with Dovecot’s services. A service is a part of Dovecot that listens on a TCP port or a UNIX socket so that other parts of your system can use it. We want Postfix to use Dovecot for authentication. So we need to change the service auth section:

    Run this on your server
    cat > /etc/dovecot/conf.d/99-ispmail-master.conf << EOF
    service auth {
    unix_listener /var/spool/postfix/private/dovecot-auth {
    mode = 0660
    user = postfix
    group = postfix
    }
    }
    EOF

    That way Dovecot will put a communication socket into /var/spool/postfix/private/dovecot-auth. It will allow Postfix to authenticate your users which is relevant later when we set up relaying.

    - +

    Earlier in this guide you created both a key and a certificate file to encrypt the communication with IMAPS and HTTPS between the users and your mail server. You need to tell Dovecot where to find these files. Also set ssl=required to prevent that someone sends their password without encryption. Again we will create a new file 99-ispmail-ssl.conf to override the defaults.

    - +
    Run this on your server
    cat > /etc/dovecot/conf.d/99-ispmail-ssl.conf << EOF
    ssl = required
    ssl_server_cert_file = /etc/letsencrypt/live/mail.example.org/fullchain.pem
    ssl_server_key_file = /etc/letsencrypt/live/mail.example.org/privkey.pem
    EOF
    - +

    There is one setting in the /etc/dovecot/conf.d/20-lmtp.conf that will mess up the recipient’s email address in our setup: auth_username_format. So let’s override it:

    Run this on your server
    cat > /etc/dovecot/conf.d/99-ispmail-lmtp-username-format.conf << EOF
    protocol lmtp {
    auth_username_format =
    }
    EOF
    - +

    Let’s tell Dovecot where to find information on an valid users (userdb) and their passwords (passdb). There are suggestions in the auth-sql.conf.ext file but we will add our own file:

    Run this on your server
    cat > /etc/dovecot/conf.d/99-ispmail-sql.conf << EOF
    sql_driver = mysql
    @@ -155,7 +148,7 @@ make some space.

    Dovecot can also read the path to a user’s home directory and the user-ID and group-ID from the database. Our setup has a fixed schema for the home directory (/var/vmail/DOMAIN/USER) (as defined by mail_home) and the user and group are always vmail and vmail.

    - +

    Later, we will implement server-side automation using Sieve rules. By default, Dovecot exposes two TCP ports to the internet: 2000 and 4190. Port 2000 is deprecated anyway and can be safely disabled, while port 4190 is the one we will use. However, unless you have a compelling reason, it is recommended not to make this port publicly accessible. So let @@ -163,7 +156,7 @@ us restrict it to the localhost interface:

    Run this on your server
    cat > /etc/dovecot/conf.d/99-ispmail-managesieve.conf << EOF
    service managesieve-login {
    # Listen only on localhost
    inet_listener sieve {
    listen= 127.0.0.1
    port = 4190
    }
    # Disable the deprecated listener
    inet_listener sieve_deprecated {
    port = 0
    }
    }
    EOF

    (Thanks to Thomas Gauweiler for spotting that.)

    - +

    Restart Dovecot from the shell:

    Run this on your server
    systemctl restart dovecot

    Check your logs:

    @@ -171,13 +164,13 @@ us restrict it to the localhost interface:

    You should see:

    dovecot[13309]: master: Dovecot v2.4.1-4 (7d8c0e5759) starting up for imap, lmtp, sieve (core dumps disabled)
    systemd[1]: Started dovecot.service - Dovecot IMAP/POP3 email server.

    If you get any error messages please double-check your configuration files.

    -
    +
    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/going-live/index.html b/ispmail-trixie/going-live/index.html index cda2ff3..bb12b22 100644 --- a/ispmail-trixie/going-live/index.html +++ b/ispmail-trixie/going-live/index.html @@ -1,4 +1,4 @@ - Going live | ISPmail Guide - Skip to content
    + Skip to content

    Going live

    Before you take your new mail server into production, please replace the dummy database passwords by some actual random +

    Going live

    Before you take your new mail server into production, please replace the dummy database passwords by some actual random passwords:

    Run this on your server
    # Create two random passwords
    PW_MAILADMIN=$(pwgen -s 32 1)
    PW_MAILSERVER=$(pwgen -s 32 1)
    # Replace the dummy passwords
    sed -i "s|MAILADMIN-PASSWORD-HERE|$PW_MAILADMIN|g" /etc/roundcube/plugins/password/config.inc.php
    @@ -89,10 +82,10 @@ passwords:

    # Print the passwords for us to write down
    echo "mailadmin password: $PW_MAILADMIN"
    echo "mailserver password: $PW_MAILSERVER"

    Now you are ready to go live. Congratulations on making it this far. And please drop a comment at the bottom if you want -to proudly report that you have your new server up and running.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/imap/index.html b/ispmail-trixie/imap/index.html index 8581c2b..f8af16f 100644 --- a/ispmail-trixie/imap/index.html +++ b/ispmail-trixie/imap/index.html @@ -1,4 +1,4 @@ - IMAP | ISPmail Guide - Skip to content
    + Skip to content

    IMAP

    Your mail server relies on two primary protocols. We’ve already covered SMTP in detail, which handles the transfer +

    IMAP

    Your mail server relies on two primary protocols. We’ve already covered SMTP in detail, which handles the transfer of emails between servers. The other important protocol is IMAP – the Internet Message Access Protocol.

    Email clients such as Thunderbird, Roundcube, mutt or the mail apps on your smartphone use IMAP to retrieve and manage messages. The good news is that you don’t need to configure anything new on the server — it’s already set up. In fact, even Roundcube (your webmail application) communicates with the server via IMAP to access emails.

    - +

    You may not have heard of mutt before. It’s like the VIM editor but for mails. Very powerful but it only has a text-based user interface. For testing IMAP on mail servers it’s still a good way because you do not have to set up a complete account as in Thunderbird.

    @@ -94,19 +87,19 @@ complete account as in Thunderbird.

    imaps://user@server. The user is john@example.org on your server so you get this syntax.

    You should get prompted for the password which we set to summersun. If you get any certificate warnings then check if you used the correct server name. If the authentication has succeeded, you will see John’s inbox:

    -

    Mutt showing an email in the inbox

    +

    Mutt showing an email in the inbox

    These are test emails that you sent earlier using swaks. You open an email by pressing Enter and get back using q. Mainly we wanted to check that IMAP access works.

    - +

    Mutt can not only speak IMAP – it can access an inbox (or maildir) on your disk directly as well:

    Run this on your server
    mutt -f /var/vmail/example.org/john/Maildir/

    That way you will not be forced to authenticate as you are working with the file system.

    - +

    A typical account setup in Thunderbird looks like:

    -

    Thunderbird account setup

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/index.html b/ispmail-trixie/index.html index 0acdcce..6cbcb01 100644 --- a/ispmail-trixie/index.html +++ b/ispmail-trixie/index.html @@ -1,4 +1,4 @@ - Start here | ISPmail Guide - Skip to content
    + Skip to content

    Start here

    Good to have you here. This is the 12th edition of the ISPmail guide. A free guide to setting up a mail server for +

    Start here

    Good to have you here. This is the 12th edition of the ISPmail guide. A free guide to setting up a mail server for friends and family using open-source software. Email on the internet nowadays is in the hands of few huge companies. Take back control and host your own mail server. Get a cheap virtual server and read along. This guide is comprehensive and will walk you through everything you need to know. I am publishing this guide without any commercial motives. All you need to invest is your time. And thanks to Debian you will get automatic security updates and do not have to worry about anything until the next stable release comes out in 2-3 years. And perhaps you come back then to upgrade your server.

    - +
    • Receive emails on (multiple) domains.
    • Filter out spam.
    • @@ -100,7 +93,7 @@ domain. Or send out-of-office notifications.
    • Mitigate brute force attacks.
    - +
    • Linux experience. Preferably a Debian-derivative. No godlike skills required. But know your basics: navigating the file system, editing files, watching log files. Have some basic understanding of DNS. Bonus points if you have played @@ -131,7 +124,7 @@ parts even if they appear confusing at first. If you get lost just submit your q throughout this guide and help is on the way. Or join the chat channel.
    - +

    If you just want to have a working mail server and do not care how it works then this guide may not be for you. There is an automated installation script that does all the steps of this guide automatically for you. But that is no replacement for reading this guide and understanding how the server works. It is @@ -143,7 +136,7 @@ if you like. But I have a feeling that we meet again. And you will probably not easy route.

    There are also other projects that give you a ready solution like mailinabox, iRedMail or Mailcow.

    - +

    The last updates to this guide – up to Debian Bookworm – were mainly minor changes. However this time I have spent many weeks to improve the guide. Most sections are completely rewritten. Explanations about SMTP versus submission were added. I dived deep into RFCs and reference documentation. I have used more features of the @@ -152,12 +145,12 @@ visual guides like task lists or image galleries or foldout sections to help you server without getting lost. And I have replaced all my configuration examples with blocks that you can copy/paste into your shell. So this guide is supposed to be shorter and faster to follow while at the same time trying to be more comprehensive. Please leave your feedback in the comment sections whether this approach appeals to you.

    - +

    The entire tutorial is split into several pages. You can find the different chapters on the left. The navigation within -a chapter can be found on the right. Let’s go.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/install-debian/index.html b/ispmail-trixie/install-debian/index.html index 9fc5931..fe513d8 100644 --- a/ispmail-trixie/install-debian/index.html +++ b/ispmail-trixie/install-debian/index.html @@ -1,4 +1,4 @@ - Installing Debian | ISPmail Guide - Skip to content
    + Skip to content

    Installing Debian

    +

    Installing Debian

    You have a blank computer or virtual machine? Then simply install Debian Trixie yourself. Get a boot medium from the Debian website. The smaller network installer is sufficient – it will download all required packages directly from the internet. Make sure you choose ‘English’ as the installation language @@ -88,16 +81,16 @@ searching for English error messages on the internet.

    Most of the installation is pretty straightforward. You don’t need me holding your hand. However I strongly recommend that you use the logical volume manager (LVM) for your partitions to stay flexible if your server grows. See my article on LVM if you want some help understanding its concept.

    - +

    These are the relevant paths and the minimum amount of space I would suggest. If you use LVM, enlarging partitions later is very simple.

    • Directory/ (operating system – 5 GB)
      • Directoryvar/
        • Directoryvmail/ (actual emails will be stored here – 10 GB)
        • Directorylog/ -
          • Directoryjournal/ (systemd saves logs here – 5 GB)
      • Directorytmp/ (temporary storage – 1 GB)
    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/install-the-software-packages/index.html b/ispmail-trixie/install-the-software-packages/index.html index 39b01cd..b7abaf4 100644 --- a/ispmail-trixie/install-the-software-packages/index.html +++ b/ispmail-trixie/install-the-software-packages/index.html @@ -1,4 +1,4 @@ - Install software packages | ISPmail Guide - Skip to content
    + Skip to content

    Install software packages

    Let’s install the necessary Debian packages. Run this command as root on your server as root:

    +

    Install software packages

    Let’s install the necessary Debian packages. Run this command as root on your server as root:

    Run this on your server
    apt update
    DEBIAN_FRONTEND=noninteractive \
    apt -y install postfix-mysql dovecot-mysql \
    dovecot-imapd dovecot-lmtpd dovecot-managesieved \
    apache2 python3-certbot-apache libapache2-mod-php \
    php-intl php-mbstring php-xml unzip certbot \
    roundcube-mysql roundcube roundcube-plugins swaks libnet-ssleay-perl \
    mutt unattended-upgrades mariadb-server \
    rspamd redis-server opendkim-tools bind9-dnsutils pwgen

    While the server is downloading and installing the packages, let me give you a quick explanation of each package:

      @@ -128,10 +121,10 @@ Not strictly necessary. But a nice tool to verify DKIM signatures. You know, for Provides the infamous dig command for an easy way to do DNS lookups.
    • pwgen
      A password generator.
    • -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/lmtp/index.html b/ispmail-trixie/lmtp/index.html index 568b166..6da9a87 100644 --- a/ispmail-trixie/lmtp/index.html +++ b/ispmail-trixie/lmtp/index.html @@ -1,4 +1,4 @@ - LMTP | ISPmail Guide - Skip to content
    + Skip to content

    LMTP

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    +

    LMTP

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    Glad to see that you are still with me. We are very close to receiving our first email. If you feel lost, please review the slideshow from earlier in this guide.

    As explained in the previous section, Postfix speaks SMTP and receives the email from the internet. Postfix could even @@ -90,7 +83,7 @@ well.

    happens using LMTP – the local mail transfer protocol. LMTP is a lightweight variant of SMTP. It is meant for email communication between internal services that trust each other.

    - +

    First we need to add a UNIX socket where Dovecot listens for incoming LMTP connections:

    Run this on your server
    # Add an LMTP listening socket in Dovecot
    cat > /etc/dovecot/conf.d/99-ispmail-lmtp-listener.conf << EOF
    service lmtp {
    # Used internally by Dovecot
    unix_listener lmtp {
    }
    # Listen to LMTP connections from Postfix
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
    }
    }
    EOF
    @@ -100,7 +93,7 @@ will be adding. It makes Dovecot create a socket file at /var/s home in /var/spool/postfix it can access that socket to speak LMTP with Dovecot.

    A socket is similar to a TCP port but it’s only available for other processes running on same system. That’s why you also set the access mode, user and group so that Postfix can actually use it.

    - +

    The “virtual_transport” in Postfix defines the service to use for delivering emails to the local system. Dovecot has created a socket file and is ready to listen to incoming LMTP connections. We just need to tell Postfix to send emails there. So please run:

    @@ -108,8 +101,8 @@ there. So please run:

    The syntax looks crazy, but it’s actually simple. You just told Postfix to use the LMTP protocol. And that we want to use a UNIX socket on the same system (instead of a TCP connection). And the socket file is located at /var/spool/postfix/private/dovecot-lmtp – because /var/spool/postfix is the Postfix’s home directory.

    - -
    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    + +
    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    Finally we are ready for our first email. Using the swaks command you can create a test email to john@example.org and send it to Postfix:

    Run this on your server
    swaks --server localhost --to john@example.org
    @@ -129,13 +122,13 @@ on your system. But this is the actual mail that got delivered. You can view it you just sent using swaks.

    Don’t worry about the other files like maildirfolder or the files that sound like dovecot…. Those help Dovecot keep track of the mailbox. You can safely ignore them.

    - +

    Obviously the previous examples dealt with the example.org domain which is not your actual domain. Feel free to add your own domain to the database and create a test user. The later -section on managing users will explain that in detail.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/managing-users-aliases-and-domains/index.html b/ispmail-trixie/managing-users-aliases-and-domains/index.html index 0c595c0..0045291 100644 --- a/ispmail-trixie/managing-users-aliases-and-domains/index.html +++ b/ispmail-trixie/managing-users-aliases-and-domains/index.html @@ -1,4 +1,4 @@ - Managing users, aliases and domains | ISPmail Guide - Skip to content
    + Skip to content

    Managing users, aliases and domains

    Maybe you already know what you have to do to create mail domains and mail users. After all I tried to explain the +

    Managing users, aliases and domains

    Maybe you already know what you have to do to create mail domains and mail users. After all I tried to explain the database schema in the section that dealt with preparing the database. But if that wasn’t clear enough let me explain what you need to do to manage your mail accounts.

    - +

    The following sections explain the changes and SQL queries you can use for common management tasks:

    - +

    Insert a new row into the virtual_domains table and set the name to the name of the new domain. (Do not forget to set up SPF and DKIM.)

    INSERT INTO virtual_domains (name) VALUES ("example.org");
    - +

    Delete the row from the virtual_domains table that has the right name. All aliases and users will automatically be deleted, too. However the mailboxes will stay on disk at /var/vmail/… and you need to delete them manually.

    DELETE FROM virtual_domains where name='example.org';
    - +

    Find out the id of the right domain from the virtual_domains table. The insert a new row into the virtual_users table. Set the domain_id to the value you just looked up in the virtual_domains table. Set the email field to the complete email address of the new user. Create a new password in a shell using the dovecot pw command and insert the result into the password field.

    INSERT INTO virtual_users
    (domain_id, email, password)
    VALUES
    ((SELECT id FROM virtual_domains WHERE name='example.org'), 'john@example.org','{CRYPT}$2y$05$.We…');
    - +

    Find the row in the virtual_users table by looking for the right email field. Create a new password in a shell using the dovecot pw command and insert the result into the password field.

    UPDATE virtual_users SET password='{CRYPT}$2y$05$.We…' WHERE email='email@address';
    - +

    Find the row in the virtual_users table by looking for the right email field and delete it. The mailbox will stay on disk at /var/vmail/… and you need to delete it manually

    DELETE FROM virtual_users WHERE email='john@example.org';
    - +

    You can forward emails from one (source) email to other addresses (destinations) – even outside of your mail server. Find out the id of the right domain (the part after the @ of the source email address) from the virtual_domains table. Create a new row in the virtual_aliases table for each destination (if you have multiple destination addresses). Set the source field to the complete source email address. And set the destination field to the respective complete destination email address.

    INSERT INTO virtual_aliases
    (domain_id, source, destination)
    VALUES
    (
    (SELECT id FROM virtual_domains WHERE name='example.org'),
    'melissa@example.org',
    'juila@example.net'
    );
    - +

    Find all rows in the virtual_aliases table by looking for the right source email address. Remove all rows that you lead to destination addresses you don’t want to forward email to.

    DELETE FROM virtual_aliases WHERE source='melissa@example.org';
    - +

    If you don’t like using SQL queries to manage your mail server you may like to install a web-based management software. Several developers contributed web interfaces for earlier versions of this guide and they will probably still work because the database schema has not changed. Your experience with these projects, or links to further projects, is very welcome in the comments.

    - +

    Homepage: http://ima.jungclaussen.com/
    Demo: http://ima.jungclaussen.com/demo/

    -

    ISPmail Admin screenshot

    - +

    ISPmail Admin screenshot

    +

    Christian G. has created a text-based program to help you manage your mail accounts. You may like it if you just want a little help adding accounts and setting passwords but not provide a full blown web interface.

    You can find his Python script at Github.

    - +

    You can also use a basic tool like Adminer to manage the tables if you don’t want to type out SQL. To set it up:

    Run this on your server
    apt install -y adminer
    a2enconf adminer
    systemctl reload apache2

    Now Adminer is available as https://mailserver.example.org/adminer and allows you to login:

    -

    Adminer login screen

    +

    Adminer login screen

    After login this is how the interface looks like:

    -

    Adminer main screen

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/overview/index.html b/ispmail-trixie/overview/index.html index e47eb91..04ff8e1 100644 --- a/ispmail-trixie/overview/index.html +++ b/ispmail-trixie/overview/index.html @@ -1,4 +1,4 @@ - Big picture | ISPmail Guide - Skip to content
    + Skip to content

    Big picture

    I have created a slideshow to help you understand the process of receiving an email from a remote mail server. Hopefully +

    Big picture

    I have created a slideshow to help you understand the process of receiving an email from a remote mail server. Hopefully it helps to get a better understanding of the steps involved in receiving email. We will prepare the necessary configuration in the next chapters.

    Use the arrows to navigate between slides:

    -
    • Slide 1
    • Slide 2
    • Slide 3
    • Slide 4
    • Slide 5
    • Slide 6
    • Slide 7
    • Slide 8
    • Slide 9
    • Slide 10
    • Slide 11
    • Slide 12
    • Slide 13
    • Slide 14
    • Slide 15
    • Slide 16
    • Slide 17
    • Slide 18
    • Slide 19
    • Slide 20
    • Slide 21
    • Slide 22
    • Slide 23
    • Slide 24
    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/postfix/index.html b/ispmail-trixie/postfix/index.html index 2f425a3..a0022de 100644 --- a/ispmail-trixie/postfix/index.html +++ b/ispmail-trixie/postfix/index.html @@ -1,4 +1,4 @@ - Postfix | ISPmail Guide - Skip to content
    + Skip to content

    Postfix

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    +

    Postfix

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    Now that other mail servers can locate your mail server, the next step is to make sure it can receive and process incoming emails. This task is handled by Postfix, which communicates using the SMTP protocol.

    Postfix knows if an email address is valid by checking for…

    @@ -89,7 +82,7 @@ incoming emails. This task is handled by Postfix, which communicates using the S
  • Virtual Aliases (do I have to redirect this address to another address?)
  • Virtual Mailboxes (do I have a valid mailbox to store the email to?)
  • - +

    There are different ways for Postfix to get that information. From text files, LDAP, MongoDB or PostgreSQL. Or via MariaDB – which is what we will use. But whatever kind of data source you configure, Postfix needs the information as a mapping. Consider it as a question and an answer.

    @@ -110,7 +103,7 @@ MariaDB – which is what we will use. But whatever kind of data source you conf and dbname definitions tell Postfix how to connect to the database. And the query asks the question if a certain domain is present in the database table virtual_domains. Using SELECT 1 we return just the number 1 if such an entry was found. In fact it does not matter what we return. Any answer is fine.

    - +

    Now let’s deal with aliases. As shown earlier an alias redirects an email to another email address. So the question and answer game goes like this:

      @@ -126,7 +119,7 @@ and answer game goes like this:

      Run this code to create the appropriate mapping file:

      Run this on your server
      cat > /etc/postfix/mariadb-virtual-alias-maps.cf << EOF
      user = mailserver
      password = MAILSERVER-PASSWORD-HERE
      hosts = 127.0.0.1
      dbname = mailserver
      query = SELECT destination FROM virtual_aliases WHERE source='%s'
      EOF

      The query now gets all the destination email addresses from the database for a certain source email address.

      - +

      The last mapping we need is a query to find valid mailboxes. Without further ado:

      Run this on your server
      cat > /etc/postfix/mariadb-virtual-mailbox-maps.cf << EOF
      user = mailserver
      password = MAILSERVER-PASSWORD-HERE
      hosts = 127.0.0.1
      dbname = mailserver
      query = SELECT 1 FROM virtual_users WHERE email='%s'
      EOF

      Just the same story as with virtual domains. The database returns 1 if there is a virtual_users record matching that @@ -135,7 +128,7 @@ specific email address.

      saving the email to disk on its own. In our setup the email will be passed on to Dovecot in a later step. Dovecot will then handle the files on disk. Postfix just has to know is whether a mailbox exists. And that’s why any answer is sufficient here.

      - +

      You have created the config files for the three mappings. Now you just need to tell Postfix to use them:

      Run this on your server
      postconf virtual_mailbox_domains=mysql:/etc/postfix/mariadb-virtual-mailbox-domains.cf
      postconf virtual_mailbox_maps=mysql:/etc/postfix/mariadb-virtual-mailbox-maps.cf
      postconf virtual_alias_maps=mysql:/etc/postfix/mariadb-virtual-alias-maps.cf
      chown root:postfix /etc/postfix/mariadb-*.cf
      chmod o= /etc/postfix/mariadb-*.cf
      @@ -143,10 +136,10 @@ sufficient here.

      to restart Postfix.

      The last two lines set the owner of the config files (user=root, group=postfix) and make sure that others have no access. After all a database password is found in these files.

      -
    +
    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/quotas/index.html b/ispmail-trixie/quotas/index.html index 6b11ead..7646616 100644 --- a/ispmail-trixie/quotas/index.html +++ b/ispmail-trixie/quotas/index.html @@ -1,4 +1,4 @@ - Quotas | ISPmail Guide - Skip to content
    + Skip to content

    Quotas

    -

    Quotas

    + +find a solution for that.

    Quotas are size limits for users. You can make sure that users do not waste arbitrary amounts of disk space but are forced to clean up old emails every now and then.

    The magic happens in two places:

    @@ -89,8 +82,8 @@ forced to clean up old emails every now and then.

  • Dovecot needs to keep track of the quota and how much the user has already used up of it.
  • Postfix needs to reject new emails if the user’s mailbox is over quota.
  • - - + +

    As usual we need a new piece of configuration to enable the quota plugin and define how we want it to behave:

    Run this on your server
    cat > /etc/dovecot/conf.d/99-ispmail-quota.conf << 'EOF'
    # Enable the quota plugin
    mail_plugins {
    quota = yes
    }
    # Set global defaults. Keep this outside of a "quota {}" section so that it
    # can be overriden with data from the virtual_users table.
    # Allow 5 GB of space per default.
    quota_storage_size = 5G
    @@ -110,7 +103,7 @@ even if the user is over quota.

    if [ $LEVEL = "below" ]; then
    MAIL+="Thanks for making some space. You will now be able to receive emails again."
    elif [ $LEVEL -eq 80 ]; then
    MAIL+="Your mailbox is currently using up 80% of the maximum space."
    MAIL+="\nPlease consider deleting some emails. If your used space reached"
    MAIL+="\n100% then you would not be able to receive further emails. I will"
    MAIL+="\nhowever send you another email in that case."
    MAIL+="\n"
    MAIL+="\nThanks for your attention."
    elif [ $LEVEL -eq 100 ]; then
    MAIL+="I am afraid to tell you that your mailbox is now 100% full."
    MAIL+="\nNew emails to your address will be rejected by the server."
    MAIL+="\nPlease delete some emails immediately. I will send you another"
    MAIL+="\nemail once you have made some space."
    MAIL+="\n"
    MAIL+="\nThanks for your attention."
    fi
    echo -e $MAIL | /usr/lib/dovecot/dovecot-lda -d $USER -o quota_enforce=no
    EOF
    chmod u=rwx,g=rx,o= /usr/local/bin/ispmail-quota-warning.sh
    chown vmail:vmail /usr/local/bin/ispmail-quota-warning.sh
    - +

    By default you will probably allow all users to use a certain amount of disk space for their emails. That would be the global value that you set using quota_storage_size = ….

    But maybe you have some special users that need a different value. For a power user you could allow more space than for @@ -124,7 +117,7 @@ other users. Then set the quota field in his record in t

    IF(quota > 0, CONCAT(quota, 'B'), NULL) AS quota_storage_size

    That’s the SQL way of saying: if “quota” is 0, then return NULL. NULL tells Dovecot to fall back to the global value. Otherwise add a “B” (for “bytes” – Dovecot requires that) and return that.

    - +

    Now that quota restrictions are in place, you can ask Dovecot for the current status of all mailboxes:

    Run this on your server
    doveadm quota get -A

    You will get output like this:

    @@ -136,7 +129,7 @@ Otherwise add a “B” (for “bytes” – Dovecot requires that) and return t

    The current configuration just cares about the space that is used on disk. So in the above example he has 22,856 KB used of the 1 GB limit – which is 2%. And he has a total of 19 messages but there is no limit to that.

    - +

    You may wonder why there is a quota-status service. If a user is over quota then it would reject an more incoming emails. But Postfix – which sits in front front of Dovecot – would still happily accept more emails. For a sender on a remote server it looks like the email was delivered. But it’s now stuck between Postfix and Dovecot until the user makes @@ -152,14 +145,14 @@ queries. The protocol is very simple and you can even play with it as a human:action=OK or

  • action=554 5.2.2 Quota exceeded (mailbox for user is full)
  • - +

    Telling Postfix to use the quota-status service is suprisingly simple:

    Run this on your server
    postconf smtpd_recipient_restrictions="check_policy_service inet:localhost:13373"
    -
    - +

    If you are curious to see this working, then set John’s mailbox quota to 5 KB:

    # mariadb mailserver
    mysql> update virtual_users set quota=5120 where email='john@example.org';

    Verify that he now has a limit of 5 KB:

    @@ -168,7 +161,7 @@ find a solution for that.

    swaks --server localhost --to john@example.org -tls

    After a few emails you will see the rejection message:

    -> RCPT TO:john@example.org
    <** 452 4.2.2 john@example.org: Recipient address rejected: Mailbox is full and cannot receive any more emails
    - +

    These are things you should consider if quotas do not seem to work properly:

    - +
    +
  • https://doc.dovecot.org/2.4.2/core/plugins/quota.html#quota-service
  • +
  • https://sys4.de/en/blog/postfix-dovecot-mailbox-quota/
  • +
  • https://www.postfix.org/SMTPD_POLICY_README.html
  • +
    \ No newline at end of file + \ No newline at end of file diff --git a/ispmail-trixie/relaying/index.html b/ispmail-trixie/relaying/index.html index 895e643..df30766 100644 --- a/ispmail-trixie/relaying/index.html +++ b/ispmail-trixie/relaying/index.html @@ -1,4 +1,4 @@ - Sending / Relaying | ISPmail Guide - Skip to content
    + Skip to content

    Sending / Relaying

    Your mail server is almost ready for use. But one puzzle piece is missing. Your users can receive emails but they cannot +

    Sending / Relaying

    Your mail server is almost ready for use. But one puzzle piece is missing. Your users can receive emails but they cannot send them yet. This part of the guide is a bit longer than others because forwarding emails has security implications.

    Let’s begin with the difference of how users send emails versus how mail servers send emails.

      @@ -100,73 +93,29 @@ expected to use the TCP port 587 which is called the submission port. M
    • The connection is encrypted so that the password can be safely transmitted
    • The sender address of the email matches the user’s account
    - +

    Let’s compare those services and ports side-by-side:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Service nameSMTPSubmissionSubmissionS (S=secure)
    TCP Port25587465
    Meant forOther mail serversOur usersOur users
    Used byMail transport agent (MTA)Mail user agent (MUA)Mail user agent (MUA)
    Transport encryptionOff. STARTTLS optional.Off. STARTTLS mandatory.TLS all the time
    AuthenticationOptional 1MandatoryMandatory
    Accepted senderAnyoneOur own usersOur own users
    Accepted receiversOur own usersAnyoneAnyone
    Your home ISPmay block this portwill allow this portwill allow this port
    +

    | Service name | SMTP | Submission | SubmissionS (S=secure) | +| -------------------- | --------------------------- | ---------------------------- | ---------------------- | +| TCP Port | 25 | 587 | 465 | +| Meant for | Other mail servers | Our users | Our users | +| Used by | Mail transport agent (MTA) | Mail user agent (MUA) | Mail user agent (MUA) | +| Transport encryption | Off. STARTTLS optional. | Off. STARTTLS mandatory. | TLS all the time | +| Authentication | Optional [^1] | Mandatory | Mandatory | +| Accepted sender | Anyone | Our own users | Our own users | +| Accepted receivers | Our own users | Anyone | Anyone | +| Your home ISP | may block this port | will allow this port | will allow this port |

    +

    [^1]: +In previous guides I recommended to set smtpd_sasl_auth_enable=yes globally in the main.cf. That would indeed +enable authentication on port 25. For a clearer separation I now rather suggest to leave it out (default is no) +and just enable authentication on the submission service in the master.cf file. A possible scenario that +required this setting to be on would be if your server were a relay (smarthost) for other servers using +authentication..

    I hope this helps clarify the distinction. Human users must use the submission service on either port 587 or 465. The key difference is that connections on port 587 start unencrypted, and the email client must issue the STARTTLS command to enable encryption. In contrast, port 465 requires the email client to use TLS encryption right from the first byte of communication.

    - +

    All Postfix services are declared in the /etc/postfix/master.cf file. Most of them are used by Postfix internally, like pickup, cleanup, rewrite or bounce. But submission is not configured by default. Let’s fix that.

    Run this on your server
    postconf -M submission/inet="submission inet n - y - - smtpd"
    postconf -P "submission/inet/syslog_name=postfix/submission"
    postconf -P "submission/inet/smtpd_tls_security_level=encrypt"
    postconf -P "submission/inet/smtpd_sasl_auth_enable=yes"
    postconf -P "submission/inet/smtpd_sasl_type=dovecot"
    postconf -P "submission/inet/smtpd_sasl_path=private/dovecot-auth"
    postconf -P "submission/inet/smtpd_recipient_restrictions=permit_sasl_authenticated,reject"
    postconf -P "submission/inet/smtpd_sender_restrictions=reject_sender_login_mismatch,permit_sasl_authenticated,reject"
    @@ -201,12 +150,12 @@ can be.
    Run this on your server
    postconf -M submissions/inet="submissions inet n - y - - smtpd"
    postconf -P "submissions/inet/syslog_name=postfix/submissions"
    postconf -P "submissions/inet/smtpd_tls_wrappermode=yes"
    postconf -P "submissions/inet/smtpd_sasl_auth_enable=yes"
    postconf -P "submissions/inet/smtpd_sasl_type=dovecot"
    postconf -P "submissions/inet/smtpd_sasl_path=private/dovecot-auth"
    postconf -P "submissions/inet/smtpd_recipient_restrictions=permit_sasl_authenticated,reject"
    postconf -P "submissions/inet/smtpd_sender_restrictions=reject_sender_login_mismatch,permit_sasl_authenticated,reject"
    postfix reload

    The only difference to the submission (without the “s” at the end) is the smtpd_tls_wrappermode that switches on TLS encryption right from the start of a connection.

    - +

    Whenever possible we should encrypt our traffic. For our users’ passwords we make it mandatory. But even for server-to-server connections we should encourage it. Do not confuse it with end-to-end encryption of emails. That required using PGP or S/MIME. What we are dealing here is transport encryption. It encrypts the communication between a peer server and your mail server. What the peer server does with our email is beyond our control.

    - +
    Run this on your server
    postconf smtp_tls_security_level=encrypt
    postconf smtpd_tls_security_level=encrypt
    postconf smtp_tls_mandatory_protocols=">=TLSv1.2"
    postconf smtpd_tls_mandatory_protocols=">=TLSv1.2"
    postconf smtp_tls_mandatory_ciphers=high
    postconf smtpd_tls_mandatory_ciphers=high
    postconf smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.org/fullchain.pem
    postconf smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.org/privkey.pem

    What it means:

      @@ -222,18 +171,18 @@ The list of encryption algorithms that you allow for communnication. Default is
    • smtpd_tls_cert_file and smtpd_tls_key_file:
      Where to find the private key and certificate for encryption.
    -

    Please note that configuration in main.cf applies to all Postfix services. So the above configuration enabled encryption for both server-to-server and human-to-server (submission) services. The smtpd_sasl_auth_enable will only -be set for the submission service to enable authentication there.1

    - +

    Protecting against forged sender addresses

    Section titled “Protecting against forged sender addresses”

    Before we can actually test the setup, there is another security issue we need to address. While Postfix is configured to relay emails only after a successful login with a valid username and password, it does not prevent an authenticated user from impersonating another sender. For example, someone could log in as john@example.org but send an email @@ -267,24 +216,24 @@ sides. Let’s create it:

    Run this on your server
    swaks --server localhost:587 \
    --from john@example.org \
    --to list@example.com \
    --tls \
    --auth-user john@example.org \
    --auth-password summersun

    That will work:

    <~ 250 2.0.0 Ok: queued as AFFF12292A
    - + + +

    So far you have set up the submission service(s), enabled encryption and connected Postfix to Dovecot for authentication. Let’s try it. Our first test email will be sent without encryption and authentication:

    Run this on your server
    swaks --server localhost:587 \
    --from john@example.org \
    --to lisa@example.com

    Postfix should tell you that it will not accept an email without encryption:

    <** 530 5.7.0 Must issue a STARTTLS command first
    - +

    Our second attempt will enable (STARTTLS) encryption – but still no authentication:

    Run this on your server
    swaks --server localhost:587 \
    --from john@example.org \
    --to lisa@example.com \
    -tls

    Postfix will still reject the email because we refused to authenticate:

    ~> MAIL FROM:<john@example.org>
    <~ 250 2.1.0 Ok
    ~> RCPT TO:<lisa@example.com>
    <~* 553 5.7.1 <john@example.org>: Sender address rejected: not logged in
    - +
    Run this on your server
    swaks --server localhost:587 \
    --from john@example.org \
    --to lisa@example.com \
    -tls \
    --auth-user john@example.org \
    --auth-password summersun

    Also give the submissions service a try:

    Run this on your server
    swaks --server localhost:465 \
    --from john@example.org \
    --to lisa@example.com \
    --tls-on-connect \
    --auth-user john@example.org \
    --auth-password summersun
    @@ -296,10 +245,10 @@ STARTTLS to switch to encryption) we use --tls-on-connectthe sender has authenticated successfully with a valid username and password.

    I have created two illustrations to explain it.

    - -
    telnet localhost submission

    The server will let you in:

    Trying 127.0.0.1…
    Connected to localhost.
    Escape character is '^]'.
    220 webmail ESMTP Postfix (Debian)
    @@ -386,21 +335,10 @@ ASCII. So in the PLAIN method that information is
    NULL-BYTE + USERNAME + NULL-BYTE + PASSWORD

    So for John’s case you can easily create the Base64 string using:

    printf '\0john@example.org\0summersun' | base64
    -

    As a result you will get the exact same string you used above with “AUTH PLAIN”.

    -
    -
      -
    1. -

      In previous guides I recommended to set smtpd_sasl_auth_enable=yes globally in the main.cf. That would indeed -enable authentication on port 25. For a clearer separation I now rather suggest to leave it out (default is no) -and just enable authentication on the submission service in the master.cf file. A possible scenario that -required this setting to be on would be if your server were a relay (smarthost) for other servers using -authentication.. 2

      -
    2. -
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/tls-certificate/index.html b/ispmail-trixie/tls-certificate/index.html index b9a377b..63f3999 100644 --- a/ispmail-trixie/tls-certificate/index.html +++ b/ispmail-trixie/tls-certificate/index.html @@ -1,4 +1,4 @@ - TLS certificate | ISPmail Guide - Skip to content
    + Skip to content

    TLS certificate

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    +

    TLS certificate

    Todo list for receiving emails
    1. 1

      DNS records point to your server

    2. 2

      Get a certificate from Let's Encrypt

    3. 3

      Postfix fetches information from MariaDB

    4. 4

      Dovecot fetches information from MariaDB

    5. 5

      Postfix hands over emails to Dovecot

    6. 6

      Dovecot saves the email to disk

    Your mail server can’t work properly without a valid TLS certificate. It will be used in three places:

    1. the webmail interface (driven by the Apache web server)
    2. @@ -94,20 +87,20 @@ an important part of the certificate. It must match the name your users use to t

      Wrong: Your mail server is addressed as smtp01.example.com. But the TLS certificate was issued to mail.example.org.

      So choose an FQDN for your mail server. For example I use webmail.workaround.org for my personal server.

      - +

      You already have the certbot software and the apache2 web server installed. Requesting a certificate from Let’s Encrypt is as simple as running the next command.

      - +
      Run this on your server
      certbot --apache --register-unsafely-without-email --agree-tos -d mail.example.org
      Click here to learn what the options mean…
        -
      • --apache: Use the HTTP challenge to verify that you are actually +
      • —apache: Use the HTTP challenge to verify that you are actually in control of the FQDN. The certbot plugin will add some configuration to intercept HTTP requests to /.well-known/acme-challenge/… on your web server. This is a fully automatic process that does not even have to stop your web server.
      • -
      • --register-unsafely-without-email: Do not ask for an email address to send to Let’s Encrypt. Before June 2025 +
      • —register-unsafely-without-email: Do not ask for an email address to send to Let’s Encrypt. Before June 2025 Let’s Encrypt used that address to inform you if your certificate is about to expire and the automatic renewal failed. Nowadays they do not need an email any more. But for historical reasons they still ask for it by default.
      • -
      • --agree-tos: Confirm that you have read Let’s Encrypt’s terms and conditions. Let’s be honest – nobody reads that.
      • +
      • —agree-tos: Confirm that you have read Let’s Encrypt’s terms and conditions. Let’s be honest – nobody reads that.
      • -d: The domain that the certificate will be issued to. This has to be the exact FQDN of your server.

      The output should look like:

      @@ -124,7 +117,7 @@ certificate along with your own for clients who may not know LetsEncrypt properl file to use when a piece of software asks where to find the certificate.
    3. privkey.pem: the private key file. Keep it secret.
    4. Well, actually those are not files but symbolic links pointing to the “archive” directory. But don’t worry about that.

      - +

      Your new certificate is only valid for 3 months. Fortunately the renewal is happening automatically. A systemd timer checks your certificate frequently and triggers a renewal one month before it expires.

      It is important that services that use the certificate load the new certificate after an automatic renewal. This shell @@ -134,10 +127,10 @@ command will create a file /etc/letsencrypt/cli.ini that

    # Adjust interactive output regarding automated renewal
    preconfigured-renewal = True
    EOF

    Perfect. You won’t have to worry about the certificate again.

    Click here to learn how the renewal works…

    These commands will show you the definition and status of the timer and the renewal service:

    Run this on your server
    systemctl status certbot.timer
    systemctl cat certbot.timer
    systemctl status certbot.service
    systemctl cat certbot.service

    Systemd timers are similar to cron jobs. They require more work to set up but have some nice features and make you -look cooler.

    \ No newline at end of file + \ No newline at end of file diff --git a/ispmail-trixie/upgrading/index.html b/ispmail-trixie/upgrading/index.html index 6bc246a..1e75460 100644 --- a/ispmail-trixie/upgrading/index.html +++ b/ispmail-trixie/upgrading/index.html @@ -1,4 +1,4 @@ - Upgrading from Debian Bookworm | ISPmail Guide - Skip to content
    + Skip to content

    Upgrading from Debian Bookworm

    +

    Upgrading from Debian Bookworm

    Did you follow the ISPmail guide for Debian Bookworm to install your mail server? Then let’s take it to Debian Trixie.

    - +

    I always try to keep things similar to previous versions of this guide. Most of us are happy with their mail servers and want to change as little as possible when a new Debian release comes along. Just a few changes that come with the newer software versions:

    @@ -95,7 +88,7 @@ authentication) and TCP 587 for human-to-server connections (with authentication
  • certbot is now using the python3-certbot-apache package. Getting and renewing certificates is now handled magically by Apache without any downtime or additional configuration.
  • - +

    A new Debian stable release comes with newer software versions. So I checked the changelogs to determine what we will have to change:

      @@ -105,10 +98,10 @@ have to change:

    • rspamd 3.4.1 -> 3.12.1. No breaking changes.
    • Roundcube 1.6.1 -> 1.6.11. No breaking changes.
    - +

    Do not try to upgrade your existing server using apt-get dist-upgrade. There are too many changes especially with Dovecot. Start with a fresh installation on another server and then migrate.

    - +

    At some point during the migration, you need switch your DNS record to point to the new server. There are a couple of options:

      @@ -120,7 +113,7 @@ server as a mail server already, because some companies attach a reputation<
    1. Add a second MX record pointing to your new server. Assign the same priority. That way you can safely switch off your old server and later remove its MX record.
    - +

    You need to copy the database that contains the control data about your email domains and accounts. Log into the old (Bookworm) server as root and back up the mailserver database. That is as easy as running…

    mariadb-dump mailserver > mailserver.sql
    @@ -128,13 +121,13 @@ old server and later remove its MX record.
    mariadb mailserver < mailserver.sql

    Obviously any database changes on the old server from now on will have to be done on the new server as well until the migration is done.

    - +

    Please check if any of your users have hashed passwords that are considered weak by Dovecot. Those passwords using a PLAIN-MD5 scheme are not accepted by Dovecot by default. But you can enable them again using:

    Terminal window
    cat > 99-ispmail-weak-schemes.conf << EOF
    auth_allow_weak_schemes = yes
    EOF

    Your users should change their passwords using Roundcube. That way a new hash with a more secure schema is created.

    - +

    If your users are using Roundcube as a webmail interface then you should migrate their data like their contact lists. Dump the SQL from the old server:

    Terminal window
    mariadb-dump roundcube > roundcube.sql
    @@ -144,13 +137,13 @@ Dump the SQL from the old server:

    the users table. So as a last step change that column if your new mail server has a new FQDN/hostname by running this SQL query on the new roundcube database:

    UPDATE users SET mail_host='new.mail.server';
    - +

    If you have been using rspamd with the Redis backend then copy over the Redis database from your previous server.

    Stop rspamd on both the old and the new server. Then:

    Terminal window
    rsync -va oldserver:/var/lib/redis/ /var/lib/redis/

    Once the redis database is started again on the new server, rspamc stat should show you that the training data is found.

    - +

    (Hot means: copy the files why they are still in use and potentially change while you do that.) Fortunately Dovecot uses the maildir format that stores emails as plain files on disk. Login to the new (Trixie) server and use rsync to copy over the mails from the old (Bookworm) mail server:

    @@ -162,21 +155,21 @@ synchronization.

    Another way to copy over the emails is using Dovecot’s doveadm-sync command. It may be especially handy if you need to copy emails from another server where you only have IMAP access but cannot access the files directly.

    - +

    Copy over everything in /etc/letsencrypt and /var/lib/rspamd/dkim from your old to the new server.

    Terminal window
    rsync -va oldserver:/etc/letsencrypt/archive/ /etc/letsencrypt/archive/
    rsync -va oldserver:/var/lib/rspamd/dkim/ /var/lib/rspamd/dkim/
    rsync -v oldserver:/etc/rspamd/dkim_selectors.map /etc/rspamd
    - +

    You told your users about the downtime, right? The time has come? Okay. Shut down Dovecot on both servers.

    - +

    (Cold means: the processes have stopped or you made sure that there is no user activity so that the files can be copied consistently.) Let’s synchronize again. rsync will only copy those files that have changed which makes it much faster than the first sync. On your new server run:

    Terminal window
    rsync -va --delete oldserver:/var/vmail/ /var/vmail/

    (The “--delete” option makes sure that files that have been removed from the old server will also be deleted from the new server. So if a user has deleted an email it will be deleted on the new server as well.)

    - +

    For all your domains you will have to change the DNS “MX” or “A” record to point to your new server.

    - +

    Accidents happen. And you don’t want to lose emails. So run this command to enable your safety net on the new server:

    postconf soft_bounce=yes

    This makes Postfix always keep emails in the queue that it would otherwise reject. So you can fix any errors and the @@ -185,15 +178,15 @@ time to see what emails get stuck in the queue. If you are certain that emails c “postsuper -d QUEUE-ID” (as shown in the “mailq” output).

    Once you are certain that emails are properly received and sent you can switch off the soft_bounce mode again:

    postconf soft_bounce=no
    - +

    If possible do a final backup of the old server. If users are not complaining then dismiss the old system after a week.

    - +

    You may see error messages like:

    Error: sieve: binary /var/vmail/example.org/user/.dovecot.svbin: read: binary stored with different major version 2.0 (!= 3.0; automatically fixed when re-compiled)
    -

    You may need to run sievec on those files.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/virtual-domains/index.html b/ispmail-trixie/virtual-domains/index.html index 9105216..b62615e 100644 --- a/ispmail-trixie/virtual-domains/index.html +++ b/ispmail-trixie/virtual-domains/index.html @@ -1,4 +1,4 @@ - Virtual domains | ISPmail Guide - Skip to content
    + Skip to content

    Virtual domains

    Your mail server will have one fully qualified domain name — for example, postbox.example.com. In this case, the base +

    Virtual domains

    Your mail server will have one fully qualified domain name — for example, postbox.example.com. In this case, the base domain is example.com. If someone visits https://example.com/, they might be greeted by the Roundcube webmail login page.

    But your server doesn’t have to handle only one domain. You can have mailboxes on multiple domains like:

    @@ -94,10 +87,10 @@ receive emails for them. Your users will also have passwords that they need to t even set up mailing lists that take messages sent to one address and forward them to several mailboxes at once.

    To make all this work, we’ll store the configuration in a small MariaDB database. Postfix, Dovecot, and Roundcube will all read from this database to know which domains exist, which mailboxes they have, and where each email should go. You -will create that simple database on the next page.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ispmail-trixie/webmail/index.html b/ispmail-trixie/webmail/index.html index d232c75..8ae7d8f 100644 --- a/ispmail-trixie/webmail/index.html +++ b/ispmail-trixie/webmail/index.html @@ -1,4 +1,4 @@ - Webmail using Roundcube | ISPmail Guide - Skip to content
    + Skip to content

    Webmail using Roundcube

    Webmail using Roundcube

    Now that the email has arrived, our valued user surely wants to read it. Most humans nowadays seem to prefer reading their email in the web browser, because it’s the simplest way. (Don’t worry. Power users who prefer mail clients like Thunderbird will also get what they want.) So let’s prepare Roundcube for them.

    @@ -108,7 +101,7 @@ users to the HTTPS site. So if user accidentally forget to type

    So to get Apache to serve the Roundcube application you need to edit the /etc/apache2/sites-available/000-default-le-ssl.conf file.

    - +

    Set this:

    Edit /etc/apache2/sites-available/000-default-le-ssl.conf
    ServerName mail.example.org
    DocumentRoot /var/lib/roundcube/public_html
    Include /etc/roundcube/apache.conf

    Meaning:

    @@ -122,19 +115,19 @@ users to the HTTPS site. So if user accidentally forget to type Check that Apache is running properly:

    Terminal window
    systemctl status apache2

    In case of a problem run apache2ctl configtest to find the cause.

    - +

    The main configuration file of Roundcube is located at /etc/roundcube/config.inc.php. Feel free to customize the file. Fortunately nowadays the basic settings are already as we need them. However these two settings need to be changed by you.

    - +
    Edit /etc/roundcube/config.inc.php
    $config['imap_host'] = 'tls://mail.example.org:143';
    $config['smtp_host'] = 'tls://mail.example.org:587';

    So now when your users enter https://webmail.example.org/ in their browser they should get the Roundcube login form:

    -

    Roundcube login dialog

    +

    Roundcube login dialog

    Keep in mind that we are using the email address as the account name of the user. So when logging in please enter the email address as the user name. E.g. john@example.org and password summersun.

    If the login fails, check /var/log/roundcube/errors.log.

    - - + +

    Roundcube comes with various plugins that you can offer your users. I suggest that you enable at least

    • the password plugin so that your users can change their access password
    • @@ -144,7 +137,7 @@ email address as the user name. E.g. john@example.org an plugins change it to:

      $config['plugins'] = array(
      'password',
      'managesieve',
      );

      Plugins are configured through files located in the /etc/roundcube/plugins directory.

      - +

      Let’s quickly set up the password plugin:

      Run this on your server
      cat > /etc/roundcube/plugins/password/config.inc.php << 'EOF'
      <?php
      $config['password_driver'] = 'sql';
      $config['password_minimum_length'] = 12;
      $config['password_force_save'] = true;
      $config['password_algorithm'] = 'blowfish-crypt';
      $config['password_algorithm_prefix'] = '{CRYPT}';
      $config['password_db_dsn'] = 'mysql://mailadmin:MAILADMIN-PASSWORD-HERE@localhost/mailserver';
      $config['password_query'] = "UPDATE virtual_users SET password=%P WHERE email=%u";
      ?>
      EOF
      chown root:www-data /etc/roundcube/plugins/password/config.inc.php
      chmod u=rw,g=r,o= /etc/roundcube/plugins/password/config.inc.php
      @@ -170,11 +163,11 @@ hash. %u is the logged-in user and conveniently matches

    For a complete reference please see /usr/share/roundcube/plugins/password/config.inc.php.dist.

    The last two lines make sure that this config file is only accessible to everyone.

    -

    Roundcube password dialog

    +

    Roundcube password dialog

    Try it. Log into Roundcube as john@example.org with password ‘summersun’. Go to the Settings. Choose Password. Enter a new password twice. You should get a success message at the bottom right. Now logout and login with the new password. Does it work? Great.

    - +

    Sieve is a simple programming language to be used for server-side rules. Dovecot executes these rules every time a new email comes in. There are global rules that are executed for every email. And of course every user/mailbox can have its own rules. To manage sieve rules Dovecot offers @@ -188,10 +181,10 @@ the managesieve interface that you enabled earlier. So we just need to

    Try adding a sieve rule for john@example.org in Roundcube. That feature is located in Settings/Filters. You will find the machine-readable sieve code at /var/vmail/example.org/john/sieve/roundcube.sieve.

    The rule editor looks like this:

    -

    Roundcube's sieve rule editor

    \ No newline at end of file +
    \ No newline at end of file diff --git a/large-pingu.jpg b/large-pingu.jpg index 5682175..e3ff384 100644 Binary files a/large-pingu.jpg and b/large-pingu.jpg differ diff --git a/linux/renaming-multiple-files/index.html b/linux/renaming-multiple-files/index.html index 132029f..9d93b6c 100644 --- a/linux/renaming-multiple-files/index.html +++ b/linux/renaming-multiple-files/index.html @@ -1,4 +1,4 @@ - Renaming multiple files | ISPmail Guide - Skip to content
    + Skip to content

    Renaming multiple files

    If you need to rename a larger number of files following a certain pattern then you will long for an automated solution. The ‘rename’ command helps you here that is (at least on my Debian installation) part of the Perl installation. All you need to know is the basics of regular expressions to define how the renaming should happen.

    +

    Renaming multiple files

    If you need to rename a larger number of files following a certain pattern then you will long for an automated solution. The ‘rename’ command helps you here that is (at least on my Debian installation) part of the Perl installation. All you need to know is the basics of regular expressions to define how the renaming should happen.

    Say you want to add a ‘.old’ to every file in your current directory. At the end of each expression ($) a ‘.old’ will be set:

    rename 's/$/.old' *

    Or you want to make the filenames lowercase:

    @@ -87,10 +80,10 @@
    rename 'tr/a-zA-Z//s' *

    Or you have many JPEG files that look like “img0000154.jpg” but you want the first five zeros removed as you don’t need them:

    rename 's/img00000/img/' *.jpg
    -

    In fact you can use any Perl operator as an argument. The actual documentation for the ‘s’ and ‘y’/’tr’ operators are found in the ‘perlop’ manpage.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/linuxtip/pipes/index.html b/linuxtip/pipes/index.html index 8565ffc..5c3ee79 100644 --- a/linuxtip/pipes/index.html +++ b/linuxtip/pipes/index.html @@ -1,4 +1,4 @@ - Pipes and redirection | ISPmail Guide - Skip to content
    + Skip to content

    Pipes and redirection

    Many system administrators seem to have problems with the concepts of pipes and redirection in a shell. A coworker recently asked me how to deal with log files. How to find the information he was looking for. This article tries to shed some light on it.

    - +

    Pipes and redirection

    Many system administrators seem to have problems with the concepts of pipes and redirection in a shell. A coworker recently asked me how to deal with log files. How to find the information he was looking for. This article tries to shed some light on it.

    +

    Many of the basic Linux/UNIX shell commands work in a similar way. Every command that you start from the shell gets three channels assigned:

    • STDIN (channel 0):
      @@ -90,39 +83,39 @@ Where your command’s output is sent to. If you don’t specify anything specia If anything wrong happens the command will send error message here. By default the output is also displayed in your shell.

    Try it yourself. The most basic command that just passes everything through from STDIN to STDOUT is the ‘cat’ command. Just open a shell and type ‘cat’ and press Enter. Nothing seems to happen. But actually ‘cat’ is waiting for input. Type something like “hello world”. Every time you press ‘Enter’ after a line ‘cat’ will output your input. So you will get an echo of everything you type. To let ‘cat’ know that you are done with the input send it an ‘end-of-file’ (EOF) signal by pressing Ctrl-D on an empty line.

    - +

    A more interesting application of the STDIN/STDOUT is to chain commands together. The output of the first command becomes the input of the second command. Imagine the following chain:

    -

    Diagram of STDIN, STDOUT and STDERR

    +

    Diagram of STDIN, STDOUT and STDERR

    The contents of the file /var/log/syslog are sent (as input) to the grep command. grep will filter the stream for lines containing the word ‘postfix’ and output that. Now the next grep picks up what was filtered and filter it further for the word ‘removed’. So now we have only lines containing both ‘postfix’ and ‘removed’. And finally these lines are sent to ‘wc -l’ which is a shell command counting the lines of some input. In my case it found 27 of such lines and printed that number to my shell. In shell syntax this reads:

    cat /var/log/syslog | grep 'postfix' | grep 'removed' | wc -l

    The ‘|’ character is called pipe. A sequence of such commands joined together with pipes are called pipeline.

    - +

    Actually ‘cat’ is supposed to be used for concatenating files. Like “cat file1 file2”. But some administrators abuse the command to put something into a pipeline. That’s bad style and the reason why Randal L. Schwartz (a seasoned programmer) used to hand out virtual “Useless use of cat” awards. Shell commands usually can take a filename as the last argument as an input. So this would be right:

    grep something /var/log/syslog | wc -l

    While this works but is considered bad style:

    cat /var/log/syslog | grep something | wc

    Or if you knew that grep even has a “-c” option to count lines the whole task could be done with just grep:

    grep -c something /var/log/syslog
    - - + +

    Instead of using the console for input and the screen for output you can use files instead. While

    date

    shows you the current date on the console you can use

    date >currentdatefile

    to redirect the output of the command (STDOUT) to the file named ‘currentdatefile’.

    - +

    This also works as input. The command

    grep something

    will search for the word ‘something’ in what you type on your keyboard. But if you want to look for ‘something’ in a file called ‘somefile’ you could run

    grep something <somefile
    - +

    You can also redirect both input and output in the same command. A politically incorrect way to copy a file would be

    cat <oldfile >newfile

    Of course you would use cp for that purpose in real life.

    - +

    So far this covers STDIN (<) and STDOUT (>) but you also redirect the STDERR channel by using (2>). An example would be

    grep something <somefile >resultfile 2>errorfile
    - +

    Many admins stumble when it comes to redirecting one channel to another. Say you want to redirect both STDOUT and STDERR to the same file. Then you cannot do

    grep something >resultfile 2>resultfile

    It will only redirect the STDOUT (>) there and keep the ‘resultfile’ open so “2>” fails to write to it. Instead you need to do

    @@ -131,7 +124,7 @@ If anything wrong happens the command will send error message here. By default t

    What does not work is this order:

    grep something 2>&1 >resultfile

    It may look right to us humans but in fact does not redirect STDERR to the ‘resultfile’. The explanation: the shell interprets this line from left to right. So first the “2>&1” is evaluated which means “send STDERR to the same that STDOUT is currently set to”. As STDOUT is usually just printed to the shell it will send STDERR also to the shell. Next the shell finds “>resultfile” which sends STDOUT to the ‘resultfile’ but does not touch the previous destination of STDERR. So STDERR output will still end up in the shell.

    - +
    • grep
      Filters out lines with certain search words. “grep -v” searches for all lines that do not contain the search word.
    • @@ -149,10 +142,10 @@ Useful at the end of a pipe. Allows you to browse through the output one page at Shows the first ten lines only. “head -50” shows the first 50 lines.
    • tail
      Shows the last ten lines only. “tail -50” shows the last 50 lines. “tail -f” follows a certain file.
    • -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/pagefind/fragment/en_161b483.pf_fragment b/pagefind/fragment/en_161b483.pf_fragment new file mode 100644 index 0000000..08e9958 Binary files /dev/null and b/pagefind/fragment/en_161b483.pf_fragment differ diff --git a/pagefind/fragment/en_26c431c.pf_fragment b/pagefind/fragment/en_26c431c.pf_fragment new file mode 100644 index 0000000..5fa9e7f Binary files /dev/null and b/pagefind/fragment/en_26c431c.pf_fragment differ diff --git a/pagefind/fragment/en_27fc222.pf_fragment b/pagefind/fragment/en_27fc222.pf_fragment new file mode 100644 index 0000000..95ce017 Binary files /dev/null and b/pagefind/fragment/en_27fc222.pf_fragment differ diff --git a/pagefind/fragment/en_315c6d9.pf_fragment b/pagefind/fragment/en_315c6d9.pf_fragment new file mode 100644 index 0000000..35685d6 Binary files /dev/null and b/pagefind/fragment/en_315c6d9.pf_fragment differ diff --git a/pagefind/fragment/en_3b3aaee.pf_fragment b/pagefind/fragment/en_3b3aaee.pf_fragment new file mode 100644 index 0000000..e0a2919 Binary files /dev/null and b/pagefind/fragment/en_3b3aaee.pf_fragment differ diff --git a/pagefind/fragment/en_4338105.pf_fragment b/pagefind/fragment/en_4338105.pf_fragment new file mode 100644 index 0000000..416ecb0 Binary files /dev/null and b/pagefind/fragment/en_4338105.pf_fragment differ diff --git a/pagefind/fragment/en_4cba359.pf_fragment b/pagefind/fragment/en_4cba359.pf_fragment new file mode 100644 index 0000000..cb85a39 Binary files /dev/null and b/pagefind/fragment/en_4cba359.pf_fragment differ diff --git a/pagefind/fragment/en_5bbdfea.pf_fragment b/pagefind/fragment/en_5bbdfea.pf_fragment new file mode 100644 index 0000000..b75e052 Binary files /dev/null and b/pagefind/fragment/en_5bbdfea.pf_fragment differ diff --git a/pagefind/fragment/en_6fbc73b.pf_fragment b/pagefind/fragment/en_6fbc73b.pf_fragment new file mode 100644 index 0000000..9c2e5ec Binary files /dev/null and b/pagefind/fragment/en_6fbc73b.pf_fragment differ diff --git a/pagefind/fragment/en_745fe5a.pf_fragment b/pagefind/fragment/en_745fe5a.pf_fragment new file mode 100644 index 0000000..6d0c2c5 Binary files /dev/null and b/pagefind/fragment/en_745fe5a.pf_fragment differ diff --git a/pagefind/fragment/en_7f26324.pf_fragment b/pagefind/fragment/en_7f26324.pf_fragment new file mode 100644 index 0000000..4060c6b Binary files /dev/null and b/pagefind/fragment/en_7f26324.pf_fragment differ diff --git a/pagefind/fragment/en_8edefe1.pf_fragment b/pagefind/fragment/en_8edefe1.pf_fragment new file mode 100644 index 0000000..c0779cc Binary files /dev/null and b/pagefind/fragment/en_8edefe1.pf_fragment differ diff --git a/pagefind/fragment/en_a3caa18.pf_fragment b/pagefind/fragment/en_a3caa18.pf_fragment new file mode 100644 index 0000000..3da0c92 Binary files /dev/null and b/pagefind/fragment/en_a3caa18.pf_fragment differ diff --git a/pagefind/fragment/en_a57835d.pf_fragment b/pagefind/fragment/en_a57835d.pf_fragment new file mode 100644 index 0000000..c8f52a9 Binary files /dev/null and b/pagefind/fragment/en_a57835d.pf_fragment differ diff --git a/pagefind/fragment/en_a98aec4.pf_fragment b/pagefind/fragment/en_a98aec4.pf_fragment new file mode 100644 index 0000000..4410057 Binary files /dev/null and b/pagefind/fragment/en_a98aec4.pf_fragment differ diff --git a/pagefind/fragment/en_ad4aa7c.pf_fragment b/pagefind/fragment/en_ad4aa7c.pf_fragment new file mode 100644 index 0000000..172894c Binary files /dev/null and b/pagefind/fragment/en_ad4aa7c.pf_fragment differ diff --git a/pagefind/fragment/en_c0b3462.pf_fragment b/pagefind/fragment/en_c0b3462.pf_fragment new file mode 100644 index 0000000..6045881 Binary files /dev/null and b/pagefind/fragment/en_c0b3462.pf_fragment differ diff --git a/pagefind/fragment/en_c0d9740.pf_fragment b/pagefind/fragment/en_c0d9740.pf_fragment new file mode 100644 index 0000000..b88a8a4 Binary files /dev/null and b/pagefind/fragment/en_c0d9740.pf_fragment differ diff --git a/pagefind/fragment/en_ce30b2d.pf_fragment b/pagefind/fragment/en_ce30b2d.pf_fragment new file mode 100644 index 0000000..bf6047b Binary files /dev/null and b/pagefind/fragment/en_ce30b2d.pf_fragment differ diff --git a/pagefind/fragment/en_da403bb.pf_fragment b/pagefind/fragment/en_da403bb.pf_fragment new file mode 100644 index 0000000..1f93c40 Binary files /dev/null and b/pagefind/fragment/en_da403bb.pf_fragment differ diff --git a/pagefind/fragment/en_def0b46.pf_fragment b/pagefind/fragment/en_def0b46.pf_fragment new file mode 100644 index 0000000..7bc8773 Binary files /dev/null and b/pagefind/fragment/en_def0b46.pf_fragment differ diff --git a/pagefind/fragment/en_dfbb744.pf_fragment b/pagefind/fragment/en_dfbb744.pf_fragment new file mode 100644 index 0000000..14d05d6 Binary files /dev/null and b/pagefind/fragment/en_dfbb744.pf_fragment differ diff --git a/pagefind/fragment/en_e1d323a.pf_fragment b/pagefind/fragment/en_e1d323a.pf_fragment new file mode 100644 index 0000000..d5f4909 Binary files /dev/null and b/pagefind/fragment/en_e1d323a.pf_fragment differ diff --git a/pagefind/fragment/en_e6e0f09.pf_fragment b/pagefind/fragment/en_e6e0f09.pf_fragment new file mode 100644 index 0000000..4bdb7c6 Binary files /dev/null and b/pagefind/fragment/en_e6e0f09.pf_fragment differ diff --git a/pagefind/fragment/en_e85dca9.pf_fragment b/pagefind/fragment/en_e85dca9.pf_fragment new file mode 100644 index 0000000..47bd6b0 Binary files /dev/null and b/pagefind/fragment/en_e85dca9.pf_fragment differ diff --git a/pagefind/fragment/en_efa9a12.pf_fragment b/pagefind/fragment/en_efa9a12.pf_fragment new file mode 100644 index 0000000..dbe822c Binary files /dev/null and b/pagefind/fragment/en_efa9a12.pf_fragment differ diff --git a/pagefind/fragment/en_f251758.pf_fragment b/pagefind/fragment/en_f251758.pf_fragment new file mode 100644 index 0000000..a628803 Binary files /dev/null and b/pagefind/fragment/en_f251758.pf_fragment differ diff --git a/pagefind/fragment/en_f3a4f5e.pf_fragment b/pagefind/fragment/en_f3a4f5e.pf_fragment new file mode 100644 index 0000000..789d482 Binary files /dev/null and b/pagefind/fragment/en_f3a4f5e.pf_fragment differ diff --git a/pagefind/fragment/en_f41fcb4.pf_fragment b/pagefind/fragment/en_f41fcb4.pf_fragment new file mode 100644 index 0000000..4fb8192 Binary files /dev/null and b/pagefind/fragment/en_f41fcb4.pf_fragment differ diff --git a/pagefind/fragment/en_f87fe2c.pf_fragment b/pagefind/fragment/en_f87fe2c.pf_fragment new file mode 100644 index 0000000..ec25914 Binary files /dev/null and b/pagefind/fragment/en_f87fe2c.pf_fragment differ diff --git a/pagefind/fragment/en_f926575.pf_fragment b/pagefind/fragment/en_f926575.pf_fragment new file mode 100644 index 0000000..36a55ae Binary files /dev/null and b/pagefind/fragment/en_f926575.pf_fragment differ diff --git a/pagefind/fragment/en_f93aada.pf_fragment b/pagefind/fragment/en_f93aada.pf_fragment new file mode 100644 index 0000000..0c48924 Binary files /dev/null and b/pagefind/fragment/en_f93aada.pf_fragment differ diff --git a/pagefind/fragment/en_ff9d571.pf_fragment b/pagefind/fragment/en_ff9d571.pf_fragment new file mode 100644 index 0000000..6b913ec Binary files /dev/null and b/pagefind/fragment/en_ff9d571.pf_fragment differ diff --git a/pagefind/index/en_465d185.pf_index b/pagefind/index/en_465d185.pf_index new file mode 100644 index 0000000..5e8ed0c Binary files /dev/null and b/pagefind/index/en_465d185.pf_index differ diff --git a/pagefind/index/en_78a553e.pf_index b/pagefind/index/en_78a553e.pf_index new file mode 100644 index 0000000..37566f8 Binary files /dev/null and b/pagefind/index/en_78a553e.pf_index differ diff --git a/pagefind/index/en_80cbbfa.pf_index b/pagefind/index/en_80cbbfa.pf_index new file mode 100644 index 0000000..2ccdf2c Binary files /dev/null and b/pagefind/index/en_80cbbfa.pf_index differ diff --git a/pagefind/index/en_c5abcbc.pf_index b/pagefind/index/en_c5abcbc.pf_index new file mode 100644 index 0000000..211fcd4 Binary files /dev/null and b/pagefind/index/en_c5abcbc.pf_index differ diff --git a/pagefind/pagefind-component-ui.css b/pagefind/pagefind-component-ui.css new file mode 100644 index 0000000..5e9ef59 --- /dev/null +++ b/pagefind/pagefind-component-ui.css @@ -0,0 +1,1509 @@ +/* + * Why all the :is(*, #\#) prefixes? + * + * These components are embedded in who-knows-what sites with unpredictable CSS. + * We need our styles to win against host page selectors like `.content p` or + * `article a:hover` without using !important everywhere. + * + * The :is(*, #\#) trick adds ID-level specificity (0,1,0) without requiring + * an actual ID in the DOM. Chaining it (2x or 3x) builds enough specificity + * to beat most host selectors. + * + * The #\# is an escaped # character, creating an invalid-but-harmless ID + * selector that never matches, but still contributes specificity via :is(). + * + * We also need these overrides to only affect the Component UI elements themselves. + * Users can provide custom templates to the results and searchbox components, + * and these must inherit their styles without having to fight ours. + * + * It's admittedly a bit of a hack but it does provide best effort styling consistency + * for the Component UI out in the wild. + */ + +:root { + --pf-text: #1a1a1a; + --pf-text-secondary: #666; + --pf-text-muted: #767676; + --pf-background: #fff; + --pf-border: #e0e0e0; + --pf-border-focus: #999; + --pf-skeleton: #eee; + --pf-skeleton-shine: #f5f5f5; + --pf-hover: #f5f5f5; + --pf-mark: #1a1a1a; + --pf-scroll-shadow: rgba(0, 0, 0, 0.08); + + --pf-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.06); + --pf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1); + --pf-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.2); + + --pf-error-bg: #fef2f2; + --pf-error-border: #fecaca; + --pf-error-text: #dc2626; + --pf-error-text-secondary: #b91c1c; + + --pf-outline-focus: #0969da; + --pf-outline-width: 2px; + --pf-outline-offset: 2px; + + --pf-font: + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, + sans-serif; + + --pf-input-height: 36px; + --pf-input-font-size: 16px; + --pf-summary-font-size: 12px; + --pf-result-title-font-size: 14px; + --pf-result-excerpt-font-size: 13px; + --pf-modal-backdrop: rgba(0, 0, 0, 0.5); + --pf-results-display: flex; + --pf-results-flex-direction: column; + --pf-results-flex-wrap: nowrap; + --pf-results-columns: none; + --pf-results-gap: 8px; + + --pf-border-radius: 6px; + --pf-image-width: 64px; + --pf-image-height: 48px; + + --pf-icon-search: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + --pf-icon-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23000' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + + --pf-dropdown-z-index: 9999; + + --pf-modal-max-width: 560px; + --pf-modal-max-height: min(80dvh, 800px); + --pf-modal-top: 10dvh; + + --pf-searchbox-max-width: 480px; + --pf-searchbox-dropdown-max-height: 320px; + + --pf-dropdown-max-height: 280px; +} + +[data-pf-theme="dark"] { + --pf-text: #e5e5e5; + --pf-text-secondary: #a0a0a0; + --pf-text-muted: #949494; + --pf-background: #1a1a1a; + --pf-border: #333; + --pf-border-focus: #555; + --pf-skeleton: #2a2a2a; + --pf-skeleton-shine: #333; + --pf-hover: #252525; + --pf-mark: #e5e5e5; + --pf-scroll-shadow: rgba(255, 255, 255, 0.1); + + --pf-outline-focus: #58a6ff; + + --pf-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3); + --pf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4); + --pf-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.5); + + --pf-error-bg: #2a1a1a; + --pf-error-border: #5c2828; + --pf-error-text: #f87171; + --pf-error-text-secondary: #ef4444; + + --pf-modal-backdrop: rgba(0, 0, 0, 0.7); +} + +pagefind-config, +pagefind-filter-dropdown, +pagefind-filter-pane, +pagefind-input, +pagefind-keyboard-hints, +pagefind-modal, +pagefind-modal-body, +pagefind-modal-footer, +pagefind-modal-header, +pagefind-modal-trigger, +pagefind-results, +pagefind-searchbox, +pagefind-summary { + all: initial; + display: block; + box-sizing: border-box; + + /* Typography baseline */ + font-family: + var(--pf-font, + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + sans-serif); + font-size: 16px; + line-height: 1.5; + color: CanvasText; + contain: layout style; +} + +pagefind-searchbox, +pagefind-filter-dropdown { + position: relative; +} + +pagefind-searchbox:has(.pf-searchbox.open), +pagefind-filter-dropdown:has(.pf-dropdown-trigger.open) { + z-index: var(--pf-dropdown-z-index); +} + +pagefind-config { + display: none; +} + +pagefind-modal-trigger { + display: inline-block; +} + +:is(*, #\#):is(*, #\#) :is([class^="pf-"], [class*=" pf-"]):not(svg, svg *) { + all: revert; + box-sizing: border-box; +} + +:is(*, #\#):is(*, #\#) :is([class^="pf-"], [class*=" pf-"]):not(svg, svg *)::before, +:is(*, #\#):is(*, #\#) :is([class^="pf-"], [class*=" pf-"]):not(svg, svg *)::after { + box-sizing: border-box; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) [class^="pf-"][hidden], +:is(*, #\#):is(*, #\#):is(*, #\#) [class*=" pf-"][hidden] { + display: none; +} + +[data-pf-hidden] { + display: none !important; +} + +[data-pf-suppressed] { + opacity: 0 !important; + pointer-events: none !important; +} + +[data-pf-sr-hidden] { + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(100%) !important; + clip-path: inset(100%) !important; + height: 1px !important; + overflow: hidden !important; + position: absolute !important; + white-space: nowrap !important; + width: 1px !important; +} + +/* +* Suppress native browser outlines. +* This is only okay because we exhaustively +* provide our own high-contrast custom focus styles. +*/ +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options:focus, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options:focus-visible { + outline: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible { + outline: var(--pf-outline-width) solid var(--pf-outline-focus); + outline-offset: var(--pf-outline-offset); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-key, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-key, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-key, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-key, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-key { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 4px; + background: var(--pf-hover); + border: 1px solid var(--pf-border); + border-radius: 3px; + font-weight: 500; + color: var(--pf-text-secondary); + font-family: var(--pf-font); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-key--sm, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-key { + min-width: 16px; + height: 16px; + font-size: 9px; + padding: 0 3px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-wrapper { + position: relative; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-wrapper::before, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper::before { + content: ""; + position: absolute; + background-color: var(--pf-text-muted); + width: 14px; + height: 14px; + top: calc((var(--pf-input-height) - 14px) / 2); + inset-inline-start: 10px; + -webkit-mask-image: var(--pf-icon-search); + mask-image: var(--pf-icon-search); + -webkit-mask-size: 100%; + mask-size: 100%; + pointer-events: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper::before { + z-index: 1; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input { + width: 100%; + height: var(--pf-input-height); + background-color: var(--pf-background); + border: 1px solid var(--pf-border); + border-radius: var(--pf-border-radius); + font-family: var(--pf-font, inherit); + font-size: var(--pf-input-font-size); + color: var(--pf-text); + box-sizing: border-box; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input { + padding: 0; + padding-inline-start: 32px; + padding-inline-end: 36px; + font-weight: 400; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible { + border-color: var(--pf-outline-focus); + box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::placeholder, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input::placeholder { + color: var(--pf-text-muted); +} + +/* Hide native search clear button - we have our own */ +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-decoration, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-cancel-button, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-results-button, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-results-decoration { + display: none; + appearance: none; + -webkit-appearance: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear { + position: absolute; + inset-inline-end: 2px; + top: 50%; + transform: translateY(-50%); + height: calc(100% - 4px); + min-width: 44px; + padding: 0 8px; + background: none; + border: none; + font-size: 12px; + color: var(--pf-text-muted); + cursor: pointer; + border-radius: 4px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:hover { + background: var(--pf-hover); + color: var(--pf-text-secondary); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear[data-pf-suppressed] { + display: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-summary { + font-size: var(--pf-summary-font-size); + color: var(--pf-text-muted); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-results { + list-style: none; + padding: 0; + margin: 0; + display: var(--pf-results-display); + flex-direction: var(--pf-results-flex-direction); + flex-wrap: var(--pf-results-flex-wrap); + grid-template-columns: var(--pf-results-columns); + gap: var(--pf-results-gap); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result { + display: flex; + flex-direction: column; + gap: 8px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card { + position: relative; + display: flex; + gap: 12px; + padding: 12px; + background: var(--pf-background); + border: 1px solid var(--pf-border); + border-radius: var(--pf-border-radius); + transition: + border-color 0.15s, + box-shadow 0.15s; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card:hover { + border-color: var(--pf-border-focus); + box-shadow: var(--pf-shadow-sm); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-result-card:has(.pf-result-link:focus-visible) { + border-color: var(--pf-outline-focus); + box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card:has([data-pf-selected]) { + border-color: var(--pf-border-focus); + background: var(--pf-hover); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-image { + width: var(--pf-image-width); + height: var(--pf-image-height); + border-radius: 4px; + object-fit: cover; + background: var(--pf-skeleton); + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-content { + flex: 1; + min-width: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-title { + font-size: var(--pf-result-title-font-size); + font-weight: 500; + margin: 0; + line-height: 1.4; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link { + color: var(--pf-text); + text-decoration: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link::after { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:hover { + text-decoration: underline; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-excerpt { + font-size: var(--pf-result-excerpt-font-size); + color: var(--pf-text-secondary); + margin: 4px 0 0 0; + line-height: 1.5; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-excerpt mark, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-excerpt mark, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-excerpt mark { + background: transparent; + font-weight: 500; + color: var(--pf-mark); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton { + background: var(--pf-skeleton); + border-radius: 4px; +} + +@media (prefers-reduced-motion: no-preference) { + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton { + background: linear-gradient( + 90deg, + var(--pf-skeleton) 25%, + var(--pf-skeleton-shine) 50%, + var(--pf-skeleton) 75% + ); + background-size: 200% 100%; + animation: pf-shimmer 1.5s infinite; + } + + @keyframes pf-shimmer { + 0% { + background-position: 200% 0; + } + 100% { + background-position: -200% 0; + } + } +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-title { + height: 14px; + width: 60%; + margin-bottom: 8px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-excerpt { + height: 13px; + width: 90%; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-image { + width: var(--pf-image-width); + height: var(--pf-image-height); + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty { + text-align: center; + padding: 32px 16px; + color: var(--pf-text-muted); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty-icon { + font-size: 24px; + margin-bottom: 8px; + opacity: 0.4; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty-text { + font-size: 14px; + margin: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-error { + padding: 12px 16px; + background: var(--pf-error-bg); + border: 1px solid var(--pf-error-border); + border-radius: var(--pf-border-radius); + color: var(--pf-error-text); + font-size: 13px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-error strong { + font-weight: 600; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-error small { + display: block; + margin-top: 4px; + color: var(--pf-error-text-secondary); + font-size: 12px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chips { + display: flex; + flex-direction: column; + gap: 6px; + margin: 0; + padding: 0; + padding-inline-start: 12px; + list-style: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip { + display: inline-flex; + flex-direction: column; + gap: 2px; + padding: 8px 10px; + background: var(--pf-background); + border: 1px solid var(--pf-border); + border-radius: 6px; + font-size: 12px; + transition: + border-color 0.15s, + box-shadow 0.15s; + position: relative; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip:hover { + border-color: var(--pf-border-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-heading-chip:has(.pf-heading-link:focus-visible) { + border-color: var(--pf-outline-focus); + box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip:has([data-pf-selected]) { + border-color: var(--pf-border-focus); + background: var(--pf-hover); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link { + color: var(--pf-text); + font-weight: 500; + text-decoration: none; + line-height: 1.3; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link::before { + content: "#"; + color: var(--pf-text-muted); + margin-inline-end: 4px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link::after { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:hover { + text-decoration: underline; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-excerpt { + margin: 0; + font-size: 12px; + color: var(--pf-text-secondary); + line-height: 1.4; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-pane { + display: flex; + flex-direction: column; + gap: 20px; + padding: 16px; + background: var(--pf-skeleton); + border-radius: var(--pf-border-radius); + border: 1px solid var(--pf-border); + overflow: hidden; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group { + display: flex; + flex-direction: column; + gap: 8px; + border: none; + padding: 0; + margin: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) details.pf-filter-group { + display: block; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) details.pf-filter-group > .pf-filter-options { + margin-top: 8px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + details.pf-filter-group + > .pf-filter-fieldset { + margin-top: 8px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-fieldset { + border: none; + padding: 0; + margin: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-title { + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.3px; + color: var(--pf-text-muted); + margin: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-name, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger-label, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title { + cursor: pointer; + list-style: none; + display: flex; + align-items: center; + padding: 4px 0; + margin: -4px 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + summary.pf-filter-group-title::-webkit-details-marker { + display: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title::after { + content: ""; + width: 10px; + height: 6px; + flex-shrink: 0; + margin-inline-start: 8px; + background: var(--pf-text-muted); + -webkit-mask-image: var(--pf-icon-arrow); + mask-image: var(--pf-icon-arrow); + -webkit-mask-size: 100% 100%; + mask-size: 100% 100%; + transition: transform 0.15s; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + details.pf-filter-group:not([open]) + > summary.pf-filter-group-title::after { + transform: rotate(-90deg); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + [dir="rtl"] + details.pf-filter-group:not([open]) + > summary.pf-filter-group-title::after { + transform: rotate(90deg); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title:hover { + color: var(--pf-text-secondary); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-count, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-selected-badge { + display: inline-flex; + align-items: center; + justify-content: center; + background: var(--pf-text); + color: var(--pf-background); + font-size: 11px; + font-weight: 500; + height: 18px; + min-width: 18px; + padding: 0 5px; + border-radius: 9px; + flex-shrink: 0; + box-sizing: border-box; + font-variant-numeric: tabular-nums; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-count { + margin-inline-start: auto; + text-transform: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#):is(*, #\#) + .pf-filter-group-count[data-pf-hidden], +:is(*, #\#):is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-selected-badge[data-pf-hidden] { + display: inline-flex !important; + visibility: hidden; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-options { + display: flex; + flex-direction: column; + gap: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox { + display: flex; + align-items: center; + gap: 8px; + min-height: 30px; + cursor: pointer; + font-size: 13px; + color: var(--pf-text-secondary); +} + +@media (pointer: coarse) { + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox { + min-height: 44px; + } +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox:hover { + color: var(--pf-text); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input { + width: 16px; + height: 16px; + margin: 0; + accent-color: var(--pf-text); + cursor: pointer; + color-scheme: light; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) [data-pf-theme="dark"] .pf-checkbox-input { + color-scheme: dark; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-filter-checkbox:has(.pf-checkbox-input:focus-visible) { + outline: var(--pf-outline-width) solid var(--pf-outline-focus); + outline-offset: var(--pf-outline-offset); + border-radius: 4px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox-count { + margin-inline-start: auto; + font-size: 11px; + color: var(--pf-text-muted); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-wrapper { + position: relative; + display: inline-flex; + align-items: center; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger { + display: inline-flex; + align-items: center; + gap: 8px; + height: var(--pf-input-height); + padding: 0 12px; + background: var(--pf-background); + border: 1px solid var(--pf-border); + border-radius: var(--pf-border-radius); + font-size: 13px; + color: var(--pf-text-secondary); + cursor: pointer; + transition: border-color 0.15s; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:hover { + border-color: var(--pf-border-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.open { + border-color: var(--pf-border-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.wrap { + height: auto; + min-height: var(--pf-input-height); + padding-top: 6px; + padding-bottom: 6px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger-label.wrap, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label.wrap { + white-space: normal; + line-height: 1.3; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-arrow { + width: 10px; + height: 6px; + flex-shrink: 0; + background: var(--pf-text-muted); + -webkit-mask-image: var(--pf-icon-arrow); + mask-image: var(--pf-icon-arrow); + -webkit-mask-size: 100% 100%; + mask-size: 100% 100%; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.open .pf-dropdown-arrow { + transform: rotate(180deg); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-menu { + position: absolute; + top: calc(100% + 4px); + inset-inline-start: 0; + min-width: 180px; + max-height: var(--pf-dropdown-max-height); + overflow-y: auto; + border: 1px solid var(--pf-border); + border-radius: var(--pf-border-radius); + box-shadow: var(--pf-shadow-md); + padding: 4px; + z-index: 100; + + background: + /* Top shadow cover (moves with content) */ + linear-gradient(var(--pf-background) 30%, transparent) center top, + /* Bottom shadow cover (moves with content) */ + linear-gradient(transparent, var(--pf-background) 70%) center bottom, + /* Top shadow (stays fixed) */ + linear-gradient(var(--pf-scroll-shadow), transparent) center top, + /* Bottom shadow (stays fixed) */ + linear-gradient(transparent, var(--pf-scroll-shadow)) center bottom, + var(--pf-background); + background-size: + 100% 40px, + 100% 40px, + 100% 14px, + 100% 14px, + 100% 100%; + background-repeat: no-repeat; + background-attachment: local, local, scroll, scroll, scroll; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option { + display: flex; + align-items: center; + gap: 8px; + padding: 12px 10px; + min-height: 44px; + font-size: 13px; + color: var(--pf-text-secondary); + border-radius: 4px; + cursor: pointer; + box-sizing: border-box; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option:hover { + background: var(--pf-hover); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option.pf-dropdown-option-focused { + outline: var(--pf-outline-width) solid var(--pf-outline-focus); + outline-offset: -2px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option.wrap { + align-items: flex-start; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-checkbox { + width: 16px; + height: 16px; + flex-shrink: 0; + border: 1px solid var(--pf-border); + border-radius: 3px; + background: var(--pf-background); + position: relative; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option.wrap + .pf-dropdown-checkbox { + margin-top: 2px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option[aria-selected="true"] + .pf-dropdown-checkbox { + background: var(--pf-text); + border-color: var(--pf-text); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option[aria-selected="true"] + .pf-dropdown-checkbox::after { + content: ""; + position: absolute; + inset-inline-start: 5px; + top: 2px; + width: 4px; + height: 8px; + border: solid var(--pf-background); + border-width: 0 2px 2px 0; + transform: rotate(45deg); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label { + flex: 1; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-count { + margin-inline-start: auto; + font-size: 11px; + color: var(--pf-text-muted); + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option.wrap + .pf-dropdown-option-count { + margin-top: 2px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-loading { + pointer-events: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option-loading + .pf-dropdown-checkbox { + width: 16px; + height: 16px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option-loading + .pf-dropdown-option-label { + height: 13px; + border-radius: 4px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-error { + padding: 12px 10px; + font-size: 13px; + color: var(--pf-error-text); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear { + display: inline-flex; + align-items: center; + height: 44px; + padding: 0 10px; + margin-inline-start: 4px; + background: transparent; + border: 1px solid transparent; + border-radius: var(--pf-border-radius); + font-size: 12px; + color: var(--pf-text-secondary); + cursor: pointer; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-clear:hover:not([aria-disabled="true"]) { + background: var(--pf-hover); + border-color: var(--pf-border); + color: var(--pf-text); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear[aria-disabled="true"] { + color: var(--pf-text-muted); + cursor: default; + opacity: 0.4; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options { + max-height: var(--pf-dropdown-max-height); + overflow-y: auto; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn { + display: inline-flex; + align-items: center; + gap: 8px; + width: 100%; + height: var(--pf-input-height); + padding: 0 14px; + background: var(--pf-background); + border: 1px solid var(--pf-border); + border-radius: var(--pf-border-radius); + font-size: 14px; + color: var(--pf-text-muted); + cursor: pointer; + transition: + border-color 0.15s, + box-shadow 0.15s; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:hover { + border-color: var(--pf-border-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-icon { + width: 14px; + height: 14px; + background: var(--pf-text-muted); + -webkit-mask-image: var(--pf-icon-search); + mask-image: var(--pf-icon-search); + -webkit-mask-size: 100%; + mask-size: 100%; + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-text { + flex: 1; + text-align: start; + color: var(--pf-text-muted); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-shortcut { + display: inline-flex; + align-items: center; + gap: 2px; + margin-inline-start: 8px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-key { + min-width: 20px; + height: 18px; + font-size: 11px; + border-radius: 4px; +} + +/* + NB: Background scrolling is prevented with the overscroll-behavior: contain + values below, plus overflow: hidden on the backdrop. + As of writing, this only works on Chrome 144. Tracking: + https://bugzilla.mozilla.org/show_bug.cgi?id=1837436 + https://bugs.webkit.org/show_bug.cgi?id=243452 +*/ + +:is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal { + position: fixed; + width: 100%; + max-width: var(--pf-modal-max-width); + max-height: var(--pf-modal-max-height); + margin: var(--pf-modal-top) auto; + padding: 0; + background: var(--pf-background); + border: none; + border-radius: 12px; + box-shadow: var(--pf-shadow-lg); + flex-direction: column; + overflow: hidden; + overscroll-behavior: contain; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal::backdrop { + background: var(--pf-modal-backdrop); + overflow: hidden; + overscroll-behavior: contain; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] { + display: flex; +} + +@media (prefers-reduced-motion: no-preference) { + :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] { + animation: pf-modal-appear 0.15s ease-out; + } + + @keyframes pf-modal-appear { + from { + opacity: 0; + transform: scale(0.95); + } + to { + opacity: 1; + transform: scale(1); + } + } +} + +@media (max-width: 640px) { + :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] { + top: 0; + left: 0; + width: 100vw; + height: 100dvh; + max-width: none; + max-height: none; + margin: 0; + padding: 0; + border-radius: 0; + animation: none; + } + + :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header { + padding-top: max(16px, env(safe-area-inset-top)); + padding-left: max(16px, env(safe-area-inset-left)); + padding-right: max(16px, env(safe-area-inset-right)); + } + + :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body { + padding-left: max(16px, env(safe-area-inset-left)); + padding-right: max(16px, env(safe-area-inset-right)); + } + + :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-footer, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer { + padding-bottom: max(12px, env(safe-area-inset-bottom)); + padding-left: max(16px, env(safe-area-inset-left)); + padding-right: max(16px, env(safe-area-inset-right)); + } +} + +:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header { + display: flex; + align-items: center; + gap: 8px; + padding: 16px; + border-bottom: 1px solid var(--pf-border); + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header-content { + flex: 1; + min-width: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close { + display: none; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + padding: 0; + background: transparent; + border: none; + border-radius: 8px; + color: var(--pf-text-secondary); + cursor: pointer; + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:hover { + background: var(--pf-hover); + color: var(--pf-text); +} + +@media (max-width: 640px) { + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close { + display: flex; + } +} + +:is(*, #\#):is(*, #\#):is(*, #\#) + pagefind-modal-header + .pf-input-wrapper::before, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header .pf-input-wrapper::before { + top: 50%; + transform: translateY(-50%); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header .pf-input, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header .pf-input { + border: none; + background: transparent; + font-size: var(--pf-input-font-size); + height: 40px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body { + flex: 1 1 auto; + overflow-y: auto; + overscroll-behavior: contain; + padding: 8px 16px 16px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body .pf-summary, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body .pf-summary { + margin-bottom: 8px; +} + +/* Modal body uses the base card styles - only minor adjustments needed */ +:is(*, #\#):is(*, #\#):is(*, #\#) + pagefind-modal-body + .pf-result-card:has([data-pf-selected]), +:is(*, #\#):is(*, #\#):is(*, #\#) + .pf-modal-body + .pf-result-card:has([data-pf-selected]) { + background: var(--pf-skeleton); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-footer, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer { + padding: 10px 16px; + border-top: 1px solid var(--pf-border); + display: flex; + align-items: center; + gap: 16px; + font-size: 12px; + color: var(--pf-text-muted); + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-hint, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hint { + display: flex; + align-items: center; + gap: 6px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-key, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-key { + min-width: 18px; + height: 18px; + font-size: 10px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-keyboard-hints, +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hints { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 16px; + font-size: 12px; + color: var(--pf-text-muted); + min-height: 20px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox { + position: relative; + display: inline-block; + width: 100%; + max-width: var(--pf-searchbox-max-width); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper { + position: relative; +} + +/* Override trigger-shortcut positioning when inside searchbox */ +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper .pf-trigger-shortcut { + position: absolute; + inset-inline-end: 12px; + top: 50%; + transform: translateY(-50%); + pointer-events: none; + margin-inline-start: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input { + padding: 0; + padding-inline-start: 32px; + padding-inline-end: 12px; +} + +/* Add padding when shortcut is present */ +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper:has(.pf-trigger-shortcut) .pf-searchbox-input { + padding-inline-end: 72px; +} + +/* Hide shortcut badge when input is focused */ +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus ~ .pf-trigger-shortcut { + display: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus { + padding-inline-end: 12px; + border-color: var(--pf-border-focus); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox.open .pf-searchbox-input { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-color: var(--pf-border); +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-dropdown { + display: none; + flex-direction: column; + position: absolute; + top: 100%; + left: 0; + right: 0; + background: var(--pf-background); + border: 1px solid var(--pf-border); + border-top: none; + border-radius: 0 0 var(--pf-border-radius) var(--pf-border-radius); + box-shadow: var(--pf-shadow-md); + max-height: var(--pf-searchbox-dropdown-max-height); + z-index: 100; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox.open .pf-searchbox-dropdown { + display: flex; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-results { + list-style: none; + padding: 4px; + margin: 0; + flex: 1; + overflow-y: auto; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result { + display: block; + padding: 12px 10px; + min-height: 44px; + border-radius: 4px; + cursor: pointer; + text-decoration: none; + color: inherit; + box-sizing: border-box; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:hover { + background: var(--pf-hover); +} + +/* Placeholder skeleton - non-interactive */ +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-placeholder { + cursor: default; + pointer-events: none; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-placeholder:hover { + background: transparent; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result[data-pf-selected] { + background: var(--pf-hover); + outline: var(--pf-outline-width) solid var(--pf-outline-focus); + outline-offset: -2px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-title { + font-size: 13px; + font-weight: 500; + color: var(--pf-text); + margin: 0; + line-height: 1.3; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-excerpt { + font-size: 12px; + color: var(--pf-text-secondary); + margin: 2px 0 0 0; + line-height: 1.4; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-subresult { + padding-inline-start: 20px; + border-inline-start: 2px solid var(--pf-border); + margin-inline-start: 10px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-meta { + display: flex; + align-items: center; + gap: 6px; + margin-top: 4px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer { + padding: 8px 10px; + border-top: 1px solid var(--pf-border); + display: flex; + align-items: center; + justify-content: flex-end; + gap: 12px; + font-size: 11px; + color: var(--pf-text-muted); + flex-shrink: 0; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-hint { + display: flex; + align-items: center; + gap: 4px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-empty { + padding: 20px 10px; + text-align: center; + color: var(--pf-text-muted); + font-size: 13px; +} + +:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-loading { + padding: 16px 10px; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + color: var(--pf-text-muted); + font-size: 13px; +} + +/* Ensure focus indicators are visible in Windows High Contrast Mode */ +@media (forced-colors: active) { + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible, + :is(*, #\#):is(*, #\#):is(*, #\#) + .pf-result-card:has(.pf-result-link:focus-visible), + :is(*, #\#):is(*, #\#):is(*, #\#) + .pf-heading-chip:has(.pf-heading-link:focus-visible), + :is(*, #\#):is(*, #\#):is(*, #\#) + .pf-filter-checkbox:has(.pf-checkbox-input:focus-visible), + :is(*, #\#):is(*, #\#):is(*, #\#) + .pf-dropdown-option.pf-dropdown-option-focused, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result[data-pf-selected] { + outline: 2px solid CanvasText; + outline-offset: 2px; + } +} + +/* Hide keyboard hints on touch-only devices (no hover capability) */ +@media (hover: none) { + :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-keyboard-hints, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hints, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer, + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-hint { + display: none; + } +} + +@media (max-width: 640px) { + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-menu { + min-width: unset; + width: max(180px, calc(100vw - 32px)); + max-width: calc(100vw - 32px); + inset-inline-start: unset; + left: 50%; + transform: translateX(-50%); + max-height: min(var(--pf-dropdown-max-height), 50vh); + } + + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-dropdown { + max-height: min(var(--pf-searchbox-dropdown-max-height), 60vh); + } + + :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-pane { + padding: 12px; + gap: 16px; + } +} diff --git a/pagefind/pagefind-component-ui.js b/pagefind/pagefind-component-ui.js new file mode 100644 index 0000000..d8c1351 --- /dev/null +++ b/pagefind/pagefind-component-ui.js @@ -0,0 +1,56 @@ +"use strict";(()=>{var ls=Object.defineProperty;var h=(n,s)=>{for(var e in s)ls(n,e,{get:s[e],enumerable:!0})};var Bt={};h(Bt,{PagefindConfig:()=>Re,PagefindElement:()=>f,PagefindFilterDropdown:()=>Me,PagefindFilterPane:()=>Ne,PagefindInput:()=>ke,PagefindKeyboardHints:()=>Le,PagefindModal:()=>Oe,PagefindModalBody:()=>Ie,PagefindModalFooter:()=>Ue,PagefindModalHeader:()=>we,PagefindModalTrigger:()=>He,PagefindResults:()=>Se,PagefindSearchbox:()=>Fe,PagefindSummary:()=>Ae,configureInstance:()=>Qt,getInstanceManager:()=>Ce});var os="a[href], button, input, [tabindex]";function Kt(n){let s=n.querySelectorAll(os);for(let e of s)if(!(e.tabIndex<0)&&!e.disabled&&!e.hasAttribute("hidden")&&window.getComputedStyle(e).display!=="none")return!0;return!1}function $t(n,s){let e=null;for(let t of s)t.contains(n)||!(n.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING)||Kt(t)&&(e===null||t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING)&&(e=t);return e}function Pe(n,s){let e=null;for(let t of s)t.contains(n)||!(n.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_PRECEDING)||Kt(t)&&(e===null||t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)&&(e=t);return e}var Ve={};h(Ve,{comments:()=>us,default:()=>ps,direction:()=>ds,strings:()=>hs,thanks_to:()=>cs});var cs="Jan Claasen ",us="",ds="ltr",hs={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",total_zero_results:"Geen resultate",total_one_result:"[COUNT] resultaat",total_many_results:"[COUNT] resultate",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]",results_label:"Soekresultate",keyboard_navigate:"navigeer",keyboard_select:"kies",keyboard_clear:"wis",keyboard_close:"sluit",keyboard_search:"soek",error_search:"Soek het misluk",filter_selected_one:"[COUNT] gekies",filter_selected_many:"[COUNT] gekies",input_hint:"Resultate sal verskyn terwyl jy tik",loading:"Laai"},ps={thanks_to:cs,comments:us,direction:ds,strings:hs};var qe={};h(qe,{comments:()=>_s,default:()=>Es,direction:()=>fs,strings:()=>gs,thanks_to:()=>ms});var ms="Jermanuts",_s="",fs="rtl",gs={placeholder:"\u0628\u062D\u062B",clear_search:"\u0627\u0645\u0633\u062D",load_more:"\u062D\u0645\u0651\u0650\u0644 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C",search_label:"\u0627\u0628\u062D\u062B \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639",filters_label:"\u062A\u0635\u0641\u064A\u0627\u062A",zero_results:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",many_results:"[COUNT] \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",one_result:"[COUNT] \u0646\u062A\u064A\u062C\u0629 \u0644 [SEARCH_TERM]",total_zero_results:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C",total_one_result:"[COUNT] \u0646\u062A\u064A\u062C\u0629",total_many_results:"[COUNT] \u0646\u062A\u0627\u0626\u062C",alt_search:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u064A\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0644 [DIFFERENT_TERM] \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643",search_suggestion:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u062C\u0631\u0628 \u0623\u062D\u062F \u0639\u0645\u0644\u064A\u0627\u062A \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u062A\u0627\u0644\u064A\u0629:",searching:"\u064A\u0628\u062D\u062B \u0639\u0646 [SEARCH_TERM]...",results_label:"\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0628\u062D\u062B",keyboard_navigate:"\u062A\u0646\u0642\u0644",keyboard_select:"\u0627\u062E\u062A\u064A\u0627\u0631",keyboard_clear:"\u0627\u0645\u0633\u062D",keyboard_close:"\u0625\u063A\u0644\u0627\u0642",keyboard_search:"\u0628\u062D\u062B",error_search:"\u0641\u0634\u0644 \u0627\u0644\u0628\u062D\u062B",filter_selected_one:"[COUNT] \u0645\u062D\u062F\u062F",filter_selected_many:"[COUNT] \u0645\u062D\u062F\u062F",input_hint:"\u0633\u062A\u0638\u0647\u0631 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0643\u062A\u0627\u0628\u0629",loading:"\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0645\u064A\u0644"},Es={thanks_to:ms,comments:_s,direction:fs,strings:gs};var Ge={};h(Ge,{comments:()=>Ts,default:()=>vs,direction:()=>Cs,strings:()=>ys,thanks_to:()=>bs});var bs="Maruf Alom ",Ts="",Cs="ltr",ys={placeholder:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",clear_search:"\u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09C1\u09A8",load_more:"\u0986\u09B0\u09CB \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09C1\u09A8",search_label:"\u098F\u0987 \u0993\u09AF\u09BC\u09C7\u09AC\u09B8\u09BE\u0987\u099F\u09C7 \u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",filters_label:"\u09AB\u09BF\u09B2\u09CD\u099F\u09BE\u09B0",zero_results:"[SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF",many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09BF\u09AF\u09BC\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09BF\u09AF\u09BC\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",total_zero_results:"\u0995\u09CB\u09A8 \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A8\u09C7\u0987",total_one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2",total_many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2",alt_search:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF. \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09C7 [DIFFERENT_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7",search_suggestion:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u09AC\u09BF\u09B7\u09AF\u09BC\u09C7. \u09A8\u09BF\u09A8\u09CD\u09AE\u09C7\u09B0 \u09AC\u09BF\u09B7\u09AF\u09BC\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09A6\u09C7\u0996\u09C1\u09A8:",searching:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u099A\u09B2\u099B\u09C7 [SEARCH_TERM]...",results_label:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8\u09C7\u09B0 \u09AB\u09B2\u09BE\u09AB\u09B2",keyboard_navigate:"\u09A8\u09C7\u09AD\u09BF\u0997\u09C7\u099F",keyboard_select:"\u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09A8",keyboard_clear:"\u09AE\u09C1\u099B\u09C1\u09A8",keyboard_close:"\u09AC\u09A8\u09CD\u09A7",keyboard_search:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8",error_search:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5",filter_selected_one:"[COUNT]-\u099F\u09BF \u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09BF\u09A4",filter_selected_many:"[COUNT]-\u099F\u09BF \u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09BF\u09A4",input_hint:"\u099F\u09BE\u0987\u09AA \u0995\u09B0\u09BE\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09B8\u09BE\u09A5\u09C7 \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09BE \u09AF\u09BE\u09AC\u09C7",loading:"\u09B2\u09CB\u09A1 \u09B9\u099A\u09CD\u099B\u09C7"},vs={thanks_to:bs,comments:Ts,direction:Cs,strings:ys};var We={};h(We,{comments:()=>ks,default:()=>Ns,direction:()=>As,strings:()=>Ss,thanks_to:()=>Rs});var Rs="Pablo Villaverde ",ks="",As="ltr",Ss={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure m\xE9s resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",total_zero_results:"Sense resultats",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultats",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques seg\xFCents:",searching:"Cercant [SEARCH_TERM]...",results_label:"Resultats de la cerca",keyboard_navigate:"navegar",keyboard_select:"triar",keyboard_clear:"netejar",keyboard_close:"tancar",keyboard_search:"cercar",error_search:"Error en la cerca",filter_selected_one:"[COUNT] seleccionat",filter_selected_many:"[COUNT] seleccionats",input_hint:"Els resultats apareixeran mentre escriviu",loading:"Carregant"},Ns={thanks_to:Rs,comments:ks,direction:As,strings:Ss};var Ye={};h(Ye,{comments:()=>Os,default:()=>ws,direction:()=>xs,strings:()=>Hs,thanks_to:()=>Ms});var Ms="Dalibor Hon ",Os="",xs="ltr",Hs={placeholder:"Hledat",clear_search:"Smazat",load_more:"Na\u010D\xEDst dal\u0161\xED v\xFDsledky",search_label:"Prohledat tuto str\xE1nku",filters_label:"Filtry",zero_results:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]",many_results:"[COUNT] v\xFDsledk\u016F pro [SEARCH_TERM]",one_result:"[COUNT] v\xFDsledek pro [SEARCH_TERM]",total_zero_results:"\u017D\xE1dn\xE9 v\xFDsledky",total_one_result:"[COUNT] v\xFDsledek",total_many_results:"[COUNT] v\xFDsledk\u016F",alt_search:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Zobrazuj\xED se v\xFDsledky pro [DIFFERENT_TERM]",search_suggestion:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Souvisej\xEDc\xED v\xFDsledky hled\xE1n\xED:",searching:"Hled\xE1m [SEARCH_TERM]...",results_label:"V\xFDsledky hled\xE1n\xED",keyboard_navigate:"navigovat",keyboard_select:"vybrat",keyboard_clear:"smazat",keyboard_close:"zav\u0159\xEDt",keyboard_search:"hledat",error_search:"Hled\xE1n\xED selhalo",filter_selected_one:"[COUNT] vybran\xFD",filter_selected_many:"[COUNT] vybran\xFDch",input_hint:"V\xFDsledky se zobraz\xED b\u011Bhem psan\xED",loading:"Na\u010D\xEDt\xE1n\xED"},ws={thanks_to:Ms,comments:Os,direction:xs,strings:Hs};var Je={};h(Je,{comments:()=>Us,default:()=>Ps,direction:()=>Ls,strings:()=>Fs,thanks_to:()=>Is});var Is="Jonas Smedegaard ",Us="",Ls="ltr",Fs={placeholder:"S\xF8g",clear_search:"Nulstil",load_more:"Indl\xE6s flere resultater",search_label:"S\xF8g p\xE5 dette website",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultater",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultater",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v et af disse s\xF8geord i stedet:",searching:"S\xF8ger efter [SEARCH_TERM]...",results_label:"S\xF8geresultater",keyboard_navigate:"naviger",keyboard_select:"v\xE6lg",keyboard_clear:"ryd",keyboard_close:"luk",keyboard_search:"s\xF8g",error_search:"S\xF8gning mislykkedes",filter_selected_one:"[COUNT] valgt",filter_selected_many:"[COUNT] valgte",input_hint:"Resultater vises mens du skriver",loading:"Indl\xE6ser"},Ps={thanks_to:Is,comments:Us,direction:Ls,strings:Fs};var Ze={};h(Ze,{comments:()=>Ds,default:()=>Ks,direction:()=>js,strings:()=>Bs,thanks_to:()=>zs});var zs="Jan Claasen ",Ds="",js="ltr",Bs={placeholder:"Suche",clear_search:"L\xF6schen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse f\xFCr [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse f\xFCr [SEARCH_TERM]",one_result:"[COUNT] Ergebnis f\xFCr [SEARCH_TERM]",total_zero_results:"Keine Ergebnisse",total_one_result:"[COUNT] Ergebnis",total_many_results:"[COUNT] Ergebnisse",alt_search:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Stattdessen werden Ergebnisse f\xFCr [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche nach [SEARCH_TERM]\u202F\u2026",results_label:"Suchergebnisse",keyboard_navigate:"navigieren",keyboard_select:"ausw\xE4hlen",keyboard_clear:"l\xF6schen",keyboard_close:"schlie\xDFen",keyboard_search:"suchen",error_search:"Suche fehlgeschlagen",filter_selected_one:"[COUNT] ausgew\xE4hlt",filter_selected_many:"[COUNT] ausgew\xE4hlt",input_hint:"Ergebnisse werden w\xE4hrend der Eingabe angezeigt",loading:"Wird geladen"},Ks={thanks_to:zs,comments:Ds,direction:js,strings:Bs};var Xe={};h(Xe,{comments:()=>Vs,default:()=>Ws,direction:()=>qs,strings:()=>Gs,thanks_to:()=>$s});var $s="George Papadopoulos",Vs="",qs="ltr",Gs={placeholder:"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7",clear_search:"\u039A\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2",load_more:"\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03C0\u03B5\u03C1\u03B9\u03C3\u03C3\u03CC\u03C4\u03B5\u03C1\u03C9\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03B5\u03C3\u03BC\u03AC\u03C4\u03C9\u03BD",search_label:"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03C3\u03B5 \u03B1\u03C5\u03C4\u03CC\u03BD \u03C4\u03BF\u03BD \u03B9\u03C3\u03C4\u03CC\u03C4\u03BF\u03C0\u03BF",filters_label:"\u03A6\u03AF\u03BB\u03C4\u03C1\u03B1",zero_results:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]",many_results:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]",one_result:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03AD\u03BB\u03B5\u03C3\u03BC\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]",total_zero_results:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1",total_one_result:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03AD\u03BB\u03B5\u03C3\u03BC\u03B1",total_many_results:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1",alt_search:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]. \u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [DIFFERENT_TERM]",search_suggestion:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]. \u0394\u03BF\u03BA\u03B9\u03BC\u03AC\u03C3\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03B1\u03C0\u03CC \u03C4\u03B9\u03C2 \u03C0\u03B1\u03C1\u03B1\u03BA\u03AC\u03C4\u03C9 \u03B1\u03BD\u03B1\u03B6\u03B7\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2:",searching:"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B3\u03B9\u03B1 [SEARCH_TERM]...",results_label:"\u0391\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2",keyboard_navigate:"\u03C0\u03BB\u03BF\u03AE\u03B3\u03B7\u03C3\u03B7",keyboard_select:"\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE",keyboard_clear:"\u03BA\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2",keyboard_close:"\u03BA\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF",keyboard_search:"\u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7",error_search:"\u0397 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5",filter_selected_one:"[COUNT] \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF",filter_selected_many:"[COUNT] \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1",input_hint:"\u03A4\u03B1 \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B8\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BA\u03B1\u03B8\u03CE\u03C2 \u03C0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03BF\u03B3\u03B5\u03AF\u03C4\u03B5",loading:"\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7"},Ws={thanks_to:$s,comments:Vs,direction:qs,strings:Gs};var Qe={};h(Qe,{comments:()=>Js,default:()=>Qs,direction:()=>Zs,strings:()=>Xs,thanks_to:()=>Ys});var Ys="Liam Bigelow ",Js="",Zs="ltr",Xs={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",total_zero_results:"No results",total_one_result:"[COUNT] result",total_many_results:"[COUNT] results",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]...",results_label:"Search results",keyboard_navigate:"navigate",keyboard_select:"select",keyboard_clear:"clear",keyboard_close:"close",keyboard_search:"search",error_search:"Search failed",filter_selected_one:"[COUNT] selected",filter_selected_many:"[COUNT] selected",input_hint:"Results will appear as you type",loading:"Loading"},Qs={thanks_to:Ys,comments:Js,direction:Zs,strings:Xs};var et={};h(et,{comments:()=>tr,default:()=>ir,direction:()=>sr,strings:()=>rr,thanks_to:()=>er});var er="Pablo Villaverde ",tr="",sr="ltr",rr={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver m\xE1s resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",total_zero_results:"Sin resultados",total_one_result:"[COUNT] resultado",total_many_results:"[COUNT] resultados",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes b\xFAsquedas:",searching:"Buscando [SEARCH_TERM]...",results_label:"Resultados de b\xFAsqueda",keyboard_navigate:"navegar",keyboard_select:"elegir",keyboard_clear:"limpiar",keyboard_close:"cerrar",keyboard_search:"buscar",error_search:"Error en la b\xFAsqueda",filter_selected_one:"[COUNT] seleccionado",filter_selected_many:"[COUNT] seleccionados",input_hint:"Los resultados aparecer\xE1n mientras escribe",loading:"Cargando"},ir={thanks_to:er,comments:tr,direction:sr,strings:rr};var tt={};h(tt,{comments:()=>ar,default:()=>cr,direction:()=>lr,strings:()=>or,thanks_to:()=>nr});var nr="Mikel Larreategi ",ar="",lr="ltr",or={placeholder:"Bilatu",clear_search:"Garbitu",load_more:"Kargatu emaitza gehiagi",search_label:"Bilatu",filters_label:"Iragazkiak",zero_results:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat",many_results:"[COUNT] emaitza [SEARCH_TERM] bilaketarentzat",one_result:"Emaitza bat [COUNT] [SEARCH_TERM] bilaketarentzat",total_zero_results:"Emaitzarik ez",total_one_result:"[COUNT] emaitza",total_many_results:"[COUNT] emaitza",alt_search:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat. [DIFFERENT_TERM] bilaketaren emaitzak erakusten",search_suggestion:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat. Saiatu hauetako beste bateikin:",searching:"[SEARCH_TERM] bilatzen...",results_label:"Bilaketaren emaitzak",keyboard_navigate:"nabigatu",keyboard_select:"hautatu",keyboard_clear:"garbitu",keyboard_close:"itxi",keyboard_search:"bilatu",error_search:"Bilaketak huts egin du",filter_selected_one:"[COUNT] hautatuta",filter_selected_many:"[COUNT] hautatuta",input_hint:"Emaitzak idatzi ahala agertuko dira",loading:"Kargatzen"},cr={thanks_to:nr,comments:ar,direction:lr,strings:or};var st={};h(st,{comments:()=>dr,default:()=>mr,direction:()=>hr,strings:()=>pr,thanks_to:()=>ur});var ur="Ali Khaleqi Yekta ",dr="",hr="rtl",pr={placeholder:"\u062C\u0633\u062A\u062C\u0648",clear_search:"\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC",load_more:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0646\u062A\u0627\u06CC\u062C \u0628\u06CC\u0634\u062A\u0631",search_label:"\u062C\u0633\u062A\u062C\u0648 \u062F\u0631 \u0633\u0627\u06CC\u062A",filters_label:"\u0641\u06CC\u0644\u062A\u0631\u0647\u0627",zero_results:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F",many_results:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",one_result:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",total_zero_results:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u06CC\u0627\u0641\u062A \u0646\u0634\u062F",total_one_result:"[COUNT] \u0646\u062A\u06CC\u062C\u0647",total_many_results:"[COUNT] \u0646\u062A\u06CC\u062C\u0647",alt_search:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u062F\u0631 \u0639\u0648\u0636 \u0646\u062A\u0627\u06CC\u062C \u0628\u0631\u0627\u06CC [DIFFERENT_TERM] \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F",search_suggestion:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u06CC\u06A9\u06CC \u0627\u0632 \u062C\u0633\u062A\u062C\u0648\u0647\u0627\u06CC \u0632\u06CC\u0631 \u0631\u0627 \u0627\u0645\u062A\u062D\u0627\u0646 \u06A9\u0646\u06CC\u062F:",searching:"\u062F\u0631 \u062D\u0627\u0644 \u062C\u0633\u062A\u062C\u0648\u06CC [SEARCH_TERM]...",results_label:"\u0646\u062A\u0627\u06CC\u062C \u062C\u0633\u062A\u062C\u0648",keyboard_navigate:"\u067E\u06CC\u0645\u0627\u06CC\u0634",keyboard_select:"\u0627\u0646\u062A\u062E\u0627\u0628",keyboard_clear:"\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC",keyboard_close:"\u0628\u0633\u062A\u0646",keyboard_search:"\u062C\u0633\u062A\u062C\u0648",error_search:"\u062C\u0633\u062A\u062C\u0648 \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062F",filter_selected_one:"[COUNT] \u0627\u0646\u062A\u062E\u0627\u0628 \u0634\u062F\u0647",filter_selected_many:"[COUNT] \u0627\u0646\u062A\u062E\u0627\u0628 \u0634\u062F\u0647",input_hint:"\u0646\u062A\u0627\u06CC\u062C \u0647\u0646\u06AF\u0627\u0645 \u062A\u0627\u06CC\u067E \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u0646\u062F",loading:"\u062F\u0631 \u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC"},mr={thanks_to:ur,comments:dr,direction:hr,strings:pr};var rt={};h(rt,{comments:()=>fr,default:()=>br,direction:()=>gr,strings:()=>Er,thanks_to:()=>_r});var _r="Valtteri Laitinen ",fr="",gr="ltr",Er={placeholder:"Haku",clear_search:"Tyhjenn\xE4",load_more:"Lataa lis\xE4\xE4 tuloksia",search_label:"Hae t\xE4lt\xE4 sivustolta",filters_label:"Suodattimet",zero_results:"Ei tuloksia haulle [SEARCH_TERM]",many_results:"[COUNT] tulosta haulle [SEARCH_TERM]",one_result:"[COUNT] tulos haulle [SEARCH_TERM]",total_zero_results:"Ei tuloksia",total_one_result:"[COUNT] tulos",total_many_results:"[COUNT] tulosta",alt_search:"Ei tuloksia haulle [SEARCH_TERM]. N\xE4ytet\xE4\xE4n tulokset sen sijaan haulle [DIFFERENT_TERM]",search_suggestion:"Ei tuloksia haulle [SEARCH_TERM]. Kokeile jotain seuraavista:",searching:"Haetaan [SEARCH_TERM]...",results_label:"Hakutulokset",keyboard_navigate:"siirry",keyboard_select:"valitse",keyboard_clear:"tyhjenn\xE4",keyboard_close:"sulje",keyboard_search:"hae",error_search:"Haku ep\xE4onnistui",filter_selected_one:"[COUNT] valittu",filter_selected_many:"[COUNT] valittu",input_hint:"Tulokset n\xE4kyv\xE4t kirjoittaessasi",loading:"Ladataan"},br={thanks_to:_r,comments:fr,direction:gr,strings:Er};var it={};h(it,{comments:()=>Cr,default:()=>Rr,direction:()=>yr,strings:()=>vr,thanks_to:()=>Tr});var Tr="Nicolas Friedli ",Cr="",yr="ltr",vr={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de r\xE9sultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de r\xE9sultat pour [SEARCH_TERM]",many_results:"[COUNT] r\xE9sultats pour [SEARCH_TERM]",one_result:"[COUNT] r\xE9sultat pour [SEARCH_TERM]",total_zero_results:"Pas de r\xE9sultat",total_one_result:"[COUNT] r\xE9sultat",total_many_results:"[COUNT] r\xE9sultats",alt_search:"Pas de r\xE9sultat pour [SEARCH_TERM]. Montre les r\xE9sultats pour [DIFFERENT_TERM] \xE0 la place",search_suggestion:"Pas de r\xE9sultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]...",results_label:"R\xE9sultats de recherche",keyboard_navigate:"naviguer",keyboard_select:"choisir",keyboard_clear:"effacer",keyboard_close:"fermer",keyboard_search:"rechercher",error_search:"\xC9chec de la recherche",filter_selected_one:"[COUNT] s\xE9lectionn\xE9",filter_selected_many:"[COUNT] s\xE9lectionn\xE9s",input_hint:"Les r\xE9sultats appara\xEEtront au fur et \xE0 mesure de la saisie",loading:"Chargement"},Rr={thanks_to:Tr,comments:Cr,direction:yr,strings:vr};var nt={};h(nt,{comments:()=>Ar,default:()=>Mr,direction:()=>Sr,strings:()=>Nr,thanks_to:()=>kr});var kr="Pablo Villaverde ",Ar="",Sr="ltr",Nr={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver m\xE1is resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",total_zero_results:"Sen resultados",total_one_result:"[COUNT] resultado",total_many_results:"[COUNT] resultados",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]...",results_label:"Resultados da busca",keyboard_navigate:"navegar",keyboard_select:"escoller",keyboard_clear:"limpar",keyboard_close:"pechar",keyboard_search:"buscar",error_search:"Erro na busca",filter_selected_one:"[COUNT] seleccionado",filter_selected_many:"[COUNT] seleccionados",input_hint:"Os resultados aparecer\xE1n mentres escribe",loading:"Cargando"},Mr={thanks_to:kr,comments:Ar,direction:Sr,strings:Nr};var at={};h(at,{comments:()=>xr,default:()=>Ir,direction:()=>Hr,strings:()=>wr,thanks_to:()=>Or});var Or="Nir Tamir ",xr="",Hr="rtl",wr={placeholder:"\u05D7\u05D9\u05E4\u05D5\u05E9",clear_search:"\u05E0\u05D9\u05E7\u05D5\u05D9",load_more:"\u05E2\u05D5\u05D3 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",search_label:"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05D6\u05D4",filters_label:"\u05DE\u05E1\u05E0\u05E0\u05D9\u05DD",zero_results:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",many_results:"\u05E0\u05DE\u05E6\u05D0\u05D5 [COUNT] \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",one_result:"\u05E0\u05DE\u05E6\u05D0\u05D4 \u05EA\u05D5\u05E6\u05D0\u05D4 \u05D0\u05D7\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",total_zero_results:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",total_one_result:"\u05EA\u05D5\u05E6\u05D0\u05D4 [COUNT]",total_many_results:"[COUNT] \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",alt_search:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05DE\u05D5\u05E6\u05D2\u05D5\u05EA \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [DIFFERENT_TERM]",search_suggestion:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05E0\u05E1\u05D5 \u05D0\u05D7\u05D3 \u05DE\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9\u05D9\u05DD \u05D4\u05D1\u05D0\u05D9\u05DD:",searching:"\u05DE\u05D7\u05E4\u05E9 \u05D0\u05EA [SEARCH_TERM]...",results_label:"\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05D7\u05D9\u05E4\u05D5\u05E9",keyboard_navigate:"\u05E0\u05D9\u05D5\u05D5\u05D8",keyboard_select:"\u05D1\u05D7\u05D9\u05E8\u05D4",keyboard_clear:"\u05E0\u05D9\u05E7\u05D5\u05D9",keyboard_close:"\u05E1\u05D2\u05D9\u05E8\u05D4",keyboard_search:"\u05D7\u05D9\u05E4\u05D5\u05E9",error_search:"\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9 \u05E0\u05DB\u05E9\u05DC",filter_selected_one:"[COUNT] \u05E0\u05D1\u05D7\u05E8",filter_selected_many:"[COUNT] \u05E0\u05D1\u05D7\u05E8\u05D5",input_hint:"\u05D4\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05D9\u05D5\u05E4\u05D9\u05E2\u05D5 \u05EA\u05D5\u05DA \u05DB\u05D3\u05D9 \u05D4\u05E7\u05DC\u05D3\u05D4",loading:"\u05D8\u05D5\u05E2\u05DF"},Ir={thanks_to:Or,comments:xr,direction:Hr,strings:wr};var lt={};h(lt,{comments:()=>Lr,default:()=>zr,direction:()=>Fr,strings:()=>Pr,thanks_to:()=>Ur});var Ur="Amit Yadav ",Lr="",Fr="ltr",Pr={placeholder:"\u0916\u094B\u091C\u0947\u0902",clear_search:"\u0938\u093E\u092B \u0915\u0930\u0947\u0902",load_more:"\u0914\u0930 \u0905\u0927\u093F\u0915 \u092A\u0930\u093F\u0923\u093E\u092E \u0932\u094B\u0921 \u0915\u0930\u0947\u0902",search_label:"\u0907\u0938 \u0938\u093E\u0907\u091F \u092E\u0947\u0902 \u0916\u094B\u091C\u0947\u0902",filters_label:"\u092B\u093C\u093F\u0932\u094D\u091F\u0930",zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E",many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u0947",one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u093E",total_zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902",total_one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E",total_many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E",alt_search:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0907\u0938\u0915\u0947 \u092C\u091C\u093E\u092F [DIFFERENT_TERM] \u0915\u0947 \u0932\u093F\u090F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E \u0930\u0939\u093E \u0939\u0948",search_suggestion:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0928\u093F\u092E\u094D\u0928\u0932\u093F\u0916\u093F\u0924 \u0916\u094B\u091C\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u0915\u094B\u0908 \u090F\u0915 \u0906\u091C\u093C\u092E\u093E\u090F\u0902:",searching:"[SEARCH_TERM] \u0915\u0940 \u0916\u094B\u091C \u0915\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948...",results_label:"\u0916\u094B\u091C \u092A\u0930\u093F\u0923\u093E\u092E",keyboard_navigate:"\u0928\u0947\u0935\u093F\u0917\u0947\u091F",keyboard_select:"\u091A\u0941\u0928\u0947\u0902",keyboard_clear:"\u0938\u093E\u092B\u093C \u0915\u0930\u0947\u0902",keyboard_close:"\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",keyboard_search:"\u0916\u094B\u091C\u0947\u0902",error_search:"\u0916\u094B\u091C \u0935\u093F\u092B\u0932",filter_selected_one:"[COUNT] \u091A\u092F\u0928\u093F\u0924",filter_selected_many:"[COUNT] \u091A\u092F\u0928\u093F\u0924",input_hint:"\u091F\u093E\u0907\u092A \u0915\u0930\u0924\u0947 \u0938\u092E\u092F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E\u0908 \u0926\u0947\u0902\u0917\u0947",loading:"\u0932\u094B\u0921 \u0939\u094B \u0930\u0939\u093E \u0939\u0948"},zr={thanks_to:Ur,comments:Lr,direction:Fr,strings:Pr};var ot={};h(ot,{comments:()=>jr,default:()=>$r,direction:()=>Br,strings:()=>Kr,thanks_to:()=>Dr});var Dr="Diomed ",jr="",Br="ltr",Kr={placeholder:"Tra\u017Ei",clear_search:"O\u010Disti",load_more:"U\u010Ditaj vi\u0161e rezultata",search_label:"Pretra\u017Ei ovu stranicu",filters_label:"Filteri",zero_results:"Nema rezultata za [SEARCH_TERM]",many_results:"[COUNT] rezultata za [SEARCH_TERM]",one_result:"[COUNT] rezultat za [SEARCH_TERM]",total_zero_results:"Nema rezultata",total_one_result:"[COUNT] rezultat",total_many_results:"[COUNT] rezultata",alt_search:"Nema rezultata za [SEARCH_TERM]. Prikazujem rezultate za [DIFFERENT_TERM]",search_suggestion:"Nema rezultata za [SEARCH_TERM]. Poku\u0161aj s jednom od ovih pretraga:",searching:"Pretra\u017Eujem [SEARCH_TERM]...",results_label:"Rezultati pretrage",keyboard_navigate:"navigiraj",keyboard_select:"odaberi",keyboard_clear:"o\u010Disti",keyboard_close:"zatvori",keyboard_search:"tra\u017Ei",error_search:"Pretraga nije uspjela",filter_selected_one:"[COUNT] odabran",filter_selected_many:"[COUNT] odabranih",input_hint:"Rezultati \u0107e se pojaviti dok tipkate",loading:"U\u010Ditavanje"},$r={thanks_to:Dr,comments:jr,direction:Br,strings:Kr};var ct={};h(ct,{comments:()=>qr,default:()=>Yr,direction:()=>Gr,strings:()=>Wr,thanks_to:()=>Vr});var Vr="Adam Laki ",qr="",Gr="ltr",Wr={placeholder:"Keres\xE9s",clear_search:"T\xF6rl\xE9s",load_more:"Tov\xE1bbi tal\xE1latok bet\xF6lt\xE9se",search_label:"Keres\xE9s az oldalon",filters_label:"Sz\u0171r\xE9s",zero_results:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",many_results:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",one_result:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",total_zero_results:"Nincs tal\xE1lat",total_one_result:"[COUNT] tal\xE1lat",total_many_results:"[COUNT] tal\xE1lat",alt_search:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Tal\xE1latok mutat\xE1sa ink\xE1bb a(z) [DIFFERENT_TERM] kifejez\xE9sre",search_suggestion:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Pr\xF3b\xE1ld meg a k\xF6vetkez\u0151 keres\xE9sek egyik\xE9t:",searching:"Keres\xE9s a(z) [SEARCH_TERM] kifejez\xE9sre...",results_label:"Keres\xE9si tal\xE1latok",keyboard_navigate:"navig\xE1l\xE1s",keyboard_select:"kiv\xE1laszt\xE1s",keyboard_clear:"t\xF6rl\xE9s",keyboard_close:"bez\xE1r\xE1s",keyboard_search:"keres\xE9s",error_search:"A keres\xE9s sikertelen",filter_selected_one:"[COUNT] kiv\xE1lasztva",filter_selected_many:"[COUNT] kiv\xE1lasztva",input_hint:"A tal\xE1latok g\xE9pel\xE9s k\xF6zben jelennek meg",loading:"Bet\xF6lt\xE9s"},Yr={thanks_to:Vr,comments:qr,direction:Gr,strings:Wr};var ut={};h(ut,{comments:()=>Zr,default:()=>ei,direction:()=>Xr,strings:()=>Qr,thanks_to:()=>Jr});var Jr="Nixentric",Zr="",Xr="ltr",Qr={placeholder:"Cari",clear_search:"Bersihkan",load_more:"Muat lebih banyak hasil",search_label:"Telusuri situs ini",filters_label:"Filter",zero_results:"[SEARCH_TERM] tidak ditemukan",many_results:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",one_result:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",total_zero_results:"Tidak ada hasil",total_one_result:"[COUNT] hasil",total_many_results:"[COUNT] hasil",alt_search:"[SEARCH_TERM] tidak ditemukan. Menampilkan hasil [DIFFERENT_TERM] sebagai gantinya",search_suggestion:"[SEARCH_TERM] tidak ditemukan. Coba salah satu pencarian berikut ini:",searching:"Mencari [SEARCH_TERM]...",results_label:"Hasil pencarian",keyboard_navigate:"navigasi",keyboard_select:"pilih",keyboard_clear:"bersihkan",keyboard_close:"tutup",keyboard_search:"cari",error_search:"Pencarian gagal",filter_selected_one:"[COUNT] dipilih",filter_selected_many:"[COUNT] dipilih",input_hint:"Hasil akan muncul saat Anda mengetik",loading:"Memuat"},ei={thanks_to:Jr,comments:Zr,direction:Xr,strings:Qr};var dt={};h(dt,{comments:()=>si,default:()=>ni,direction:()=>ri,strings:()=>ii,thanks_to:()=>ti});var ti="Cosette Bruhns Alonso, Andrew Janco ",si="",ri="ltr",ii={placeholder:"Cerca",clear_search:"Cancella la cronologia",load_more:"Mostra pi\xF9 risultati",search_label:"Cerca nel sito",filters_label:"Filtri di ricerca",zero_results:"Nessun risultato per [SEARCH_TERM]",many_results:"[COUNT] risultati per [SEARCH_TERM]",one_result:"[COUNT] risultato per [SEARCH_TERM]",total_zero_results:"Nessun risultato",total_one_result:"[COUNT] risultato",total_many_results:"[COUNT] risultati",alt_search:"Nessun risultato per [SEARCH_TERM]. Mostrando risultati per [DIFFERENT_TERM] come alternativa.",search_suggestion:"Nessun risultato per [SEARCH_TERM]. Prova una delle seguenti ricerche:",searching:"Cercando [SEARCH_TERM]...",results_label:"Risultati della ricerca",keyboard_navigate:"naviga",keyboard_select:"seleziona",keyboard_clear:"cancella",keyboard_close:"chiudi",keyboard_search:"cerca",error_search:"Ricerca fallita",filter_selected_one:"[COUNT] selezionato",filter_selected_many:"[COUNT] selezionati",input_hint:"I risultati appariranno durante la digitazione",loading:"Caricamento"},ni={thanks_to:ti,comments:si,direction:ri,strings:ii};var ht={};h(ht,{comments:()=>li,default:()=>ui,direction:()=>oi,strings:()=>ci,thanks_to:()=>ai});var ai="Tate",li="",oi="ltr",ci={placeholder:"\u691C\u7D22",clear_search:"\u30AF\u30EA\u30A2",load_more:"\u6B21\u3092\u8AAD\u307F\u8FBC\u3080",search_label:"\u3053\u306E\u30B5\u30A4\u30C8\u3092\u691C\u7D22",filters_label:"\u30D5\u30A3\u30EB\u30BF",zero_results:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",many_results:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",one_result:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",total_zero_results:"\u7D50\u679C\u306A\u3057",total_one_result:"[COUNT]\u4EF6\u306E\u7D50\u679C",total_many_results:"[COUNT]\u4EF6\u306E\u7D50\u679C",alt_search:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002[DIFFERENT_TERM]\u306E\u691C\u7D22\u7D50\u679C\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059",search_suggestion:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B21\u306E\u3044\u305A\u308C\u304B\u306E\u691C\u7D22\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",searching:"[SEARCH_TERM]\u3092\u691C\u7D22\u3057\u3066\u3044\u307E\u3059",results_label:"\u691C\u7D22\u7D50\u679C",keyboard_navigate:"\u79FB\u52D5",keyboard_select:"\u9078\u629E",keyboard_clear:"\u30AF\u30EA\u30A2",keyboard_close:"\u9589\u3058\u308B",keyboard_search:"\u691C\u7D22",error_search:"\u691C\u7D22\u306B\u5931\u6557\u3057\u307E\u3057\u305F",filter_selected_one:"[COUNT]\u4EF6\u9078\u629E\u4E2D",filter_selected_many:"[COUNT]\u4EF6\u9078\u629E\u4E2D",input_hint:"\u5165\u529B\u4E2D\u306B\u691C\u7D22\u7D50\u679C\u304C\u8868\u793A\u3055\u308C\u307E\u3059",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D"},ui={thanks_to:ai,comments:li,direction:oi,strings:ci};var pt={};h(pt,{comments:()=>hi,default:()=>_i,direction:()=>pi,strings:()=>mi,thanks_to:()=>di});var di="Seokho Son ",hi="",pi="ltr",mi={placeholder:"\uAC80\uC0C9\uC5B4",clear_search:"\uBE44\uC6B0\uAE30",load_more:"\uAC80\uC0C9 \uACB0\uACFC \uB354 \uBCF4\uAE30",search_label:"\uC0AC\uC774\uD2B8 \uAC80\uC0C9",filters_label:"\uD544\uD130",zero_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C",many_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",one_result:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",total_zero_results:"\uACB0\uACFC \uC5C6\uC74C",total_one_result:"\uACB0\uACFC [COUNT]\uAC74",total_many_results:"\uACB0\uACFC [COUNT]\uAC74",alt_search:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. [DIFFERENT_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC",search_suggestion:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. \uCD94\uCC9C \uAC80\uC0C9\uC5B4: ",searching:"[SEARCH_TERM] \uAC80\uC0C9 \uC911...",results_label:"\uAC80\uC0C9 \uACB0\uACFC",keyboard_navigate:"\uC774\uB3D9",keyboard_select:"\uC120\uD0DD",keyboard_clear:"\uBE44\uC6B0\uAE30",keyboard_close:"\uB2EB\uAE30",keyboard_search:"\uAC80\uC0C9",error_search:"\uAC80\uC0C9 \uC2E4\uD328",filter_selected_one:"[COUNT]\uAC1C \uC120\uD0DD\uB428",filter_selected_many:"[COUNT]\uAC1C \uC120\uD0DD\uB428",input_hint:"\uC785\uB825\uD558\uB294 \uB3D9\uC548 \uACB0\uACFC\uAC00 \uD45C\uC2DC\uB429\uB2C8\uB2E4",loading:"\uB85C\uB529 \uC911"},_i={thanks_to:di,comments:hi,direction:pi,strings:mi};var mt={};h(mt,{comments:()=>gi,default:()=>Ti,direction:()=>Ei,strings:()=>bi,thanks_to:()=>fi});var fi="",gi="",Ei="ltr",bi={placeholder:"Rapu",clear_search:"Whakakore",load_more:"Whakauta \u0113tahi otinga k\u0113",search_label:"Rapu",filters_label:"T\u0101tari",zero_results:"Otinga kore ki [SEARCH_TERM]",many_results:"[COUNT] otinga ki [SEARCH_TERM]",one_result:"[COUNT] otinga ki [SEARCH_TERM]",total_zero_results:"K\u0101ore he otinga",total_one_result:"[COUNT] otinga",total_many_results:"[COUNT] ng\u0101 otinga",alt_search:"Otinga kore ki [SEARCH_TERM]. Otinga k\u0113 ki [DIFFERENT_TERM]",search_suggestion:"Otinga kore ki [SEARCH_TERM]. whakam\u0101tau ki ng\u0101 mea atu:",searching:"Rapu ki [SEARCH_TERM]...",results_label:"Ng\u0101 otinga rapu",keyboard_navigate:"whakatere",keyboard_select:"t\u012Bpako",keyboard_clear:"whakakore",keyboard_close:"kati",keyboard_search:"rapu",error_search:"K\u0101ore i eke te rapu",filter_selected_one:"[COUNT] kua t\u012Bpakohia",filter_selected_many:"[COUNT] kua t\u012Bpakohia",input_hint:"Ka puta ng\u0101 otinga i a koe e patopato ana",loading:"E uta ana"},Ti={thanks_to:fi,comments:gi,direction:Ei,strings:bi};var _t={};h(_t,{comments:()=>yi,default:()=>ki,direction:()=>vi,strings:()=>Ri,thanks_to:()=>Ci});var Ci="Harry Min Khant ",yi="",vi="ltr",Ri={placeholder:"\u101B\u103E\u102C\u101B\u1014\u103A",clear_search:"\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F\u1000\u102D\u102F \u101B\u103E\u1004\u103A\u1038\u101C\u1004\u103A\u1038\u1015\u102B\u104B",load_more:"\u1014\u1031\u102C\u1000\u103A\u1011\u1015\u103A\u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038\u1000\u102D\u102F \u1010\u1004\u103A\u1015\u102B\u104B",search_label:"\u1024\u1006\u102D\u102F\u1000\u103A\u1010\u103D\u1004\u103A\u101B\u103E\u102C\u1016\u103D\u1031\u1015\u102B\u104B",filters_label:"\u1005\u1005\u103A\u1011\u102F\u1010\u103A\u1019\u103E\u102F\u1019\u103B\u102C\u1038",zero_results:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038 \u1019\u101B\u103E\u102D\u1015\u102B",many_results:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A [COUNT] \u1001\u102F",one_result:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A [COUNT]",total_zero_results:"\u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038 \u1019\u101B\u103E\u102D\u1015\u102B",total_one_result:"\u101B\u101C\u1012\u103A [COUNT] \u1001\u102F",total_many_results:"\u101B\u101C\u1012\u103A [COUNT] \u1001\u102F",alt_search:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u101B\u103E\u102D\u1015\u102B\u104B \u104E\u1004\u103A\u1038\u1021\u1005\u102C\u1038 [DIFFERENT_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038\u1000\u102D\u102F \u1015\u103C\u101E\u101E\u100A\u103A\u104B",search_suggestion:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u101B\u103E\u102D\u1015\u102B\u104B \u1021\u1031\u102C\u1000\u103A\u1015\u102B\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F\u1019\u103B\u102C\u1038\u1011\u1032\u1019\u103E \u1010\u1005\u103A\u1001\u102F\u1000\u102D\u102F \u1005\u1019\u103A\u1038\u1000\u103C\u100A\u1037\u103A\u1015\u102B:",searching:"[SEARCH_TERM] \u1000\u102D\u102F \u101B\u103E\u102C\u1016\u103D\u1031\u1014\u1031\u101E\u100A\u103A...",results_label:"\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038",keyboard_navigate:"\u101C\u1019\u103A\u1038\u100A\u103D\u103E\u1014\u103A",keyboard_select:"\u101B\u103D\u1031\u1038\u1001\u103B\u101A\u103A",keyboard_clear:"\u101B\u103E\u1004\u103A\u1038\u101C\u1004\u103A\u1038",keyboard_close:"\u1015\u102D\u1010\u103A",keyboard_search:"\u101B\u103E\u102C\u101B\u1014\u103A",error_search:"\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F \u1019\u1021\u1031\u102C\u1004\u103A\u1019\u103C\u1004\u103A\u1015\u102B",filter_selected_one:"[COUNT] \u1001\u102F \u101B\u103D\u1031\u1038\u1001\u103B\u101A\u103A\u1011\u102C\u1038\u101E\u100A\u103A",filter_selected_many:"[COUNT] \u1001\u102F \u101B\u103D\u1031\u1038\u1001\u103B\u101A\u103A\u1011\u102C\u1038\u101E\u100A\u103A",input_hint:"\u101B\u102D\u102F\u1000\u103A\u1014\u1031\u1005\u1009\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038 \u1015\u1031\u102B\u103A\u101C\u102C\u1015\u102B\u1019\u100A\u103A",loading:"\u1010\u1004\u103A\u1014\u1031\u101E\u100A\u103A"},ki={thanks_to:Ci,comments:yi,direction:vi,strings:Ri};var ft={};h(ft,{comments:()=>Si,default:()=>Oi,direction:()=>Ni,strings:()=>Mi,thanks_to:()=>Ai});var Ai="Eirik Mikkelsen",Si="",Ni="ltr",Mi={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultater",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultater",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]",results_label:"S\xF8keresultater",keyboard_navigate:"naviger",keyboard_select:"velg",keyboard_clear:"fjern",keyboard_close:"lukk",keyboard_search:"s\xF8k",error_search:"S\xF8k feilet",filter_selected_one:"[COUNT] valgt",filter_selected_many:"[COUNT] valgte",input_hint:"Resultater vises mens du skriver",loading:"Laster"},Oi={thanks_to:Ai,comments:Si,direction:Ni,strings:Mi};var gt={};h(gt,{comments:()=>Hi,default:()=>Ui,direction:()=>wi,strings:()=>Ii,thanks_to:()=>xi});var xi="Paul van Brouwershaven",Hi="",wi="ltr",Ii={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",total_zero_results:"Geen resultaten",total_one_result:"[COUNT] resultaat",total_many_results:"[COUNT] resultaten",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]...",results_label:"Zoekresultaten",keyboard_navigate:"navigeren",keyboard_select:"selecteren",keyboard_clear:"wissen",keyboard_close:"sluiten",keyboard_search:"zoeken",error_search:"Zoeken mislukt",filter_selected_one:"[COUNT] geselecteerd",filter_selected_many:"[COUNT] geselecteerd",input_hint:"Resultaten verschijnen terwijl u typt",loading:"Laden"},Ui={thanks_to:xi,comments:Hi,direction:wi,strings:Ii};var Et={};h(Et,{comments:()=>Fi,default:()=>Di,direction:()=>Pi,strings:()=>zi,thanks_to:()=>Li});var Li="Eirik Mikkelsen",Fi="",Pi="ltr",zi={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last fleire resultat",search_label:"S\xF8k p\xE5 denne sida",filters_label:"Filter",zero_results:"Ingen resultat for [SEARCH_TERM]",many_results:"[COUNT] resultat for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultat",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultat",alt_search:"Ingen resultat for [SEARCH_TERM]. Viser resultat for [DIFFERENT_TERM] i staden",search_suggestion:"Ingen resultat for [SEARCH_TERM]. Pr\xF8v eitt av desse s\xF8keorda i staden:",searching:"S\xF8ker etter [SEARCH_TERM]",results_label:"S\xF8keresultat",keyboard_navigate:"naviger",keyboard_select:"vel",keyboard_clear:"fjern",keyboard_close:"lukk",keyboard_search:"s\xF8k",error_search:"S\xF8k feila",filter_selected_one:"[COUNT] vald",filter_selected_many:"[COUNT] valde",input_hint:"Resultat visast medan du skriv",loading:"Lastar"},Di={thanks_to:Li,comments:Fi,direction:Pi,strings:zi};var bt={};h(bt,{comments:()=>Bi,default:()=>Vi,direction:()=>Ki,strings:()=>$i,thanks_to:()=>ji});var ji="Christopher Wingate",Bi="",Ki="ltr",$i={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultater",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultater",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]",results_label:"S\xF8keresultater",keyboard_navigate:"naviger",keyboard_select:"velg",keyboard_clear:"fjern",keyboard_close:"lukk",keyboard_search:"s\xF8k",error_search:"S\xF8k feilet",filter_selected_one:"[COUNT] valgt",filter_selected_many:"[COUNT] valgte",input_hint:"Resultater vises mens du skriver",loading:"Laster"},Vi={thanks_to:ji,comments:Bi,direction:Ki,strings:$i};var Tt={};h(Tt,{comments:()=>Gi,default:()=>Ji,direction:()=>Wi,strings:()=>Yi,thanks_to:()=>qi});var qi="",Gi="",Wi="ltr",Yi={placeholder:"Szukaj",clear_search:"Wyczy\u015B\u0107",load_more:"Za\u0142aduj wi\u0119cej",search_label:"Przeszukaj t\u0119 stron\u0119",filters_label:"Filtry",zero_results:"Brak wynik\xF3w dla [SEARCH_TERM]",many_results:"[COUNT] wynik\xF3w dla [SEARCH_TERM]",one_result:"[COUNT] wynik dla [SEARCH_TERM]",total_zero_results:"Brak wynik\xF3w",total_one_result:"[COUNT] wynik",total_many_results:"[COUNT] wynik\xF3w",alt_search:"Brak wynik\xF3w dla [SEARCH_TERM]. Wy\u015Bwietlam wyniki dla [DIFFERENT_TERM]",search_suggestion:"Brak wynik\xF3w dla [SEARCH_TERM]. Pokrewne wyniki wyszukiwania:",searching:"Szukam [SEARCH_TERM]...",results_label:"Wyniki wyszukiwania",keyboard_navigate:"nawiguj",keyboard_select:"wybierz",keyboard_clear:"wyczy\u015B\u0107",keyboard_close:"zamknij",keyboard_search:"szukaj",error_search:"Wyszukiwanie nie powiod\u0142o si\u0119",filter_selected_one:"[COUNT] wybrany",filter_selected_many:"[COUNT] wybranych",input_hint:"Wyniki pojawi\u0105 si\u0119 podczas pisania",loading:"\u0141adowanie"},Ji={thanks_to:qi,comments:Gi,direction:Wi,strings:Yi};var Ct={};h(Ct,{comments:()=>Xi,default:()=>tn,direction:()=>Qi,strings:()=>en,thanks_to:()=>Zi});var Zi="Jonatah",Xi="",Qi="ltr",en={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",total_zero_results:"Nenhum resultado",total_one_result:"[COUNT] resultado",total_many_results:"[COUNT] resultados",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]...",results_label:"Resultados da pesquisa",keyboard_navigate:"navegar",keyboard_select:"selecionar",keyboard_clear:"limpar",keyboard_close:"fechar",keyboard_search:"pesquisar",error_search:"Falha na pesquisa",filter_selected_one:"[COUNT] selecionado",filter_selected_many:"[COUNT] selecionados",input_hint:"Os resultados aparecer\xE3o enquanto voc\xEA digita",loading:"Carregando"},tn={thanks_to:Zi,comments:Xi,direction:Qi,strings:en};var yt={};h(yt,{comments:()=>rn,default:()=>ln,direction:()=>nn,strings:()=>an,thanks_to:()=>sn});var sn="Bogdan Mateescu ",rn="",nn="ltr",an={placeholder:"C\u0103utare",clear_search:"\u015Eterge\u0163i",load_more:"\xCEnc\u0103rca\u021Bi mai multe rezultate",search_label:"C\u0103uta\u021Bi \xEEn acest site",filters_label:"Filtre",zero_results:"Niciun rezultat pentru [SEARCH_TERM]",many_results:"[COUNT] rezultate pentru [SEARCH_TERM]",one_result:"[COUNT] rezultat pentru [SEARCH_TERM]",total_zero_results:"Niciun rezultat",total_one_result:"[COUNT] rezultat",total_many_results:"[COUNT] rezultate",alt_search:"Niciun rezultat pentru [SEARCH_TERM]. Se afi\u0219eaz\u0103 \xEEn schimb rezultatele pentru [DIFFERENT_TERM]",search_suggestion:"Niciun rezultat pentru [SEARCH_TERM]. \xCEncerca\u021Bi una dintre urm\u0103toarele c\u0103ut\u0103ri:",searching:"Se caut\u0103 dup\u0103: [SEARCH_TERM]...",results_label:"Rezultatele c\u0103ut\u0103rii",keyboard_navigate:"navigare",keyboard_select:"selectare",keyboard_clear:"\u0219tergere",keyboard_close:"\xEEnchidere",keyboard_search:"c\u0103utare",error_search:"C\u0103utarea a e\u0219uat",filter_selected_one:"[COUNT] selectat",filter_selected_many:"[COUNT] selectate",input_hint:"Rezultatele vor ap\u0103rea pe m\u0103sur\u0103 ce tasta\u021Bi",loading:"Se \xEEncarc\u0103"},ln={thanks_to:sn,comments:rn,direction:nn,strings:an};var vt={};h(vt,{comments:()=>cn,default:()=>hn,direction:()=>un,strings:()=>dn,thanks_to:()=>on});var on="Aleksandr Gordeev",cn="",un="ltr",dn={placeholder:"\u041F\u043E\u0438\u0441\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0435\u0449\u0435",search_label:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0438\u043B\u044C\u0442\u0440\u044B",zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",total_zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",total_one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442",total_many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432",alt_search:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",searching:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",results_label:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E\u0438\u0441\u043A\u0430",keyboard_navigate:"\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F",keyboard_select:"\u0432\u044B\u0431\u0440\u0430\u0442\u044C",keyboard_clear:"\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C",keyboard_close:"\u0437\u0430\u043A\u0440\u044B\u0442\u044C",keyboard_search:"\u043F\u043E\u0438\u0441\u043A",error_search:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u043E\u0438\u0441\u043A\u0430",filter_selected_one:"[COUNT] \u0432\u044B\u0431\u0440\u0430\u043D",filter_selected_many:"[COUNT] \u0432\u044B\u0431\u0440\u0430\u043D\u043E",input_hint:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u0431\u0443\u0434\u0443\u0442 \u043F\u043E\u044F\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u043F\u043E \u043C\u0435\u0440\u0435 \u0432\u0432\u043E\u0434\u0430",loading:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430"},hn={thanks_to:on,comments:cn,direction:un,strings:dn};var Rt={};h(Rt,{comments:()=>mn,default:()=>gn,direction:()=>_n,strings:()=>fn,thanks_to:()=>pn});var pn="Andrija Sagicc",mn="",_n="ltr",fn={placeholder:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",clear_search:"\u0411\u0440\u0438\u0441\u0430\u045A\u0435",load_more:"\u041F\u0440\u0438\u043A\u0430\u0437 \u0432\u0438\u0448\u0435 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",search_label:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0441\u0430\u0458\u0442\u0430",filters_label:"\u0424\u0438\u043B\u0442\u0435\u0440\u0438",zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",total_zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",total_one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442",total_many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",alt_search:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u0440\u0438\u043A\u0430\u0437 \u0434\u043E\u0434\u0430\u0442\u043D\u0438\u043A \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [DIFFERENT_TERM]",search_suggestion:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u043E\u043A\u0443\u0448\u0430\u0458\u0442\u0435 \u0441\u0430 \u043D\u0435\u043A\u043E\u043C \u043E\u0434 \u0441\u043B\u0435\u0434\u0435\u045B\u0438\u0445 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430:",searching:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0442\u0435\u0440\u043C\u0438\u043D\u0430 [SEARCH_TERM]...",results_label:"\u0420\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0438 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0435",keyboard_navigate:"\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0458\u0430",keyboard_select:"\u0438\u0437\u0430\u0431\u0435\u0440\u0438",keyboard_clear:"\u043E\u0431\u0440\u0438\u0448\u0438",keyboard_close:"\u0437\u0430\u0442\u0432\u043E\u0440\u0438",keyboard_search:"\u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",error_search:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u043D\u0438\u0458\u0435 \u0443\u0441\u043F\u0435\u043B\u0430",filter_selected_one:"[COUNT] \u0438\u0437\u0430\u0431\u0440\u0430\u043D",filter_selected_many:"[COUNT] \u0438\u0437\u0430\u0431\u0440\u0430\u043D\u0438\u0445",input_hint:"\u0420\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0438 \u045B\u0435 \u0441\u0435 \u043F\u043E\u0458\u0430\u0432\u0459\u0438\u0432\u0430\u0442\u0438 \u0434\u043E\u043A \u043A\u0443\u0446\u0430\u0442\u0435",loading:"\u0423\u0447\u0438\u0442\u0430\u0432\u0430\u045A\u0435"},gn={thanks_to:pn,comments:mn,direction:_n,strings:fn};var kt={};h(kt,{comments:()=>bn,default:()=>yn,direction:()=>Tn,strings:()=>Cn,thanks_to:()=>En});var En="Montazar Al-Jaber ",bn="",Tn="ltr",Cn={placeholder:"S\xF6k",clear_search:"Rensa",load_more:"Visa fler tr\xE4ffar",search_label:"S\xF6k p\xE5 denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga tr\xE4ffar",many_results:"[SEARCH_TERM] gav [COUNT] tr\xE4ffar",one_result:"[SEARCH_TERM] gav [COUNT] tr\xE4ff",total_zero_results:"Inga tr\xE4ffar",total_one_result:"[COUNT] tr\xE4ff",total_many_results:"[COUNT] tr\xE4ffar",alt_search:"[SEARCH_TERM] gav inga tr\xE4ffar. Visar resultat f\xF6r [DIFFERENT_TERM] ist\xE4llet",search_suggestion:"[SEARCH_TERM] gav inga tr\xE4ffar. F\xF6rs\xF6k igen med en av f\xF6ljande s\xF6kord:",searching:"S\xF6ker efter [SEARCH_TERM]...",results_label:"S\xF6kresultat",keyboard_navigate:"navigera",keyboard_select:"v\xE4lj",keyboard_clear:"rensa",keyboard_close:"st\xE4ng",keyboard_search:"s\xF6k",error_search:"S\xF6kningen misslyckades",filter_selected_one:"[COUNT] vald",filter_selected_many:"[COUNT] valda",input_hint:"Resultat visas medan du skriver",loading:"L\xE4ser in"},yn={thanks_to:En,comments:bn,direction:Tn,strings:Cn};var At={};h(At,{comments:()=>Rn,default:()=>Sn,direction:()=>kn,strings:()=>An,thanks_to:()=>vn});var vn="Anonymous",Rn="",kn="ltr",An={placeholder:"Tafuta",clear_search:"Futa",load_more:"Pakia matokeo zaidi",search_label:"Tafuta tovuti hii",filters_label:"Vichujio",zero_results:"Hakuna matokeo ya [SEARCH_TERM]",many_results:"Matokeo [COUNT] ya [SEARCH_TERM]",one_result:"Tokeo [COUNT] la [SEARCH_TERM]",total_zero_results:"Hakuna matokeo",total_one_result:"Tokeo [COUNT]",total_many_results:"Matokeo [COUNT]",alt_search:"Hakuna mayokeo ya [SEARCH_TERM]. Badala yake, inaonyesha matokeo ya [DIFFERENT_TERM]",search_suggestion:"Hakuna matokeo ya [SEARCH_TERM]. Jaribu mojawapo ya utafutaji ufuatao:",searching:"Kutafuta [SEARCH_TERM]...",results_label:"Matokeo ya utafutaji",keyboard_navigate:"sogeza",keyboard_select:"chagua",keyboard_clear:"futa",keyboard_close:"funga",keyboard_search:"tafuta",error_search:"Utafutaji umeshindwa",filter_selected_one:"[COUNT] imechaguliwa",filter_selected_many:"[COUNT] zimechaguliwa",input_hint:"Matokeo yataonekana unapoandika",loading:"Inapakia"},Sn={thanks_to:vn,comments:Rn,direction:kn,strings:An};var St={};h(St,{comments:()=>Mn,default:()=>Hn,direction:()=>On,strings:()=>xn,thanks_to:()=>Nn});var Nn="",Mn="",On="ltr",xn={placeholder:"\u0BA4\u0BC7\u0B9F\u0BC1\u0B95",clear_search:"\u0B85\u0BB4\u0BBF\u0B95\u0BCD\u0B95\u0BC1\u0B95",load_more:"\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BC8\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B95",search_label:"\u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BB3\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BCD \u0BA4\u0BC7\u0B9F\u0BC1\u0B95",filters_label:"\u0BB5\u0B9F\u0BBF\u0B95\u0B9F\u0BCD\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",zero_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",many_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 [COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",one_result:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",total_zero_results:"\u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",total_one_result:"[COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",total_many_results:"[COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",alt_search:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD\u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8, \u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B92\u0BA4\u0BCD\u0BA4 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD [DIFFERENT_TERM]",search_suggestion:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD \u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8.\u0B87\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC0\u0B9F\u0BBE\u0BA9 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC8 \u0BA4\u0BC7\u0B9F\u0BC1\u0B95:",searching:"[SEARCH_TERM] \u0BA4\u0BC7\u0B9F\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BA4\u0BC1",results_label:"\u0BA4\u0BC7\u0B9F\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",keyboard_navigate:"\u0BB5\u0BB4\u0BBF\u0BA8\u0B9F\u0BA4\u0BCD\u0BA4\u0BC1",keyboard_select:"\u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1",keyboard_clear:"\u0B85\u0BB4\u0BBF",keyboard_close:"\u0BAE\u0BC2\u0B9F\u0BC1",keyboard_search:"\u0BA4\u0BC7\u0B9F\u0BC1",error_search:"\u0BA4\u0BC7\u0B9F\u0BB2\u0BCD \u0BA4\u0BCB\u0BB2\u0BCD\u0BB5\u0BBF",filter_selected_one:"[COUNT] \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1",filter_selected_many:"[COUNT] \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA9",input_hint:"\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BA4\u0B9F\u0BCD\u0B9F\u0B9A\u0BCD\u0B9A\u0BC1 \u0B9A\u0BC6\u0BAF\u0BCD\u0BAF\u0BC1\u0BAE\u0BCD\u0BAA\u0BCB\u0BA4\u0BC1 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0BA4\u0BCB\u0BA9\u0BCD\u0BB1\u0BC1\u0BAE\u0BCD",loading:"\u0B8F\u0BB1\u0BCD\u0BB1\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1"},Hn={thanks_to:Nn,comments:Mn,direction:On,strings:xn};var Nt={};h(Nt,{comments:()=>In,default:()=>Fn,direction:()=>Un,strings:()=>Ln,thanks_to:()=>wn});var wn="Patiphon Loetsuthakun ",In="",Un="ltr",Ln={placeholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32",clear_search:"\u0E25\u0E49\u0E32\u0E07",load_more:"\u0E42\u0E2B\u0E25\u0E14\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21",search_label:"\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E1A\u0E19\u0E40\u0E27\u0E47\u0E1A\u0E44\u0E0B\u0E15\u0E4C",filters_label:"\u0E15\u0E31\u0E27\u0E01\u0E23\u0E2D\u0E07",zero_results:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",many_results:"\u0E1E\u0E1A [COUNT] \u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",one_result:"\u0E1E\u0E1A [COUNT] \u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",total_zero_results:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C",total_one_result:"[COUNT] \u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C",total_many_results:"[COUNT] \u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C",alt_search:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM] \u0E41\u0E2A\u0E14\u0E07\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32 [DIFFERENT_TERM] \u0E41\u0E17\u0E19",search_suggestion:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM] \u0E25\u0E2D\u0E07\u0E04\u0E33\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E41\u0E17\u0E19:",searching:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E04\u0E49\u0E19\u0E2B\u0E32 [SEARCH_TERM]...",results_label:"\u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32",keyboard_navigate:"\u0E19\u0E33\u0E17\u0E32\u0E07",keyboard_select:"\u0E40\u0E25\u0E37\u0E2D\u0E01",keyboard_clear:"\u0E25\u0E49\u0E32\u0E07",keyboard_close:"\u0E1B\u0E34\u0E14",keyboard_search:"\u0E04\u0E49\u0E19\u0E2B\u0E32",error_search:"\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27",filter_selected_one:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27 [COUNT] \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23",filter_selected_many:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27 [COUNT] \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23",input_hint:"\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E08\u0E30\u0E1B\u0E23\u0E32\u0E01\u0E0F\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E04\u0E38\u0E13\u0E1E\u0E34\u0E21\u0E1E\u0E4C",loading:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14"},Fn={thanks_to:wn,comments:In,direction:Un,strings:Ln};var Mt={};h(Mt,{comments:()=>zn,default:()=>Bn,direction:()=>Dn,strings:()=>jn,thanks_to:()=>Pn});var Pn="Taylan \xD6zg\xFCr Bildik",zn="",Dn="ltr",jn={placeholder:"Ara\u015Ft\u0131r",clear_search:"Temizle",load_more:"Daha fazla sonu\xE7",search_label:"Site genelinde arama",filters_label:"Filtreler",zero_results:"[SEARCH_TERM] i\xE7in sonu\xE7 yok",many_results:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",one_result:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",total_zero_results:"Sonu\xE7 yok",total_one_result:"[COUNT] sonu\xE7",total_many_results:"[COUNT] sonu\xE7",alt_search:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Bunun yerine [DIFFERENT_TERM] i\xE7in sonu\xE7lar g\xF6steriliyor",search_suggestion:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Alternatif olarak a\u015Fa\u011F\u0131daki kelimelerden birini deneyebilirsiniz:",searching:"[SEARCH_TERM] ara\u015Ft\u0131r\u0131l\u0131yor...",results_label:"Arama sonu\xE7lar\u0131",keyboard_navigate:"gezin",keyboard_select:"se\xE7",keyboard_clear:"temizle",keyboard_close:"kapat",keyboard_search:"ara",error_search:"Arama ba\u015Far\u0131s\u0131z",filter_selected_one:"[COUNT] se\xE7ili",filter_selected_many:"[COUNT] se\xE7ili",input_hint:"Sonu\xE7lar siz yazarken g\xF6r\xFCnecektir",loading:"Y\xFCkleniyor"},Bn={thanks_to:Pn,comments:zn,direction:Dn,strings:jn};var Ot={};h(Ot,{comments:()=>$n,default:()=>Gn,direction:()=>Vn,strings:()=>qn,thanks_to:()=>Kn});var Kn="Vladyslav Lyshenko ",$n="",Vn="ltr",qn={placeholder:"\u041F\u043E\u0448\u0443\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0449\u0435",search_label:"\u041F\u043E\u0448\u0443\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0456\u043B\u044C\u0442\u0440\u0438",zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",total_zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",total_one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442",total_many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432",alt_search:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0456\u0437 \u0442\u0430\u043A\u0438\u0445 \u0432\u0430\u0440\u0456\u0430\u043D\u0442\u0456\u0432",searching:"\u041F\u043E\u0448\u0443\u043A \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",results_label:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043F\u043E\u0448\u0443\u043A\u0443",keyboard_navigate:"\u043D\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u044F",keyboard_select:"\u0432\u0438\u0431\u0440\u0430\u0442\u0438",keyboard_clear:"\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u0438",keyboard_close:"\u0437\u0430\u043A\u0440\u0438\u0442\u0438",keyboard_search:"\u043F\u043E\u0448\u0443\u043A",error_search:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u043E\u0448\u0443\u043A\u0443",filter_selected_one:"[COUNT] \u0432\u0438\u0431\u0440\u0430\u043D\u043E",filter_selected_many:"[COUNT] \u0432\u0438\u0431\u0440\u0430\u043D\u043E",input_hint:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u0437'\u044F\u0432\u043B\u044F\u0442\u0438\u043C\u0443\u0442\u044C\u0441\u044F \u043F\u0456\u0434 \u0447\u0430\u0441 \u0432\u0432\u0435\u0434\u0435\u043D\u043D\u044F",loading:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F"},Gn={thanks_to:Kn,comments:$n,direction:Vn,strings:qn};var xt={};h(xt,{comments:()=>Yn,default:()=>Xn,direction:()=>Jn,strings:()=>Zn,thanks_to:()=>Wn});var Wn="Long Nhat Nguyen",Yn="",Jn="ltr",Zn={placeholder:"T\xECm ki\u1EBFm",clear_search:"X\xF3a",load_more:"Nhi\u1EC1u k\u1EBFt qu\u1EA3 h\u01A1n",search_label:"T\xECm ki\u1EBFm trong trang n\xE0y",filters_label:"B\u1ED9 l\u1ECDc",zero_results:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",many_results:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",one_result:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",total_zero_results:"Kh\xF4ng c\xF3 k\u1EBFt qu\u1EA3",total_one_result:"[COUNT] k\u1EBFt qu\u1EA3",total_many_results:"[COUNT] k\u1EBFt qu\u1EA3",alt_search:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Ki\u1EC3m th\u1ECB k\u1EBFt qu\u1EA3 thay th\u1EBF v\u1EDBi [DIFFERENT_TERM]",search_suggestion:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Th\u1EED m\u1ED9t trong c\xE1c t\xECm ki\u1EBFm:",searching:"\u0110ang t\xECm ki\u1EBFm cho [SEARCH_TERM]...",results_label:"K\u1EBFt qu\u1EA3 t\xECm ki\u1EBFm",keyboard_navigate:"chuy\u1EC3n",keyboard_select:"ch\u1ECDn",keyboard_clear:"x\xF3a",keyboard_close:"\u0111\xF3ng",keyboard_search:"t\xECm ki\u1EBFm",error_search:"T\xECm ki\u1EBFm th\u1EA5t b\u1EA1i",filter_selected_one:"\u0110\xE3 ch\u1ECDn [COUNT]",filter_selected_many:"\u0110\xE3 ch\u1ECDn [COUNT]",input_hint:"K\u1EBFt qu\u1EA3 s\u1EBD xu\u1EA5t hi\u1EC7n khi b\u1EA1n nh\u1EADp",loading:"\u0110ang t\u1EA3i"},Xn={thanks_to:Wn,comments:Yn,direction:Jn,strings:Zn};var Ht={};h(Ht,{comments:()=>ea,default:()=>ra,direction:()=>ta,strings:()=>sa,thanks_to:()=>Qn});var Qn="Amber Song",ea="",ta="ltr",sa={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",total_zero_results:"\u65E0\u7ED3\u679C",total_one_result:"[COUNT] \u4E2A\u7ED3\u679C",total_many_results:"[COUNT] \u4E2A\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]...",results_label:"\u641C\u7D22\u7ED3\u679C",keyboard_navigate:"\u5BFC\u822A",keyboard_select:"\u9009\u62E9",keyboard_clear:"\u6E05\u9664",keyboard_close:"\u5173\u95ED",keyboard_search:"\u641C\u7D22",error_search:"\u641C\u7D22\u5931\u8D25",filter_selected_one:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",filter_selected_many:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",input_hint:"\u8F93\u5165\u65F6\u5C06\u663E\u793A\u7ED3\u679C",loading:"\u52A0\u8F7D\u4E2D"},ra={thanks_to:Qn,comments:ea,direction:ta,strings:sa};var wt={};h(wt,{comments:()=>na,default:()=>oa,direction:()=>aa,strings:()=>la,thanks_to:()=>ia});var ia="Amber Song",na="",aa="ltr",la={placeholder:"\u641C\u5C0B",clear_search:"\u6E05\u9664",load_more:"\u8F09\u5165\u66F4\u591A\u7D50\u679C",search_label:"\u7AD9\u5167\u641C\u5C0B",filters_label:"\u7BE9\u9078",zero_results:"\u627E\u4E0D\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",many_results:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",one_result:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",total_zero_results:"\u7121\u7D50\u679C",total_one_result:"[COUNT] \u500B\u7D50\u679C",total_many_results:"[COUNT] \u500B\u7D50\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u6539\u70BA\u986F\u793A [DIFFERENT_TERM] \u7684\u76F8\u95DC\u7D50\u679C",search_suggestion:"\u627E\u4E0D\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u4EE5\u4E0B\u7684\u5EFA\u8B70\u4E4B\u4E00\u3002",searching:"\u6B63\u5728\u641C\u5C0B[SEARCH_TERM]...",results_label:"\u641C\u5C0B\u7D50\u679C",keyboard_navigate:"\u5C0E\u89BD",keyboard_select:"\u9078\u64C7",keyboard_clear:"\u6E05\u9664",keyboard_close:"\u95DC\u9589",keyboard_search:"\u641C\u5C0B",error_search:"\u641C\u5C0B\u5931\u6557",filter_selected_one:"\u5DF2\u9078\u64C7 [COUNT] \u500B",filter_selected_many:"\u5DF2\u9078\u64C7 [COUNT] \u500B",input_hint:"\u8F38\u5165\u6642\u5C07\u986F\u793A\u7D50\u679C",loading:"\u8F09\u5165\u4E2D"},oa={thanks_to:ia,comments:na,direction:aa,strings:la};var It={};h(It,{comments:()=>ua,default:()=>pa,direction:()=>da,strings:()=>ha,thanks_to:()=>ca});var ca="Amber Song",ua="",da="ltr",ha={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",total_zero_results:"\u65E0\u7ED3\u679C",total_one_result:"[COUNT] \u4E2A\u7ED3\u679C",total_many_results:"[COUNT] \u4E2A\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]...",results_label:"\u641C\u7D22\u7ED3\u679C",keyboard_navigate:"\u5BFC\u822A",keyboard_select:"\u9009\u62E9",keyboard_clear:"\u6E05\u9664",keyboard_close:"\u5173\u95ED",keyboard_search:"\u641C\u7D22",error_search:"\u641C\u7D22\u5931\u8D25",filter_selected_one:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",filter_selected_many:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",input_hint:"\u8F93\u5165\u65F6\u5C06\u663E\u793A\u7ED3\u679C",loading:"\u52A0\u8F7D\u4E2D"},pa={thanks_to:ca,comments:ua,direction:da,strings:ha};var ma=[Ve,qe,Ge,We,Ye,Je,Ze,Xe,Qe,et,tt,st,rt,it,nt,at,lt,ot,ct,ut,dt,ht,pt,mt,_t,ft,gt,Et,bt,Tt,Ct,yt,vt,Rt,kt,At,St,Nt,Mt,Ot,xt,Ht,wt,It],Vt=ma,qt=["../../translations/af.json","../../translations/ar.json","../../translations/bn.json","../../translations/ca.json","../../translations/cs.json","../../translations/da.json","../../translations/de.json","../../translations/el.json","../../translations/en.json","../../translations/es.json","../../translations/eu.json","../../translations/fa.json","../../translations/fi.json","../../translations/fr.json","../../translations/gl.json","../../translations/he.json","../../translations/hi.json","../../translations/hr.json","../../translations/hu.json","../../translations/id.json","../../translations/it.json","../../translations/ja.json","../../translations/ko.json","../../translations/mi.json","../../translations/my.json","../../translations/nb.json","../../translations/nl.json","../../translations/nn.json","../../translations/no.json","../../translations/pl.json","../../translations/pt.json","../../translations/ro.json","../../translations/ru.json","../../translations/sr.json","../../translations/sv.json","../../translations/sw.json","../../translations/ta.json","../../translations/th.json","../../translations/tr.json","../../translations/uk.json","../../translations/vi.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function b(n){let s=typeof n=="string"?n.charCodeAt(0):n;return s>=97&&s<=122||s>=65&&s<=90}function A(n){let s=typeof n=="string"?n.charCodeAt(0):n;return s>=48&&s<=57}function k(n){return b(n)||A(n)}var Gt=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"];var Ut={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"};var fa={}.hasOwnProperty;function ze(n,s={}){let e=Wt(),t=String(n),r=t.toLowerCase(),i=0;if(n==null)throw new Error("Expected string, got `"+n+"`");if(fa.call(Ut,r)){let l=Ut[r];return(s.normalize===void 0||s.normalize===null||s.normalize)&&typeof l=="string"?ze(l):(e[Gt.includes(r)?"regular":"irregular"]=t,e)}for(;b(r.charCodeAt(i))&&i<9;)i++;if(i>1&&i<9){if(e.language=t.slice(0,i),i<4){let l=0;for(;r.charCodeAt(i)===45&&b(r.charCodeAt(i+1))&&b(r.charCodeAt(i+2))&&b(r.charCodeAt(i+3))&&!b(r.charCodeAt(i+4));){if(l>2)return a(i,3,"Too many extended language subtags, expected at most 3 subtags");e.extendedLanguageSubtags.push(t.slice(i+1,i+4)),i+=4,l++}}for(r.charCodeAt(i)===45&&b(r.charCodeAt(i+1))&&b(r.charCodeAt(i+2))&&b(r.charCodeAt(i+3))&&b(r.charCodeAt(i+4))&&!b(r.charCodeAt(i+5))&&(e.script=t.slice(i+1,i+5),i+=5),r.charCodeAt(i)===45&&(b(r.charCodeAt(i+1))&&b(r.charCodeAt(i+2))&&!b(r.charCodeAt(i+3))?(e.region=t.slice(i+1,i+3),i+=3):A(r.charCodeAt(i+1))&&A(r.charCodeAt(i+2))&&A(r.charCodeAt(i+3))&&!A(r.charCodeAt(i+4))&&(e.region=t.slice(i+1,i+4),i+=4));r.charCodeAt(i)===45;){let l=i+1,o=l;for(;k(r.charCodeAt(o));){if(o-l>7)return a(o,1,"Too long variant, expected at most 8 characters");o++}if(o-l>4||o-l>3&&A(r.charCodeAt(l)))e.variants.push(t.slice(l,o)),i=o;else break}for(;r.charCodeAt(i)===45&&!(r.charCodeAt(i+1)===120||!k(r.charCodeAt(i+1))||r.charCodeAt(i+2)!==45||!k(r.charCodeAt(i+3)));){let l=i+2,o=0;for(;r.charCodeAt(l)===45&&k(r.charCodeAt(l+1))&&k(r.charCodeAt(l+2));){let c=l+1;for(l=c+2,o++;k(r.charCodeAt(l));){if(l-c>7)return a(l,2,"Too long extension, expected at most 8 characters");l++}}if(!o)return a(l,4,"Empty extension, extensions must have at least 2 characters of content");e.extensions.push({singleton:t.charAt(i+1),extensions:t.slice(i+3,l).split("-")}),i=l}}else i=0;if(i===0&&r.charCodeAt(i)===120||r.charCodeAt(i)===45&&r.charCodeAt(i+1)===120){i=i?i+2:1;let l=i;for(;r.charCodeAt(l)===45&&k(r.charCodeAt(l+1));){let o=i+1;for(l=o;k(r.charCodeAt(l));){if(l-o>7)return a(l,5,"Too long private-use area, expected at most 8 characters");l++}e.privateuse.push(t.slice(i+1,l)),i=l}}if(i!==t.length)return a(i,6,"Found superfluous content after tag");return e;function a(l,o,c){return s.warning&&s.warning(c,o,l),s.forgiving?e:Wt()}}function Wt(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}var be={},Yt=qt,Jt=Vt;for(let n=0;n"u")return;let s=document.createElement("div");s.id=this.containerId,s.setAttribute("data-pagefind-announcer","");let e=t=>{let r=[];for(let i=0;i<2;i++){let a=document.createElement("div");a.id=this.idGenerator(`pf-${t}-region`),a.setAttribute("role","status"),a.setAttribute("aria-live",t),a.setAttribute("aria-atomic","true"),a.setAttribute("data-pf-sr-hidden",""),s.appendChild(a),r.push(a)}return r};this.regions={polite:e("polite"),assertive:e("assertive")},document.body.appendChild(s)}announce(s,e="polite"){if(!this.regions||!s)return;this.clearTimeoutId&&(clearTimeout(this.clearTimeoutId),this.clearTimeoutId=null);let t=e==="polite"?this.politeIndex:this.assertiveIndex,r=this.regions[e][t];e==="polite"?this.politeIndex=t===0?1:0:this.assertiveIndex=t===0?1:0;let i=e==="polite"?this.politeIndex:this.assertiveIndex;this.regions[e][i].textContent="",setTimeout(()=>{r.textContent=s,this.clearTimeoutId=setTimeout(()=>{r.textContent="",this.clearTimeoutId=null},350)},100)}clear(){if(this.regions){this.clearTimeoutId&&(clearTimeout(this.clearTimeoutId),this.clearTimeoutId=null);for(let s of["polite","assertive"])for(let e of this.regions[s])e.textContent=""}}destroy(){if(this.clear(),typeof document<"u"){let s=document.getElementById(this.containerId);s&&s.remove()}this.regions=null}};var Lt;try{if(document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"){let n=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind[-_])?component[-_]?ui.js.*$/);n&&(Lt=n[1])}}catch{Lt="/pagefind/"}var Te=class{constructor(s,e={}){this.__pagefind__=null;this.__loadPromise__=null;this.__searchID__=0;this._translations=null;this._userTranslations={};this._direction="ltr";this._languageSet=!1;this.components=[];this.componentsByType={};this.searchTerm="";this.searchFilters={};this.searchResult={results:[]};this.availableFilters=null;this.totalFilters=null;this.activeShortcuts=[];this.faceted=!1;this.generatedIds=new Set;this.name=s,this.__hooks__={search:[],filters:[],loading:[],results:[],error:[],translations:[]},this.options={bundlePath:e.bundlePath??Lt??"/pagefind/",mergeIndex:e.mergeIndex??[]};let t={...e};delete t.bundlePath,delete t.mergeIndex,this.pagefindOptions=t,this._announcer=new De(this.generateId.bind(this))}generateId(s,e=2){let t="abcdef",r=(o=3)=>{let c="";for(let u=0;ur()).join("-"),l=`${s}-${i}${a}`;return this.generatedIds.has(l)||document.getElementById(l)?this.generateId(s,e+1):(this.generatedIds.add(l),l)}add(s){s?.register?.(this),this.components.push(s)}registerInput(s,e={}){this._registerComponent(s,"input",null,e)}registerResults(s,e={}){this._registerComponent(s,"results",null,e)}registerSummary(s,e={}){this._registerComponent(s,"summary",null,e)}registerFilter(s,e={}){this._registerComponent(s,"filter",null,e)}registerSort(s,e={}){this._registerComponent(s,"sort",null,e)}registerUtility(s,e=null,t={}){this._registerComponent(s,"utility",e,t)}_registerComponent(s,e,t=null,r={}){if(this.componentsByType[e]||(this.componentsByType[e]=[]),this._languageSet||this.setLanguage(),this.components.includes(s)){s.capabilities=r,this.reconcileAria();return}s.componentType=e,s.componentSubtype=t,s.capabilities=r,this.componentsByType[e].push(s),this.components.push(s),this.reconcileAria()}getInputs(s=null){let e=this.componentsByType.input||[];return s?e.filter(t=>t.capabilities?.[s]):e}getResults(s=null){let e=this.componentsByType.results||[];return s?e.filter(t=>t.capabilities?.[s]):e}getSummaries(s=null){let e=this.componentsByType.summary||[];return s?e.filter(t=>t.capabilities?.[s]):e}getFilters(s=null){let e=this.componentsByType.filter||[];return s?e.filter(t=>t.capabilities?.[s]):e}getSorts(s=null){let e=this.componentsByType.sort||[];return s?e.filter(t=>t.capabilities?.[s]):e}getUtilities(s=null,e=null){let t=this.componentsByType.utility||[];return s!==null&&(t=t.filter(r=>r.componentSubtype===s)),e&&(t=t.filter(r=>r.capabilities?.[e])),t}hasAnnouncementCapability(){return this.components.some(s=>s.capabilities?.announcements===!0)}registerShortcut(s,e){let t={...s,owner:e};this.activeShortcuts.push(t),this.notifyShortcutsChanged()}deregisterShortcut(s,e){this.activeShortcuts=this.activeShortcuts.filter(t=>!(t.label===s&&t.owner===e)),this.notifyShortcutsChanged()}deregisterAllShortcuts(s){this.activeShortcuts=this.activeShortcuts.filter(e=>e.owner!==s),this.notifyShortcutsChanged()}getActiveShortcuts(){return this.activeShortcuts}notifyShortcutsChanged(){this.getUtilities("keyboard-hints").forEach(e=>e.render?.())}focusNextResults(s){let e=this.getResults("keyboardNavigation"),t=$t(s,e);if(!t)return!1;let r=t.querySelector("a");return r?(r.focus(),!0):!1}focusPreviousInput(s){let e=this.getInputs("keyboardNavigation"),t=Pe(s,e);if(!t)return!1;if(t.focus)return t.focus(),!0;let r=t.querySelector("input");return r?(r.focus(),!0):!1}focusInputAndType(s,e){let t=this.getInputs("keyboardNavigation"),r=Pe(s,t),i=r?.inputEl||r?.querySelector("input");i&&(i.value+=e,i.focus(),i.dispatchEvent(new Event("input",{bubbles:!0})))}focusInputAndDelete(s){let e=this.getInputs("keyboardNavigation"),t=Pe(s,e),r=t?.inputEl||t?.querySelector("input");r&&(r.value=r.value.slice(0,-1),r.focus(),r.dispatchEvent(new Event("input",{bubbles:!0})))}reconcileAria(){this.components.forEach(s=>s.reconcileAria?.())}get direction(){return this._direction}setLanguage(s){s||(s=document?.documentElement?.lang||"en"),this._translations=Zt(s),this._direction=this._translations.direction||"ltr",this._languageSet=!0,this.__dispatch__("translations",this._translations,this._direction)}setTranslations(s){this._userTranslations={...this._userTranslations,...s},this.__dispatch__("translations",this._translations,this._direction)}translate(s,e={}){let t=this._userTranslations[s]??this._translations?.[s];return Xt(typeof t=="string"?t:void 0,e,this._translations?.language)}announce(s,e={},t="polite"){let r=this.translate(s,e);r&&this._announcer.announce(r,t)}announceRaw(s,e="polite"){this._announcer.announce(s,e)}clearAnnouncements(){this._announcer.clear()}on(s,e,t=null){if(!this.__hooks__[s]){let r=Object.keys(this.__hooks__).join(", ");console.error(`[Pagefind Component UI]: Unknown event type ${s}. Supported events: [${r}]`);return}if(typeof e!="function"){console.error(`[Pagefind Component UI]: Expected callback to be a function, received ${typeof e}`);return}if(t){let r=this.__hooks__[s].findIndex(i=>typeof i=="object"&&i.owner===t);if(r!==-1){this.__hooks__[s][r]={callback:e,owner:t};return}this.__hooks__[s].push({callback:e,owner:t})}else this.__hooks__[s].push(e)}triggerLoad(){return this.__load__()}triggerSearch(s){this.searchTerm=s,this.__dispatch__("search",s,this.searchFilters),this.__search__(s,this.searchFilters)}triggerSearchWithFilters(s,e){this.searchTerm=s,this.searchFilters=e,this.__dispatch__("search",s,e),this.__search__(s,e)}triggerFilters(s){this.searchFilters=s,this.__dispatch__("search",this.searchTerm,s),this.__search__(this.searchTerm,s)}triggerFilter(s,e){this.searchFilters=this.searchFilters||{},this.searchFilters[s]=e,this.__dispatch__("search",this.searchTerm,this.searchFilters),this.__search__(this.searchTerm,this.searchFilters)}__dispatch__(s,...e){this.__hooks__[s]?.forEach(t=>{typeof t=="function"?t(...e):t?.callback&&t.callback(...e)})}async __clear__(){this.__dispatch__("results",{results:[],unfilteredTotalCount:0}),this.__pagefind__&&(this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters}))}async __search__(s,e){this.__dispatch__("loading"),await this.__load__();let t=++this.__searchID__;if((!s||!s.length)&&!this.faceted)return this.__clear__();if(!this.__pagefind__)return;let r=s&&s.length?s:null,i=await this.__pagefind__.search(r,{filters:e});if(i&&this.__searchID__===t&&(i.filters&&Object.keys(i.filters)?.length&&(this.availableFilters=i.filters,this.totalFilters=i.totalFilters??null,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})),this.searchResult=i,this.__dispatch__("results",this.searchResult),!this.hasAnnouncementCapability()&&s)){let a=i.results?.length??0,l=a===0?"zero_results":a===1?"one_result":"many_results",o=a===0?"assertive":"polite";this.announce(l,{SEARCH_TERM:s,COUNT:a},o)}}async __load__(){if(!this.__pagefind__){if(this.__loadPromise__)return this.__loadPromise__;this.__loadPromise__=this.__doLoad__();try{await this.__loadPromise__}finally{this.__loadPromise__=null}}}async __doLoad__(){if(this.__pagefind__)return;let s;try{s=await import(`${this.options.bundlePath}pagefind.js`)}catch(t){console.error(t),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to the Pagefind Component UI"].join(` +`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location"),this.__dispatch__("error",{type:"bundle_load_failed",message:"Could not load search bundle",bundlePath:this.options.bundlePath,error:t}),this.hasAnnouncementCapability()||this.announce("error_search",{},"assertive");return}let e=s.createInstance(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let{bundlePath:r,...i}=t;await e.mergeIndex(r,i)}this.__pagefind__=e,this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters}),this.faceted&&this.__searchID__===0&&this.triggerSearch("")}thinSubResults(s,e=3){if(s.length<=e)return s;let t=[...s].sort((r,i)=>(i.locations?.length??0)-(r.locations?.length??0)).slice(0,e).map(r=>r.url);return s.filter(r=>t.includes(r.url))}getDisplaySubResults(s,e=3){if(!Array.isArray(s.sub_results))return[];let r=s.sub_results[0]?.url===(s.meta?.url||s.url)?s.sub_results.slice(1):s.sub_results;return this.thinSubResults(r,e)}};var Pt=class{constructor(){this.instances=new Map;this.defaultOptions={bundlePath:this.detectBundlePath()}}detectBundlePath(){try{if(document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"){let s=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind[-_])?.*\.js.*$/);if(s)return s[1]}}catch{}return"/pagefind/"}getInstance(s="default",e={}){let t=this.instances.get(s);if(t)return t;let r={...this.defaultOptions,...e},i=new Te(s,r);return this.instances.set(s,i),i}hasInstance(s){return this.instances.has(s)}removeInstance(s){this.instances.delete(s)}getInstanceNames(){return Array.from(this.instances.keys())}},Ft=null;function Ce(){return Ft||(Ft=new Pt),Ft}function Qt(n,s){let e=Ce();return e.hasInstance(n)?(console.warn(`[Pagefind Component UI]: Instance "${n}" already exists, configuration ignored`),e.getInstance(n)):e.getInstance(n,s)}var ye=n=>!(n==null||n===!1||n===0||n===""||Number.isNaN(n)||Array.isArray(n)&&n.length===0||typeof n=="object"&&n!==null&&!Array.isArray(n)&&Object.keys(n).length===0),T=(n,s,e)=>n.lengthT(s,2,"eq")??m(s[0],n)===m(s[1],n),ne:(n,...s)=>T(s,2,"ne")??m(s[0],n)!==m(s[1],n),gt:(n,...s)=>T(s,2,"gt")??Number(m(s[0],n))>Number(m(s[1],n)),lt:(n,...s)=>T(s,2,"lt")??Number(m(s[0],n))T(s,2,"gte")??Number(m(s[0],n))>=Number(m(s[1],n)),lte:(n,...s)=>T(s,2,"lte")??Number(m(s[0],n))<=Number(m(s[1],n)),and:(n,...s)=>{let e=!0;for(let t of s)if(e=m(t,n),!ye(e))return e;return e},or:(n,...s)=>{let e=!1;for(let t of s)if(e=m(t,n),ye(e))return e;return e},not:(n,...s)=>T(s,1,"not")??!ye(m(s[0],n)),lowercase:(n,...s)=>String(m(s[0],n)).toLowerCase(),uppercase:(n,...s)=>String(m(s[0],n)).toUpperCase(),trim:(n,...s)=>String(m(s[0],n)).trim(),truncate:(n,...s)=>{let e=T(s,2,"truncate");if(e)return e;let t=String(m(s[0],n)),r=Number(m(s[1],n)),i=s[2]?String(m(s[2],n)):"...";return t.length>r?t.slice(0,r)+i:t},replace:(n,...s)=>T(s,3,"replace")??String(m(s[0],n)).split(String(m(s[1],n))).join(String(m(s[2],n))),limit:(n,...s)=>{let e=T(s,2,"limit");if(e)return e;let t=m(s[0],n),r=m(s[1],n);return Array.isArray(t)?t.slice(0,r<0?0:r):t},first:(n,...s)=>{let e=T(s,1,"first");if(e)return e;let t=m(s[0],n);return Array.isArray(t)?t[0]:t},last:(n,...s)=>{let e=T(s,1,"last");if(e)return e;let t=m(s[0],n);return Array.isArray(t)?t[t.length-1]:t},length:(n,...s)=>{let e=T(s,1,"length");if(e)return e;let t=m(s[0],n);return Array.isArray(t)?t.length:String(t).length},join:(n,...s)=>T(s,2,"join")??(e=>Array.isArray(e)?e.join(String(m(s[1],n))):String(e))(m(s[0],n)),default:(n,...s)=>{let e=T(s,2,"default");if(e)return e;let t=m(s[0],n);return ye(t)?t:m(s[1],n)},safeUrl:(n,...s)=>{let e=String(m(s[0],n)??"").trim();return e&&/^(?:\.{0,2}\/|[#?]|(?:https?|ftp):\/\/|(?:mailto|tel):)/i.test(e)?e:""}},m=(n,s)=>{if(!n)return;if(n.t==="L")return n.val;if(n.t==="V"){let t=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r=s;for(let i of n.path){if(r==null||!t(r,i))return;r=r[i]}return r}let e=es[n.fn];return e?n.t==="C"?e(s,...n.args):e(s,n.left,...n.args):`[Error: unknown ${n.fn}()]`},ga=n=>n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),ve=(n,s)=>{let e="";for(let t of n){if(t.t==="T"){e+=t.val;continue}if(t.t==="I"){let r=m(t.expr,s);if(Array.isArray(r))e+="[Error: use #each for arrays]";else if(typeof r=="object"&&r!==null)e+="[Error: cannot render object]";else{let i=String(r??"");e+=t.raw?i:ga(i)}continue}if(t.t==="F"){let r=!1;for(let i of t.branches)if(ye(m(i.cond,s))){e+=ve(i.body,s),r=!0;break}!r&&t.else&&(e+=ve(t.else,s));continue}if(t.t==="E"){let r=m(t.arr,s);if(!Array.isArray(r)){e+="[Error: #each needs array]";continue}if(!r.length&&t.else)e+=ve(t.else,s);else for(let i=0;i{let s=n,e=0,t=()=>{for(;es.slice(e,e+u.length)===u,i=u=>{r(u)&&(e+=u.length)},a=()=>{let u="";for(;e{t();let u=e,d,_=s[e];if(_==='"'||_==="'"){let p=s[e++],g="";for(;e{let d=[];e:for(;eve(c,u)};var ts=(n,s)=>{es[n]=(e,...t)=>s(...t.map(r=>m(r,e)))};var f=class extends HTMLElement{constructor(){super();this.instance=null;this._initialized=!1}connectedCallback(){if(this._initialized)return;this._initialized=!0;let e=this.getAttribute("instance")||"default",t=Ce();this.instance=t.getInstance(e),this.init(),this.register&&typeof this.register=="function"&&this.register(this.instance)}disconnectedCallback(){this.cleanup&&typeof this.cleanup=="function"&&this.cleanup(),this._initialized=!1}attributeChangedCallback(e,t,r){if(!this._initialized||t===r)return;let i=this.kebabToCamel(e);r==="false"?this[i]=!1:r==="true"?this[i]=!0:r==null?this[i]=!1:this[i]=r,this.update&&typeof this.update=="function"&&this.update()}kebabToCamel(e){return e.replace(/-([a-z])/g,t=>t[1].toUpperCase())}ensureId(e="pagefind"){return!this.id&&this.instance&&(this.id=this.instance.generateId(e)),this.id}init(){}reconcileAria(){}register(e){}cleanup(){}update(){}showError(e){let t=document.createElement("div");t.className="pf-error",t.innerHTML=` + Pagefind Error: ${this.escapeHtml(e.message||"Unknown error")} + ${e.details?`
    ${this.escapeHtml(e.details)}`:""} + `,this.appendChild(t),this.dispatchEvent(new CustomEvent("pagefind-error",{detail:e,bubbles:!0,composed:!0}))}escapeHtml(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}};var Re=class extends f{init(){this.setAttribute("hidden","")}register(s){s.registerUtility(this);let e=this.getAttribute("bundle-path");e&&(s.options.bundlePath=e);let t=this.getAttribute("base-url");t&&(s.pagefindOptions.baseUrl=t);let r=this.getAttribute("excerpt-length");r&&(s.pagefindOptions.excerptLength=parseInt(r,10));let i=this.getAttribute("lang");i&&s.setLanguage(i);let a=this.getAttribute("meta-cache-tag");a&&(s.pagefindOptions.metaCacheTag=a);let l=this.getAttribute("highlight-param");l&&(s.pagefindOptions.highlightParam=l),this.hasAttribute("exact-diacritics")&&(s.pagefindOptions.exactDiacritics=!0),this.hasAttribute("no-worker")&&(s.pagefindOptions.noWorker=!0),this.hasAttribute("faceted")&&(s.faceted=!0),this.hasAttribute("preload")&&s.triggerLoad()}};customElements.get("pagefind-config")||customElements.define("pagefind-config",Re);var Ea=(n=100)=>new Promise(s=>setTimeout(s,n)),ke=class extends f{constructor(){super();this.inputEl=null;this.clearEl=null;this.searchID=0;this.placeholder="";this.debounce=300;this.autofocus=!1}static get observedAttributes(){return["placeholder","debounce","autofocus"]}readAttributes(){this.hasAttribute("placeholder")&&(this.placeholder=this.getAttribute("placeholder")||""),this.hasAttribute("debounce")&&(this.debounce=parseInt(this.getAttribute("debounce")||"300",10)||300),this.hasAttribute("autofocus")&&(this.autofocus=this.hasAttribute("autofocus"))}init(){this.readAttributes(),this.render()}render(){this.innerHTML="";let e=this.instance.generateId("pfmod-input"),t=this.instance?.translate("search_label")||"Search this site",r=this.instance?.translate("clear_search")||"Clear",i=this.placeholder||this.instance?.translate("placeholder")||"Search";this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir");let a=document.createElement("search");a.className="pf-input-wrapper",a.setAttribute("role","search"),a.setAttribute("aria-label",t);let l=document.createElement("label");l.setAttribute("for",e),l.setAttribute("data-pf-sr-hidden","true"),l.textContent=t,a.appendChild(l),this.inputEl=document.createElement("input"),this.inputEl.id=e,this.inputEl.className="pf-input",this.inputEl.setAttribute("type","search"),this.inputEl.setAttribute("autocomplete","off"),this.inputEl.setAttribute("autocapitalize","none"),this.inputEl.setAttribute("enterkeyhint","search"),this.inputEl.setAttribute("placeholder",i),this.autofocus&&this.inputEl.setAttribute("autofocus","autofocus");let o=this.instance.generateId("pf-input-hint"),c=this.instance?.translate("input_hint")||"Results will appear as you type",u=document.createElement("span");u.id=o,u.setAttribute("data-pf-sr-hidden","true"),u.textContent=c,this.inputEl.setAttribute("aria-describedby",o),a.appendChild(this.inputEl),a.appendChild(u),this.clearEl=document.createElement("button"),this.clearEl.className="pf-input-clear",this.clearEl.setAttribute("type","button"),this.clearEl.setAttribute("data-pf-suppressed","true"),this.clearEl.textContent=r,a.appendChild(this.clearEl),this.appendChild(a),this.setupEventHandlers()}setupEventHandlers(){!this.inputEl||!this.clearEl||(this.inputEl.addEventListener("input",async e=>{let t=e.target;if(this.instance&&typeof t?.value=="string"){this.updateState(t.value);let r=++this.searchID;if(await Ea(this.debounce),r!==this.searchID)return;this.instance?.triggerSearch(t.value)}}),this.inputEl.addEventListener("keydown",e=>{e.key==="Escape"&&(++this.searchID,this.inputEl&&(this.inputEl.value=""),this.instance?.triggerSearch(""),this.updateState("")),e.key==="ArrowDown"&&(e.preventDefault(),this.inputEl&&this.instance?.focusNextResults(this.inputEl))}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad();let e=this.instance?.translate("keyboard_navigate")||"navigate",t=this.instance?.translate("keyboard_clear")||"clear";this.instance?.registerShortcut({label:"\u2193",description:e},this),this.instance?.registerShortcut({label:"esc",description:t},this)}),this.inputEl.addEventListener("blur",()=>{this.instance?.deregisterAllShortcuts(this)}),this.clearEl.addEventListener("click",()=>{this.inputEl&&(this.inputEl.value="",this.instance?.triggerSearch(""),this.updateState(""),this.inputEl.focus())}))}updateState(e){this.clearEl&&(e&&e?.length?this.clearEl.removeAttribute("data-pf-suppressed"):this.clearEl.setAttribute("data-pf-suppressed","true"))}register(e){e.registerInput(this,{keyboardNavigation:!0}),e.on("search",t=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.updateState(t))},this),e.on("error",t=>{let r=t;this.showError({message:r.message||"Search initialization failed",details:r.bundlePath?`Bundle path: ${r.bundlePath}`:void 0})},this),e.on("translations",()=>{let t=this.inputEl?.value||"";this.render(),this.inputEl&&t&&(this.inputEl.value=t,this.updateState(t))},this)}update(){this.render()}focus(){this.inputEl&&this.inputEl.focus()}};customElements.get("pagefind-input")||customElements.define("pagefind-input",ke);var Ae=class extends f{constructor(){super();this.containerEl=null;this.term="";this.defaultMessage=""}static get observedAttributes(){return["default-message"]}init(){this.hasAttribute("default-message")&&(this.defaultMessage=this.getAttribute("default-message")||""),this.render()}render(){this.innerHTML="",this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir"),this.containerEl=document.createElement("div"),this.containerEl.className="pf-summary",this.containerEl.textContent=this.defaultMessage,this.appendChild(this.containerEl)}reconcileAria(){}register(e){e.registerSummary(this),e.on("search",t=>{this.term=t},this),e.on("results",t=>{if(!this.containerEl||!t)return;let i=t?.results?.length??0;if(!this.term){if(e.faceted){let o=i===0?"total_zero_results":i===1?"total_one_result":"total_many_results",c=e.translate(o,{COUNT:i});this.containerEl.textContent=c||`${i} result${i===1?"":"s"}`}else this.containerEl.textContent=this.defaultMessage;return}let a=i===0?"zero_results":i===1?"one_result":"many_results",l=e.translate(a,{SEARCH_TERM:this.term,COUNT:i});this.containerEl.textContent=l||`${i} result${i===1?"":"s"} for ${this.term}`},this),e.on("loading",()=>{if(!this.containerEl)return;let t=e.translate("searching",{SEARCH_TERM:this.term});this.containerEl.textContent=t||`Searching for ${this.term}...`},this),e.on("error",t=>{if(!this.containerEl)return;let r=t,i=e.translate("error_search")||"Search failed";this.containerEl.textContent=`Error: ${r.message||i}`},this),e.on("translations",()=>{this.render()},this)}update(){this.hasAttribute("default-message")&&(this.defaultMessage=this.getAttribute("default-message")||"",!this.term&&this.containerEl&&(this.containerEl.textContent=this.defaultMessage))}};customElements.get("pagefind-summary")||customElements.define("pagefind-summary",Ae);var ss=n=>{if(n instanceof Element)return[n];if(Array.isArray(n)&&n.every(s=>s instanceof Element))return n;if(typeof n=="string"||n instanceof String){let s=document.createElement("div");return s.innerHTML=n,[...s.childNodes]}return console.error(`[Pagefind Results]: Expected template to return HTML element or string, got ${typeof n}`),[]},ba=`
  • +
    + {{#if and(options.show_images, meta.image)}} + {{ meta.image_alt | default(meta.title) }} + {{/if}} +
    +

    + {{ meta.title }} +

    + {{#if excerpt}} +

    {{+ excerpt +}}

    + {{/if}} +
    +
    + {{#if sub_results}} +
      + {{#each sub_results as sub}} +
    • + {{ sub.title }} +

      {{+ sub.excerpt +}}

      +
    • + {{/each}} +
    + {{/if}} +
  • `,Ta=``,Ca=R(ba),ya=R(Ta),rs=(n,s)=>{for(let e of n)if(e instanceof Element){e.setAttribute("data-pf-result-index",String(s));break}},zt=n=>{if(!(n instanceof HTMLElement))return null;let s=window.getComputedStyle(n).overflowY;return s!=="visible"&&s!=="hidden"?n:zt(n.parentNode)},Dt=class{constructor(s){this.result=null;this.loading=!1;this.observer=null;this.rawResult=s.result,this.index=s.index,this.placeholderNodes=s.placeholderNodes,this.resultFn=s.resultFn,this.intersectionEl=s.intersectionEl,this.showImages=s.showImages,this.showSubResults=s.showSubResults,this.maxSubResults=s.maxSubResults,this.linkTarget=s.linkTarget,this.onLoad=s.onLoad,this.setupObserver()}setupObserver(){if(this.result!==null||this.observer!==null||!this.placeholderNodes?.length)return;let s={root:this.intersectionEl,rootMargin:"50px",threshold:.01};this.observer=new IntersectionObserver((e,t)=>{this.result===null&&e?.[0]?.isIntersecting&&(this.load(),t.disconnect(),this.observer=null)},s),this.observer.observe(this.placeholderNodes[0])}async load(){if(this.placeholderNodes?.length&&!(this.result!==null||this.loading)){this.loading=!0;try{this.result=await this.rawResult.data();let s=this.resultFn(this.result,{showImages:this.showImages,showSubResults:this.showSubResults,maxSubResults:this.maxSubResults,linkTarget:this.linkTarget}),e=ss(s);for(rs(e,this.index);this.placeholderNodes.length>1;){let r=this.placeholderNodes.pop();r instanceof Element&&r.remove()}let t=this.placeholderNodes[0];t instanceof Element&&t.replaceWith(...e)}catch{this.loading=!1}this.onLoad?.()}}cleanup(){this.observer&&(this.observer.disconnect(),this.observer=null)}},Se=class extends f{constructor(){super();this.containerEl=null;this.intersectionEl=document.body;this.results=[];this.showImages=!1;this.hideSubResults=!1;this.maxSubResults=3;this.maxResults=0;this.linkTarget=null;this.resultTemplate=null;this.compiledResultTemplate=null;this.compiledPlaceholderTemplate=null;this.selectedIndex=-1;this.selectedAnchor=null;this.loadingAnnouncementTimeout=null}static get observedAttributes(){return["show-images","hide-sub-results","max-sub-results","max-results","link-target"]}init(){this.hasAttribute("show-images")&&(this.showImages=this.getAttribute("show-images")!=="false"),this.hasAttribute("hide-sub-results")&&(this.hideSubResults=this.getAttribute("hide-sub-results")!=="false"),this.hasAttribute("max-sub-results")&&(this.maxSubResults=parseInt(this.getAttribute("max-sub-results")||"3",10)||3),this.hasAttribute("max-results")&&(this.maxResults=parseInt(this.getAttribute("max-results")||"0",10)),this.hasAttribute("link-target")&&(this.linkTarget=this.getAttribute("link-target")),this.checkForTemplates(),this.render()}checkForTemplates(){let e=this.querySelector('script[type="text/pagefind-template"]:not([data-template]), script[type="text/pagefind-template"][data-template="result"]');e&&(this.compiledResultTemplate=R((e.textContent||"").trim()));let t=this.querySelector('script[type="text/pagefind-template"][data-template="placeholder"]');t&&(this.compiledPlaceholderTemplate=R((t.textContent||"").trim()))}buildTemplateData(e,t){let r=t.showSubResults?this.instance.getDisplaySubResults(e,t.maxSubResults):[];return{meta:e.meta||{},excerpt:e.excerpt||"",url:e.url||"",sub_results:r.map(i=>({title:i.title,url:i.url,excerpt:i.excerpt})),options:{link_target:t.linkTarget,show_images:t.showImages}}}getResultRenderer(){if(this.resultTemplate){let e=this.resultTemplate;return(t,r)=>e(t)}if(this.compiledResultTemplate){let e=this.compiledResultTemplate;return(t,r)=>{let i=this.buildTemplateData(t,r);return e(i)}}return(e,t)=>{let r=this.buildTemplateData(e,t);return Ca(r)}}getPlaceholder(){return this.compiledPlaceholderTemplate?this.compiledPlaceholderTemplate({}):ya({})}render(){let e=[];this.querySelectorAll('script[type="text/pagefind-template"]').forEach(r=>{e.push(r)}),this.innerHTML="",e.forEach(r=>this.appendChild(r));let t=this.instance?.translate("results_label")||"Search results";this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir"),this.containerEl=document.createElement("ul"),this.containerEl.className="pf-results",this.containerEl.setAttribute("aria-label",t),this.containerEl.setAttribute("aria-busy","false"),this.appendChild(this.containerEl),this.setupKeyboardHandlers()}appendResults(e){if(this.containerEl)for(let t of e)this.containerEl.appendChild(t)}register(e){e.registerResults(this,{keyboardNavigation:!0,announcements:!0}),e.on("results",t=>{if(!this.containerEl)return;let r=t;for(let c of this.results)c.cleanup();this.containerEl.innerHTML="",this.containerEl.setAttribute("aria-busy","false"),this.intersectionEl=zt(this.containerEl),this.selectedIndex=-1,this.selectedAnchor=null;let i=this.maxResults>0?r.results.slice(0,this.maxResults):r.results,a=i.length,l=e.searchTerm;if(l){let c=a===0?"zero_results":a===1?"one_result":"many_results",u=a===0?"assertive":"polite";e.announce(c,{SEARCH_TERM:l,COUNT:a},u)}else if(e.faceted){let c=a===0?"total_zero_results":a===1?"total_one_result":"total_many_results",u=a===0?"assertive":"polite";e.announce(c,{COUNT:a},u)}let o=this.getResultRenderer();this.results=i.map((c,u)=>{let d=ss(this.getPlaceholder());rs(d,u),this.appendResults(d);let _=new Dt({result:c,index:u,placeholderNodes:d,resultFn:o,intersectionEl:this.intersectionEl,showImages:this.showImages,showSubResults:!this.hideSubResults,maxSubResults:this.maxSubResults,linkTarget:this.linkTarget,onLoad:()=>{_.result&&this.clearLoadingAnnouncement()}});return _})},this),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerHTML="",this.containerEl.setAttribute("aria-busy","true"),this.selectedIndex=-1,this.selectedAnchor=null)},this),e.on("error",t=>{let r=t;this.containerEl&&this.containerEl.setAttribute("aria-busy","false"),e.announce("error_search",{},"assertive"),this.showError({message:r.message||e.translate("error_search")||"Failed to load search results",details:r.bundlePath?`Bundle path: ${r.bundlePath}`:void 0})},this),e.on("translations",()=>{this.render()},this)}findNeighborAnchor(e,t){if(!this.containerEl)return null;let r=document.createTreeWalker(this.containerEl,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>l.tagName==="A"?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});r.currentNode=e;let i=t>0?r.nextNode():r.previousNode();if(!i||!(i instanceof HTMLAnchorElement))return null;let a=this.resultIndexForNode(i);return{anchor:i,resultIndex:a}}resultIndexForNode(e){if(!this.containerEl)return-1;let t=e;for(;t&&t.parentNode!==this.containerEl;)t=t.parentNode;if(!t||!(t instanceof Element))return-1;let r=t.getAttribute("data-pf-result-index");if(r===null)return-1;let i=parseInt(r,10);return Number.isNaN(i)?-1:i}setupKeyboardHandlers(){this.containerEl&&(this.containerEl.addEventListener("keydown",e=>{let t=e.target.closest("a");if(t)if(e.key==="ArrowDown"){e.preventDefault();let r=this.findNeighborAnchor(t,1);if(r)r.anchor.focus(),this.scrollToCenter(r.anchor,e.repeat),r.resultIndex!==-1&&this.preloadAhead(r.resultIndex,1);else{let a=this.resultIndexForNode(t)+1;if(a>0&&a{let t=e.target.closest("a");if(!t)return;this.clearSelection(),t.setAttribute("data-pf-selected",""),this.selectedAnchor=t;let r=this.instance?.translate("keyboard_navigate")||"navigate",i=this.instance?.translate("keyboard_select")||"select",a=this.instance?.translate("keyboard_search")||"search";this.instance?.registerShortcut({label:"\u2191\u2193",description:r},this),this.instance?.registerShortcut({label:"\u21B5",description:i},this),this.instance?.registerShortcut({label:"/",description:a},this)}),this.containerEl.addEventListener("focusout",e=>{let t=e;this.containerEl?.contains(t.relatedTarget)||(this.clearSelection(),this.instance?.deregisterAllShortcuts(this))}))}scrollToCenter(e,t=!1){let r=this.intersectionEl||zt(e);if(!r||!(r instanceof HTMLElement)||r===document.body||r===document.documentElement)return;let i=e.getBoundingClientRect(),a=r.getBoundingClientRect(),o=i.top-a.top+r.scrollTop-r.clientHeight/2+e.offsetHeight/2;r.scrollTo({top:o,behavior:t?"instant":"smooth"})}preloadAhead(e,t){let r=t>0?1:-1;for(let i=1;i<=3;i++){let a=e+r*i;if(a>=0&&a{this.loadingAnnouncementTimeout=null,this.instance?.announce("loading",{},"polite")},800))}clearLoadingAnnouncement(){this.loadingAnnouncementTimeout&&(clearTimeout(this.loadingAnnouncementTimeout),this.loadingAnnouncementTimeout=null)}clearSelection(){this.selectedAnchor&&(this.selectedAnchor.removeAttribute("data-pf-selected"),this.selectedAnchor=null)}cleanup(){this.clearLoadingAnnouncement();for(let e of this.results)e.cleanup();this.results=[],this.selectedAnchor=null}update(){this.render()}};customElements.get("pagefind-results")||customElements.define("pagefind-results",Se);var Ne=class extends f{constructor(){super();this.containerEl=null;this.showEmpty=!1;this.expanded=!1;this.openFilters=[];this.sortOption="default";this.autoOpenThreshold=6;this.selectedFilters={};this.availableFilters=null;this.totalFilters=null;this.filterElements=new Map;this.groupElements=new Map;this.groupVisibleCounts=new Map;this.isRendered=!1}static get observedAttributes(){return["show-empty","expanded","open","sort","auto-open-threshold"]}init(){if(this.hasAttribute("show-empty")&&(this.showEmpty=this.getAttribute("show-empty")!=="false"),this.hasAttribute("expanded")&&(this.expanded=this.getAttribute("expanded")!=="false"),this.hasAttribute("open")&&(this.openFilters=(this.getAttribute("open")||"").split(",").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)),this.hasAttribute("sort")){let e=this.getAttribute("sort");["default","alphabetical","count-desc","count-asc"].includes(e)&&(this.sortOption=e)}this.hasAttribute("auto-open-threshold")&&(this.autoOpenThreshold=parseInt(this.getAttribute("auto-open-threshold")||"6",10)),this.render()}sortValues(e,t){if(this.sortOption==="default")return e;let r=[...e];switch(this.sortOption){case"alphabetical":r.sort((i,a)=>i[0].localeCompare(a[0]));break;case"count-desc":r.sort((i,a)=>{let l=t[i[0]]??i[1];return(t[a[0]]??a[1])-l});break;case"count-asc":r.sort((i,a)=>{let l=t[i[0]]??i[1],o=t[a[0]]??a[1];return l-o});break}return r}render(){this.innerHTML="",this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir"),this.containerEl=document.createElement("div"),this.containerEl.className="pf-filter-pane",this.appendChild(this.containerEl)}getSelectedText(e){return String(e)}shouldGroupStartOpen(e,t,r){return this.openFilters.length>0?this.openFilters.includes(e.toLowerCase()):this.autoOpenThreshold>0&&r===1&&t<=this.autoOpenThreshold}hasStructureChanged(){if(!this.totalFilters)return!1;let e=new Set(Object.keys(this.totalFilters)),t=new Set(this.groupElements.keys());if(e.size!==t.size)return!0;for(let r of e)if(!t.has(r))return!0;for(let[r,i]of Object.entries(this.totalFilters)){let a=new Set(Object.keys(i));for(let l of a)if(!this.filterElements.has(`${r}:${l}`))return!0}return!1}handleFiltersUpdate(){if(!this.containerEl||!this.totalFilters)return;if(Object.keys(this.totalFilters).length===0){this.containerEl.setAttribute("data-pf-hidden","true");return}this.containerEl.removeAttribute("data-pf-hidden"),!this.isRendered||this.hasStructureChanged()?this.renderFilters():this.updateFilters()}renderFilters(){if(!this.containerEl||!this.totalFilters)return;this.containerEl.innerHTML="",this.filterElements.clear(),this.groupElements.clear(),this.groupVisibleCounts.clear();let e=Object.keys(this.totalFilters);for(let t of e){let r=this.totalFilters[t],i=this.availableFilters?.[t]||{},a=this.renderFilterGroup(t,r,i,e.length);a&&this.containerEl.appendChild(a)}this.isRendered=!0}updateFilters(){for(let[e,t]of this.filterElements){let r=e.indexOf(":"),i=e.slice(0,r),a=e.slice(r+1),l=this.availableFilters?.[i]?.[a]??0,o=this.totalFilters?.[i]?.[a]??0,c=this.selectedFilters[i]?.has(a),u=c?o:l;t.countSpan.textContent=String(u);let d=this.showEmpty||l>0||c,_=t.label.hasAttribute("data-pf-hidden");t.label.toggleAttribute("data-pf-hidden",!d),d&&_?this.groupVisibleCounts.set(i,(this.groupVisibleCounts.get(i)??0)+1):!d&&!_&&this.groupVisibleCounts.set(i,(this.groupVisibleCounts.get(i)??1)-1),t.checkbox.checked=c||!1}for(let[e,t]of this.groupElements){let r=this.selectedFilters[e]?.size||0;t.selectedCountSpan&&(r>0?(t.selectedCountSpan.textContent=this.getSelectedText(r),t.selectedCountSpan.removeAttribute("data-pf-hidden")):t.selectedCountSpan.setAttribute("data-pf-hidden","true"));let i=this.groupVisibleCounts.get(e)??0;t.group.toggleAttribute("data-pf-hidden",i===0)}}renderFilterGroup(e,t,r,i){let a=Object.entries(t);if(a.length===0)return null;let l=this.sortValues(a,r),o=e.charAt(0).toUpperCase()+e.slice(1),c=this.selectedFilters[e]?.size||0,u=this.expanded||this.shouldGroupStartOpen(e,l.length,i),d,_,p=null;if(this.expanded){d=document.createElement("fieldset"),d.className="pf-filter-group";let E=document.createElement("legend");E.className="pf-filter-group-title";let C=document.createElement("span");C.className="pf-filter-group-name",C.textContent=o,E.appendChild(C),d.appendChild(E),_=document.createElement("div"),_.className="pf-filter-options",d.appendChild(_)}else{d=document.createElement("details"),d.className="pf-filter-group",d.dataset.filterName=e,u&&(d.open=!0);let E=document.createElement("summary");E.className="pf-filter-group-title";let C=document.createElement("span");C.className="pf-filter-group-name",C.textContent=o,E.appendChild(C),p=document.createElement("span"),p.className="pf-filter-group-count",p.setAttribute("aria-hidden","true"),c>0?p.textContent=this.getSelectedText(c):p.setAttribute("data-pf-hidden","true"),E.appendChild(p),d.appendChild(E);let y=document.createElement("fieldset");y.className="pf-filter-fieldset";let v=document.createElement("legend");v.setAttribute("data-pf-sr-hidden",""),v.textContent=o,y.appendChild(v),_=document.createElement("div"),_.className="pf-filter-options",y.appendChild(_),d.appendChild(y)}this.groupElements.set(e,{group:d,optionsContainer:_,selectedCountSpan:p});let g=0;for(let[E,C]of l){let y=r[E]??0,v=this.selectedFilters[e]?.has(E)||!1,$e=v?C:y,N=this.showEmpty||y>0||v;N&&g++,this.renderCheckbox(_,e,E,$e,v,N)}return this.groupVisibleCounts.set(e,g),d}renderCheckbox(e,t,r,i,a,l){let o=this.instance.generateId(`pf-filter-${t}-${r}`),c=document.createElement("label");c.className="pf-filter-checkbox",c.setAttribute("for",o),l||c.setAttribute("data-pf-hidden","true");let u=document.createElement("input");u.type="checkbox",u.className="pf-checkbox-input",u.id=o,u.name=t,u.value=r,u.checked=a,u.addEventListener("change",p=>{this.handleCheckboxChange(t,r,p.target.checked)}),c.appendChild(u);let d=document.createTextNode(r);c.appendChild(d);let _=document.createElement("span");_.className="pf-filter-checkbox-count",_.textContent=String(i),c.appendChild(_),e.appendChild(c),this.filterElements.set(`${t}:${r}`,{label:c,countSpan:_,checkbox:u})}handleCheckboxChange(e,t,r){this.selectedFilters[e]||(this.selectedFilters[e]=new Set),r?this.selectedFilters[e].add(t):this.selectedFilters[e].delete(t);let i=this.groupElements.get(e);if(i?.selectedCountSpan){let l=this.selectedFilters[e].size;l>0?(i.selectedCountSpan.textContent=this.getSelectedText(l),i.selectedCountSpan.removeAttribute("data-pf-hidden")):i.selectedCountSpan.setAttribute("data-pf-hidden","true")}let a=Array.from(this.selectedFilters[e]);if(a.length===0){delete this.selectedFilters[e];let l={};for(let[o,c]of Object.entries(this.selectedFilters))l[o]=Array.from(c);this.instance?.triggerFilters(l)}else this.instance?.triggerFilter(e,a)}register(e){e.registerFilter(this),e.on("filters",t=>{let r=t;this.availableFilters=r.available,this.totalFilters=r.total,this.handleFiltersUpdate()},this),e.on("search",(t,r)=>{this.selectedFilters={};let i=r;if(i)for(let[a,l]of Object.entries(i))Array.isArray(l)&&l.length>0&&(this.selectedFilters[a]=new Set(l));this.isRendered&&this.updateFilters()},this),e.on("error",t=>{let r=t;this.showError({message:r.message||"Failed to load filters",details:r.bundlePath?`Bundle path: ${r.bundlePath}`:void 0})},this),e.on("translations",()=>{this.render(),this.isRendered=!1,this.handleFiltersUpdate()},this)}update(){this.hasAttribute("show-empty")&&(this.showEmpty=this.getAttribute("show-empty")!=="false"),this.hasAttribute("expanded")&&(this.expanded=this.getAttribute("expanded")!=="false"),this.hasAttribute("open")&&(this.openFilters=(this.getAttribute("open")||"").split(",").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)),this.isRendered&&(this.isRendered=!1,this.handleFiltersUpdate())}};customElements.get("pagefind-filter-pane")||customElements.define("pagefind-filter-pane",Ne);var Me=class extends f{constructor(){super();this.isOpen=!1;this.activeIndex=-1;this.selectedValues=new Set;this.isRendered=!1;this.filtersLoaded=!1;this.filterName=null;this.availableFilters={};this.totalFilters={};this.singleSelect=!1;this.showEmpty=!1;this.wrapLabels=!1;this.hideClear=!1;this.sortOption="default";this.wrapperEl=null;this.triggerEl=null;this.menuEl=null;this.optionsEl=null;this.clearEl=null;this.badgeEl=null;this.optionElements=[];this.focusedOptionEl=null;this.typeAheadBuffer="";this.typeAheadTimeout=null;this._handleClickOutside=this._handleClickOutside.bind(this)}static get observedAttributes(){return["filter","label","single-select","show-empty","wrap","sort","hide-clear"]}init(){if(this.filterName=this.getAttribute("filter"),!this.filterName){this.showError({message:"filter attribute is required on "});return}if(this.singleSelect=this.hasAttribute("single-select"),this.showEmpty=this.hasAttribute("show-empty"),this.wrapLabels=this.hasAttribute("wrap"),this.hideClear=this.hasAttribute("hide-clear"),this.hasAttribute("sort")){let e=this.getAttribute("sort");["default","alphabetical","count-desc","count-asc"].includes(e)&&(this.sortOption=e)}this.render()}sortValues(e){if(this.sortOption==="default")return e;let t=[...e];switch(this.sortOption){case"alphabetical":t.sort((r,i)=>r.localeCompare(i));break;case"count-desc":t.sort((r,i)=>{let a=this.availableFilters[r]??this.totalFilters[r]??0;return(this.availableFilters[i]??this.totalFilters[i]??0)-a});break;case"count-asc":t.sort((r,i)=>{let a=this.availableFilters[r]??this.totalFilters[r]??0,l=this.availableFilters[i]??this.totalFilters[i]??0;return a-l});break}return t}render(){this.innerHTML="";let e=this.ensureId("pf-dropdown"),t=`${e}-trigger`,r=`${e}-menu`;this.wrapperEl=document.createElement("div"),this.wrapperEl.className="pf-dropdown-wrapper",this.triggerEl=document.createElement("button"),this.triggerEl.type="button",this.triggerEl.id=t,this.triggerEl.className="pf-dropdown-trigger",this.wrapLabels&&this.triggerEl.classList.add("wrap"),this.triggerEl.setAttribute("role","combobox"),this.triggerEl.setAttribute("aria-haspopup","listbox"),this.triggerEl.setAttribute("aria-expanded","false"),this.triggerEl.setAttribute("aria-controls",r);let i=document.createElement("span");i.className="pf-dropdown-trigger-label",this.wrapLabels&&i.classList.add("wrap"),i.textContent=this.getAttribute("label")||this.filterName||"",this.triggerEl.appendChild(i),this.badgeEl=document.createElement("span"),this.badgeEl.className="pf-dropdown-selected-badge",this.badgeEl.setAttribute("data-pf-hidden","true"),this.badgeEl.setAttribute("aria-hidden","true"),this.badgeEl.textContent="0",this.triggerEl.appendChild(this.badgeEl);let a=document.createElement("span");a.className="pf-dropdown-arrow",a.setAttribute("aria-hidden","true"),this.triggerEl.appendChild(a),this.wrapperEl.appendChild(this.triggerEl),this.menuEl=document.createElement("div"),this.menuEl.id=r,this.menuEl.className="pf-dropdown-menu",this.menuEl.hidden=!0,this.optionsEl=document.createElement("div"),this.optionsEl.className="pf-dropdown-options",this.optionsEl.setAttribute("role","listbox"),this.optionsEl.setAttribute("aria-multiselectable",this.singleSelect?"false":"true"),this.optionsEl.setAttribute("aria-labelledby",t),this.menuEl.appendChild(this.optionsEl),this.wrapperEl.appendChild(this.menuEl),this.hideClear||(this.clearEl=document.createElement("button"),this.clearEl.type="button",this.clearEl.className="pf-dropdown-clear",this.clearEl.setAttribute("aria-disabled","true"),this.clearEl.setAttribute("aria-label",(this.instance?.translate("clear_search")||"Clear")+" "+(this.getAttribute("label")||this.filterName||"")),this.clearEl.textContent=this.instance?.translate("clear_search")||"Clear",this.wrapperEl.appendChild(this.clearEl),this.clearEl.addEventListener("click",()=>this.clearAll())),this.appendChild(this.wrapperEl),this.triggerEl.addEventListener("click",()=>this.toggle()),this.triggerEl.addEventListener("focus",()=>this.instance?.triggerLoad()),this.triggerEl.addEventListener("keydown",l=>{this.isOpen?this.handleMenuKeydown(l):this.handleTriggerKeydown(l)}),this.isRendered=!0}toggle(){this.isOpen?this.close():this.open()}open(){if(this.instance?.triggerLoad(),this.isOpen||!this.menuEl||!this.triggerEl||!this.optionsEl)return;if(this.isOpen=!0,this.filtersLoaded||this.showLoadingState(),this.menuEl.hidden=!1,this.triggerEl.setAttribute("aria-expanded","true"),this.triggerEl.classList.add("open"),this.optionElements.length>0){let i=this.activeIndex>=0?this.activeIndex:0;this.setActiveIndex(i)}let e=this.instance?.translate("keyboard_navigate")||"navigate",t=this.instance?.translate("keyboard_select")||"select",r=this.instance?.translate("keyboard_close")||"close";this.instance?.registerShortcut({label:"\u2191\u2193",description:e},this),this.instance?.registerShortcut({label:"\u21B5",description:t},this),this.instance?.registerShortcut({label:"esc",description:r},this),setTimeout(()=>{document.addEventListener("click",this._handleClickOutside)},0)}close(e=!0){!this.isOpen||!this.menuEl||!this.triggerEl||!this.optionsEl||(this.isOpen=!1,this.menuEl.hidden=!0,this.triggerEl.setAttribute("aria-expanded","false"),this.triggerEl.classList.remove("open"),this.triggerEl?.removeAttribute("aria-activedescendant"),this.focusedOptionEl&&(this.focusedOptionEl.classList.remove("pf-dropdown-option-focused"),this.focusedOptionEl=null),this.instance?.deregisterAllShortcuts(this),document.removeEventListener("click",this._handleClickOutside),e&&this.triggerEl.focus())}_handleClickOutside(e){this.wrapperEl&&!this.wrapperEl.contains(e.target)&&this.close(!1)}handleTriggerKeydown(e){switch(e.key){case"Enter":case" ":e.preventDefault(),this.open();break;case"ArrowDown":e.preventDefault(),this.open(),this.setActiveIndex(0);break;case"ArrowUp":e.preventDefault(),this.open(),this.setActiveIndex(this.optionElements.length-1);break}}handleMenuKeydown(e){switch(e.key){case"ArrowDown":e.preventDefault(),this.moveActiveIndex(1);break;case"ArrowUp":e.preventDefault(),this.moveActiveIndex(-1);break;case"Home":e.preventDefault(),this.setActiveIndex(0);break;case"End":e.preventDefault(),this.setActiveIndex(this.optionElements.length-1);break;case"Enter":case" ":if(e.preventDefault(),this.activeIndex>=0&&this.activeIndex=this.optionElements.length||!this.optionsEl)return;this.focusedOptionEl&&this.focusedOptionEl.classList.remove("pf-dropdown-option-focused"),this.activeIndex=e;let t=this.optionElements[e];t.el.classList.add("pf-dropdown-option-focused"),this.focusedOptionEl=t.el,this.triggerEl?.setAttribute("aria-activedescendant",t.el.id),this.scrollToCenter(t.el)}scrollToCenter(e){if(!this.optionsEl)return;let t=this.optionsEl,r=e.offsetTop,i=e.offsetHeight,a=t.clientHeight,l=r-a/2+i/2;t.scrollTo({top:l,behavior:"smooth"})}moveActiveIndex(e){let t=this.activeIndex+e;t<0?t=this.optionElements.length-1:t>=this.optionElements.length&&(t=0),this.setActiveIndex(t)}handleTypeAhead(e){this.typeAheadBuffer+=e.toLowerCase(),this.typeAheadTimeout&&clearTimeout(this.typeAheadTimeout);let t=this.optionElements.findIndex(({value:r})=>r.toLowerCase().startsWith(this.typeAheadBuffer));t>=0&&this.setActiveIndex(t),this.typeAheadTimeout=setTimeout(()=>{this.typeAheadBuffer=""},500)}showLoadingState(){if(!this.optionsEl)return;this.optionsEl.innerHTML="",this.optionsEl.setAttribute("aria-busy","true");let e=document.createElement("div");e.setAttribute("data-pf-sr-hidden","true"),e.textContent="Loading filter options...",this.optionsEl.appendChild(e);for(let t=0;t<3;t++){let r=document.createElement("div");r.className="pf-dropdown-option pf-dropdown-option-loading",r.setAttribute("aria-hidden","true");let i=document.createElement("span");i.className="pf-dropdown-checkbox pf-skeleton",r.appendChild(i);let a=document.createElement("span");a.className="pf-dropdown-option-label pf-skeleton",a.style.width=`${60+t*15}%`,a.innerHTML=" ",r.appendChild(a),this.optionsEl.appendChild(r)}}updateOptions(){if(!this.optionsEl)return;this.filtersLoaded=!0,this.optionsEl.removeAttribute("aria-busy");let e=Object.keys(this.totalFilters||{}),t=this.sortValues(e);if(e.length===0){this.optionsEl.innerHTML="";let i=document.createElement("div");i.className="pf-dropdown-error",i.setAttribute("role","alert"),i.textContent=`No filter "${this.filterName}" found`,this.optionsEl.appendChild(i),this.optionElements=[],this.focusedOptionEl=null;return}this.wrapperEl?.removeAttribute("data-pf-hidden"),this.optionsEl.innerHTML="",this.optionElements=[],this.focusedOptionEl=null;let r=this.id||this.ensureId("pf-dropdown");t.forEach((i,a)=>{let l=this.availableFilters?.[i]??0,o=this.totalFilters[i]??0,c=this.selectedValues.has(i);if(!(this.showEmpty||l>0||c))return;let d=c?o:l,_=`${r}-option-${a}`,p=this.createOption(_,i,d,c);this.optionsEl.appendChild(p),this.optionElements.push({el:p,value:i})}),this.isOpen&&this.optionElements.length>0&&(this.activeIndex>=this.optionElements.length?this.setActiveIndex(this.optionElements.length-1):this.activeIndex<0?this.setActiveIndex(0):this.setActiveIndex(this.activeIndex)),this.updateBadge()}createOption(e,t,r,i){let a=document.createElement("div");a.id=e,a.className="pf-dropdown-option",this.wrapLabels&&a.classList.add("wrap"),a.setAttribute("role","option"),a.setAttribute("aria-selected",String(i)),a.dataset.value=t;let l=document.createElement("span");l.className="pf-dropdown-checkbox",l.setAttribute("aria-hidden","true"),a.appendChild(l);let o=document.createElement("span");o.className="pf-dropdown-option-label",this.wrapLabels&&o.classList.add("wrap"),o.textContent=t,a.appendChild(o);let c=document.createElement("span");c.className="pf-dropdown-option-count",c.setAttribute("aria-hidden","true"),c.textContent=String(r),a.appendChild(c);let u=r===1?"result":"results";return a.setAttribute("aria-label",`${t}, ${r} ${u}`),a.addEventListener("click",d=>{d.stopPropagation(),this.toggleOption(t)}),a}toggleOption(e){let t=this.selectedValues.has(e);this.singleSelect?(this.selectedValues.has(e)?this.selectedValues.clear():(this.selectedValues.clear(),this.selectedValues.add(e)),this.close()):this.selectedValues.has(e)?this.selectedValues.delete(e):this.selectedValues.add(e);let r=this.selectedValues.has(e);if(r!==t){let i=r?"selected":"deselected";this.instance?.announceRaw(`${e} ${i}`)}this.updateOptionStates(),this.updateBadge(),this.dispatchFilterChange()}clearAll(){this.selectedValues.size!==0&&(this.selectedValues.clear(),this.updateOptionStates(),this.updateBadge(),this.dispatchFilterChange())}dispatchFilterChange(){if(!this.filterName)return;let e=Array.from(this.selectedValues);e.length===0?this.instance?.triggerFilter(this.filterName,[]):this.instance?.triggerFilter(this.filterName,e)}updateBadge(){if(!this.badgeEl||!this.triggerEl)return;let e=this.selectedValues.size;if(e>0){this.badgeEl.textContent=String(e),this.badgeEl.removeAttribute("data-pf-hidden");let t=this.getAttribute("label")||this.filterName||"",r=e===1?"filter":"filters";this.triggerEl.setAttribute("aria-label",`${t}, ${e} ${r} selected`),this.clearEl&&this.clearEl.removeAttribute("aria-disabled")}else this.badgeEl.setAttribute("data-pf-hidden","true"),this.triggerEl.removeAttribute("aria-label"),this.clearEl&&this.clearEl.setAttribute("aria-disabled","true")}updateOptionStates(){for(let{el:e,value:t}of this.optionElements){let r=this.selectedValues.has(t);e.setAttribute("aria-selected",String(r))}}register(e){this.filterName&&(e.registerFilter(this),e.on("filters",t=>{let r=t;this.availableFilters=r.available?.[this.filterName]||{},this.totalFilters=r.total?.[this.filterName]||{},this.isRendered&&this.updateOptions()},this),e.on("search",(t,r)=>{let a=r?.[this.filterName]||[];this.selectedValues=new Set(a),this.isRendered&&(this.updateOptionStates(),this.updateBadge())},this),e.on("error",t=>{let r=t;this.showError({message:r.message||"Failed to load filters",details:r.bundlePath?`Bundle path: ${r.bundlePath}`:void 0})},this))}update(){let e=this.getAttribute("filter");if(e!==this.filterName&&(this.filterName=e,this.selectedValues.clear(),this.updateOptions()),this.singleSelect=this.hasAttribute("single-select"),this.showEmpty=this.hasAttribute("show-empty"),this.wrapLabels=this.hasAttribute("wrap"),this.hideClear=this.hasAttribute("hide-clear"),this.hasAttribute("sort")){let r=this.getAttribute("sort");["default","alphabetical","count-desc","count-asc"].includes(r)&&(this.sortOption=r)}else this.sortOption="default";this.optionsEl&&this.optionsEl.setAttribute("aria-multiselectable",this.singleSelect?"false":"true");let t=this.triggerEl?.querySelector(".pf-dropdown-trigger-label");t&&(t.textContent=this.getAttribute("label")||this.filterName||""),this.updateOptions()}cleanup(){document.removeEventListener("click",this._handleClickOutside),this.instance?.deregisterAllShortcuts(this),this.focusedOptionEl=null,this.typeAheadTimeout&&clearTimeout(this.typeAheadTimeout)}};customElements.get("pagefind-filter-dropdown")||customElements.define("pagefind-filter-dropdown",Me);var Oe=class extends f{constructor(){super();this.dialogEl=null;this.resetOnClose=!1;this._isOpen=!1;this._closeHandler=null}static get observedAttributes(){return["reset-on-close"]}init(){this.hasAttribute("reset-on-close")&&(this.resetOnClose=this.getAttribute("reset-on-close")!=="false"),this.render()}render(){let e=this.children.length>0,t=e?Array.from(this.children):null;this.innerHTML="";let r=this.id||this.instance.generateId("pagefind-modal"),i=this.instance?.translate("keyboard_search")||"search";if(this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir"),this.dialogEl=document.createElement("dialog"),this.dialogEl.className="pf-modal",this.dialogEl.id=r,this.dialogEl.setAttribute("aria-label",i),e&&t)t.forEach(a=>this.dialogEl.appendChild(a));else{let a=this.getAttribute("instance"),l=document.createElement("pagefind-modal-header"),o=document.createElement("pagefind-input");a&&o.setAttribute("instance",a),l.appendChild(o);let c=document.createElement("pagefind-modal-body"),u=document.createElement("pagefind-summary"),d=document.createElement("pagefind-results");a&&(u.setAttribute("instance",a),d.setAttribute("instance",a)),c.append(u,d);let _=document.createElement("pagefind-modal-footer"),p=document.createElement("pagefind-keyboard-hints");a&&p.setAttribute("instance",a),_.appendChild(p),this.dialogEl.append(l,c,_)}this.appendChild(this.dialogEl),this.setupEventHandlers()}setupEventHandlers(){this.dialogEl&&(this._closeHandler=()=>{this._isOpen=!1,this.handleClose()},this.dialogEl.addEventListener("close",this._closeHandler),this.dialogEl.addEventListener("keydown",e=>{e.key==="Escape"&&(e.preventDefault(),e.stopPropagation(),this.close())},!0),this.dialogEl.addEventListener("click",e=>{e.target===this.dialogEl&&this.close()}))}open(){if(this._isOpen||!this.dialogEl)return;this._isOpen=!0,this.dialogEl.showModal();let e=this.instance?.translate("keyboard_close")||"close";this.instance?.registerShortcut({label:"esc",description:e},this),requestAnimationFrame(()=>{let r=this.querySelector("pagefind-input");if(r&&typeof r.focus=="function")r.focus();else{let i=this.querySelector("input");i&&i.focus()}}),(this.instance?.getUtilities("modal-trigger")||[]).forEach(r=>r.buttonEl?.setAttribute("aria-expanded","true"))}close(){!this._isOpen||!this.dialogEl||this.dialogEl.close()}handleClose(){this.instance?.deregisterAllShortcuts(this),this.resetOnClose&&this.instance&&this.instance.triggerSearch("");let t=(this.instance?.getUtilities("modal-trigger")||[])[0];t&&typeof t.handleModalClose=="function"&&t.handleModalClose()}get isOpen(){return this._isOpen}register(e){e.registerUtility(this,"modal"),e.on("translations",()=>{let t=this._isOpen;this.render(),t&&this.open()},this)}reconcileAria(){(this.instance?.getUtilities("modal-trigger")||[]).forEach(t=>{t.buttonEl&&this.dialogEl?.id&&t.buttonEl.setAttribute("aria-controls",this.dialogEl.id)})}cleanup(){this.dialogEl&&this._closeHandler&&this.dialogEl.removeEventListener("close",this._closeHandler),this.instance?.deregisterAllShortcuts(this)}update(){this.hasAttribute("reset-on-close")&&(this.resetOnClose=this.getAttribute("reset-on-close")!=="false")}};customElements.get("pagefind-modal")||customElements.define("pagefind-modal",Oe);var S=null;function is(){if(S!==null)return S;try{let n=navigator.userAgentData;if(n?.platform)return S=n.platform.toLowerCase().includes("mac"),S}catch{}return S=/mac/i.test(navigator.userAgent),S}function je(n){let s=n.toLowerCase().split("+"),e={mod:!1,ctrl:!1,shift:!1,alt:!1,meta:!1,key:""};for(let t of s)switch(t){case"mod":e.mod=!0;break;case"ctrl":e.ctrl=!0;break;case"shift":e.shift=!0;break;case"alt":e.alt=!0;break;case"meta":case"cmd":case"command":e.meta=!0;break;default:e.key=t}return e}function Be(n,s){let e=is(),t=s.key.toLowerCase()===n.key,r=n.mod?!e:n.ctrl,i=n.mod?e:n.meta,a=r?s.ctrlKey:!s.ctrlKey,l=i?s.metaKey:!s.metaKey,o=n.shift?s.shiftKey:!s.shiftKey,c=n.alt?s.altKey:!s.altKey;return t&&a&&l&&o&&c}function xe(n){let s=is(),e=[],t=[];return n.mod&&(e.push(s?"\u2318":"Ctrl"),t.push(s?"Meta":"Control")),n.meta&&(e.push(s?"\u2318":"Win"),t.push("Meta")),n.ctrl&&(e.push("Ctrl"),t.push("Control")),n.shift&&(e.push("Shift"),t.push("Shift")),n.alt&&(e.push("Alt"),t.push("Alt")),e.push(n.key.toUpperCase()),t.push(n.key),{keys:e,aria:t.join("+")}}var He=class extends f{constructor(){super();this.buttonEl=null;this._userPlaceholder=null;this.shortcut="mod+k";this.hideShortcut=!1;this.compact=!1;this._keydownHandler=null;this._keyBinding=null}static get observedAttributes(){return["placeholder","shortcut","hide-shortcut","compact"]}get placeholder(){return this._userPlaceholder||this.instance?.translate("keyboard_search")||"Search"}init(){this.readAttributes(),this.render(),this.setupKeyboardShortcut()}readAttributes(){this.hasAttribute("placeholder")&&(this._userPlaceholder=this.getAttribute("placeholder")),this.hasAttribute("shortcut")&&(this.shortcut=this.getAttribute("shortcut")||"mod+k"),this.hasAttribute("hide-shortcut")&&(this.hideShortcut=this.getAttribute("hide-shortcut")!=="false"),this.hasAttribute("compact")&&(this.compact=this.getAttribute("compact")!=="false"),this._keyBinding=je(this.shortcut)}render(){if(this.innerHTML="",this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir"),this.buttonEl=document.createElement("button"),this.buttonEl.className="pf-trigger-btn",this.buttonEl.type="button",this.buttonEl.setAttribute("aria-haspopup","dialog"),this.buttonEl.setAttribute("aria-expanded","false"),this.buttonEl.setAttribute("aria-label",this.placeholder||"Search"),this._keyBinding){let t=xe(this._keyBinding);this.buttonEl.setAttribute("aria-keyshortcuts",t.aria)}let e=document.createElement("span");if(e.className="pf-trigger-icon",e.setAttribute("aria-hidden","true"),this.buttonEl.appendChild(e),!this.compact){let t=document.createElement("span");t.className="pf-trigger-text",t.textContent=this.placeholder,this.buttonEl.appendChild(t)}if(!this.hideShortcut&&this._keyBinding){let t=document.createElement("span");t.className="pf-trigger-shortcut",t.setAttribute("aria-hidden","true");let r=xe(this._keyBinding);for(let i of r.keys){let a=document.createElement("span");a.className="pf-trigger-key",a.textContent=i,t.appendChild(a)}this.buttonEl.appendChild(t)}this.appendChild(this.buttonEl),this.buttonEl.addEventListener("click",()=>{this.openModal()})}setupKeyboardShortcut(){this._keydownHandler=e=>{if(!this._keyBinding||!Be(this._keyBinding,e))return;let t=document.activeElement;t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)||(e.preventDefault(),this.openModal())},document.addEventListener("keydown",this._keydownHandler)}openModal(){let t=(this.instance?.getUtilities("modal")||[])[0];t&&typeof t.open=="function"&&(t.open(),this.buttonEl&&this.buttonEl.setAttribute("aria-expanded","true"))}handleModalClose(){this.buttonEl&&(this.buttonEl.setAttribute("aria-expanded","false"),this.buttonEl.focus())}register(e){e.registerUtility(this,"modal-trigger"),e.on("translations",()=>{this.render()},this)}reconcileAria(){let t=(this.instance?.getUtilities("modal")||[])[0];t?.dialogEl?.id&&this.buttonEl&&this.buttonEl.setAttribute("aria-controls",t.dialogEl.id)}cleanup(){this._keydownHandler&&(document.removeEventListener("keydown",this._keydownHandler),this._keydownHandler=null)}update(){this.readAttributes(),this.render()}};customElements.get("pagefind-modal-trigger")||customElements.define("pagefind-modal-trigger",He);var we=class extends f{constructor(){super(...arguments);this.closeBtn=null}init(){this.classList.add("pf-modal-header");let e=document.createElement("div");for(e.className="pf-modal-header-content";this.firstChild;)e.appendChild(this.firstChild);this.closeBtn=document.createElement("button"),this.closeBtn.type="button",this.closeBtn.className="pf-modal-close",this.closeBtn.setAttribute("aria-label",this.instance?.translate("keyboard_close")||"Close"),this.closeBtn.innerHTML='',this.closeBtn.addEventListener("click",()=>{let t=this.closest("pagefind-modal");t&&typeof t.close=="function"&&t.close()}),this.append(e,this.closeBtn)}register(e){e.registerUtility(this,"modal-header"),e.on("translations",()=>{this.closeBtn&&this.closeBtn.setAttribute("aria-label",e.translate("keyboard_close")||"Close")},this)}};customElements.get("pagefind-modal-header")||customElements.define("pagefind-modal-header",we);var Ie=class extends f{init(){this.classList.add("pf-modal-body"),this.setAttribute("tabindex","-1")}register(s){}};customElements.get("pagefind-modal-body")||customElements.define("pagefind-modal-body",Ie);var Ue=class extends f{init(){this.classList.add("pf-modal-footer")}register(s){}};customElements.get("pagefind-modal-footer")||customElements.define("pagefind-modal-footer",Ue);var Le=class extends f{init(){this.classList.add("pf-keyboard-hints"),this.setAttribute("aria-hidden","true")}render(){this.innerHTML="",this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir");let s=this.instance?.getActiveShortcuts()||[];if(s.length===0)return;let e=new Set;for(let t of s){if(e.has(t.label))continue;e.add(t.label);let r=document.createElement("div");r.className="pf-keyboard-hint";let i=document.createElement("kbd");i.className="pf-keyboard-key",i.textContent=t.label,r.appendChild(i),r.appendChild(document.createTextNode(` ${t.description}`)),this.appendChild(r)}}register(s){s.registerUtility(this,"keyboard-hints"),this.render(),s.on("translations",()=>{this.render()},this)}};customElements.get("pagefind-keyboard-hints")||customElements.define("pagefind-keyboard-hints",Le);var va=(n=100)=>new Promise(s=>setTimeout(s,n)),as=(n,s)=>{let e=n.getAttribute("role")==="option"?[n]:Array.from(n.querySelectorAll('[role="option"]'));for(let t=0;t{if(n instanceof Element)return[n];if(Array.isArray(n)&&n.every(s=>s instanceof Element))return n;if(typeof n=="string"||n instanceof String){let s=document.createElement("div");return s.innerHTML=n,[...s.childNodes]}return console.error(`[Pagefind Searchbox]: Expected template to return HTML element or string, got ${typeof n}`),[]},Ra=`{{#if and(options.show_sub_results, sub_results)}}{{/if}}`,ns=R(Ra),ka=``,Aa=R(ka),jt=class{constructor(s){this.data=null;this.cachedOptions=null;this.loading=!1;this.retryDelay=0;this.observer=null;this.rawResult=s.rawResult,this.placeholderEl=s.placeholderEl,this.renderFn=s.renderFn,this.intersectionRoot=s.intersectionRoot,this.index=s.index,this.onLoad=s.onLoad,this.setupObserver()}setupObserver(){if(this.data!==null||this.observer!==null)return;let s={root:this.intersectionRoot,rootMargin:"50px",threshold:.01};this.observer=new IntersectionObserver((e,t)=>{this.data===null&&e?.[0]?.isIntersecting&&(this.load(),t.disconnect(),this.observer=null)},s),this.observer.observe(this.placeholderEl)}async load(){if(!(this.data!==null||this.loading)){this.loading=!0;try{this.data=await this.rawResult.data();let s=this.renderFn(this.data),e=Ke(s);if(e.length>0&&this.placeholderEl.parentNode){let t=e.find(r=>r instanceof Element);this.placeholderEl.replaceWith(...e),t instanceof Element&&(this.placeholderEl=t,as(t,this.index),this.cacheOptions())}}catch{await new Promise(s=>setTimeout(s,this.retryDelay||100)),this.retryDelay=Math.min((this.retryDelay||100)*2,1e4),this.loading=!1}this.onLoad?.()}}cacheOptions(){if(!this.data||!this.placeholderEl){this.cachedOptions=null;return}this.placeholderEl.getAttribute("role")==="group"?this.cachedOptions=Array.from(this.placeholderEl.querySelectorAll('[role="option"]')):this.placeholderEl.getAttribute("role")==="option"?this.cachedOptions=[this.placeholderEl]:this.cachedOptions=[]}cleanup(){this.observer&&(this.observer.disconnect(),this.observer=null),this.cachedOptions=null}},Fe=class extends f{constructor(){super();this.containerEl=null;this.inputEl=null;this.dropdownEl=null;this.resultsEl=null;this.statusEl=null;this.footerEl=null;this.isOpen=!1;this.isLoading=!1;this.results=[];this.activeIndex=-1;this.activeOptionOffset=0;this.searchID=0;this.searchTerm="";this.pendingNavigation=0;this.loadingAnnouncementTimeout=null;this.selectedEl=null;this._userPlaceholder=null;this.debounce=150;this.autofocus=!1;this.showSubResults=!1;this.maxResults=0;this.showKeyboardHints=!0;this.shortcut="mod+k";this.hideShortcut=!1;this.resultTemplate=null;this.compiledResultTemplate=null;this.compiledPlaceholderTemplate=null;this._documentClickHandler=null;this._shortcutKeyHandler=null;this._keyBinding=null;this._shortcutEl=null}static get observedAttributes(){return["placeholder","debounce","autofocus","show-sub-results","max-results","show-keyboard-hints","shortcut","hide-shortcut"]}get placeholder(){return this._userPlaceholder||this.instance?.translate("placeholder")||"Search..."}readAttributes(){this.hasAttribute("placeholder")&&(this._userPlaceholder=this.getAttribute("placeholder")),this.hasAttribute("debounce")&&(this.debounce=parseInt(this.getAttribute("debounce")||"150",10)||150),this.hasAttribute("autofocus")&&(this.autofocus=this.hasAttribute("autofocus")),this.hasAttribute("show-sub-results")&&(this.showSubResults=this.getAttribute("show-sub-results")!=="false"),this.hasAttribute("max-results")&&(this.maxResults=parseInt(this.getAttribute("max-results")||"0",10)),this.hasAttribute("show-keyboard-hints")&&(this.showKeyboardHints=this.getAttribute("show-keyboard-hints")!=="false"),this.hasAttribute("shortcut")&&(this.shortcut=this.getAttribute("shortcut")||"mod+k"),this.hasAttribute("hide-shortcut")&&(this.hideShortcut=this.getAttribute("hide-shortcut")!=="false"),this._keyBinding=je(this.shortcut)}init(){this.readAttributes(),this.checkForTemplates(),this.render(),this.setupOutsideClickHandler(),this.setupShortcutHandler()}checkForTemplates(){let e=this.querySelector('script[type="text/pagefind-template"]:not([data-template]), script[type="text/pagefind-template"][data-template="result"]');e&&(this.compiledResultTemplate=R((e.textContent||"").trim()));let t=this.querySelector('script[type="text/pagefind-template"][data-template="placeholder"]');t&&(this.compiledPlaceholderTemplate=R((t.textContent||"").trim()))}getPlaceholder(){return this.compiledPlaceholderTemplate?this.compiledPlaceholderTemplate({}):Aa({})}render(){let e=[];this.querySelectorAll('script[type="text/pagefind-template"]').forEach(l=>{e.push(l)}),this.innerHTML="",e.forEach(l=>this.appendChild(l));let t=this.instance.generateId("pf-sb-input"),r=this.instance.generateId("pf-sb-results");this.containerEl=document.createElement("div"),this.containerEl.className="pf-searchbox",this.appendChild(this.containerEl);let i=document.createElement("div");if(i.className="pf-searchbox-input-wrapper",this.containerEl.appendChild(i),this.inputEl=document.createElement("input"),this.inputEl.id=t,this.inputEl.className="pf-searchbox-input",this.inputEl.type="text",this.inputEl.setAttribute("role","combobox"),this.inputEl.setAttribute("aria-autocomplete","list"),this.inputEl.setAttribute("aria-controls",r),this.inputEl.setAttribute("aria-expanded","false"),this.inputEl.setAttribute("autocomplete","off"),this.inputEl.setAttribute("autocapitalize","none"),this.inputEl.placeholder=this.placeholder,this.autofocus&&this.inputEl.setAttribute("autofocus","autofocus"),i.appendChild(this.inputEl),!this.hideShortcut&&this._keyBinding){this._shortcutEl=document.createElement("span"),this._shortcutEl.className="pf-trigger-shortcut",this._shortcutEl.setAttribute("aria-hidden","true");let l=xe(this._keyBinding);for(let o of l.keys){let c=document.createElement("span");c.className="pf-trigger-key",c.textContent=o,this._shortcutEl.appendChild(c)}i.appendChild(this._shortcutEl),this.inputEl.setAttribute("aria-keyshortcuts",l.aria)}this.dropdownEl=document.createElement("div"),this.dropdownEl.className="pf-searchbox-dropdown",this.containerEl.appendChild(this.dropdownEl);let a=this.instance?.translate("results_label")||"Search results";this.instance?.direction==="rtl"?this.setAttribute("dir","rtl"):this.removeAttribute("dir"),this.resultsEl=document.createElement("div"),this.resultsEl.id=r,this.resultsEl.className="pf-searchbox-results",this.resultsEl.setAttribute("role","listbox"),this.resultsEl.setAttribute("aria-label",a),this.dropdownEl.appendChild(this.resultsEl),this.statusEl=document.createElement("div"),this.statusEl.className="pf-searchbox-status",this.statusEl.hidden=!0,this.dropdownEl.appendChild(this.statusEl),this.showKeyboardHints&&(this.footerEl=document.createElement("div"),this.footerEl.className="pf-searchbox-footer",this.footerEl.setAttribute("aria-hidden","true"),this.dropdownEl.appendChild(this.footerEl),this.renderFooterHints()),this.setupEventHandlers()}renderFooterHints(){if(!this.footerEl)return;this.footerEl.innerHTML="";let e=this.instance?.translate("keyboard_navigate")||"navigate",t=this.instance?.translate("keyboard_select")||"select",r=this.instance?.translate("keyboard_close")||"close",i=document.createElement("div");i.className="pf-searchbox-footer-hint";let a=document.createElement("span");a.className="pf-searchbox-footer-key",a.textContent="\u2191",i.appendChild(a);let l=document.createElement("span");l.className="pf-searchbox-footer-key",l.textContent="\u2193",i.appendChild(l),i.appendChild(document.createTextNode(` ${e}`)),this.footerEl.appendChild(i);let o=document.createElement("div");o.className="pf-searchbox-footer-hint";let c=document.createElement("span");c.className="pf-searchbox-footer-key",c.textContent="\u21B5",o.appendChild(c),o.appendChild(document.createTextNode(` ${t}`)),this.footerEl.appendChild(o);let u=document.createElement("div");u.className="pf-searchbox-footer-hint";let d=document.createElement("span");d.className="pf-searchbox-footer-key",d.textContent="esc",u.appendChild(d),u.appendChild(document.createTextNode(` ${r}`)),this.footerEl.appendChild(u)}setupEventHandlers(){!this.inputEl||!this.resultsEl||(this.inputEl.addEventListener("input",async e=>{let t=e.target.value;if(this.searchTerm=t,!t||!t.trim()){this.closeDropdown(),this.results=[],this.instance?.triggerSearch("");return}this.openDropdown(),this.showLoadingState();let r=++this.searchID;await va(this.debounce),r===this.searchID&&this.instance?.triggerSearch(t)}),this.inputEl.addEventListener("keydown",e=>{switch(e.key){case"ArrowDown":e.preventDefault(),!this.isOpen&&this.inputEl?.value.trim()&&this.openDropdown(),this.isOpen&&this.results.length>0&&this.moveSelection(1);break;case"ArrowUp":e.preventDefault(),this.isOpen&&this.results.length>0&&this.moveSelection(-1);break;case"Enter":this.isOpen&&this.activeIndex>=0?(e.preventDefault(),this.activateCurrentSelection(e)):!this.isOpen&&this.inputEl?.value.trim()&&(e.preventDefault(),this.openDropdown(),this.results.length>0?(this.rerenderLoadedResults(),this.activeIndex=0,this.activeOptionOffset=0,this.updateSelectionUI()):this.instance?.triggerSearch(this.inputEl.value));break;case"Escape":this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.isOpen&&(e.preventDefault(),this.closeDropdown());break;case"Tab":this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.isOpen&&this.closeDropdown();break}}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad()}),this.resultsEl.addEventListener("click",e=>{e.target.closest("a")&&this.closeDropdown()}),this.resultsEl.addEventListener("mousemove",e=>{let t=e.target.closest("a");if(t){let r=this.getResultAndOffsetFromElement(t);r&&(r.resultIndex!==this.activeIndex||r.optionOffset!==this.activeOptionOffset)&&(this.activeIndex=r.resultIndex,this.activeOptionOffset=r.optionOffset,this.updateSelectionUI(!1))}}))}setupOutsideClickHandler(){this._documentClickHandler=e=>{this.isOpen&&!this.contains(e.target)&&this.closeDropdown()},document.addEventListener("click",this._documentClickHandler)}setupShortcutHandler(){this._keyBinding&&(this._shortcutKeyHandler=e=>{if(!this._keyBinding||!Be(this._keyBinding,e))return;let t=document.activeElement;t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)||(e.preventDefault(),this.inputEl?.focus())},document.addEventListener("keydown",this._shortcutKeyHandler))}openDropdown(){this.isOpen||!this.containerEl||!this.inputEl||(this.isOpen=!0,this.containerEl.classList.add("open"),this.inputEl.setAttribute("aria-expanded","true"))}closeDropdown(){!this.isOpen||!this.containerEl||!this.inputEl||(this.isOpen=!1,this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.containerEl.classList.remove("open"),this.inputEl.setAttribute("aria-expanded","false"),this.inputEl.removeAttribute("aria-activedescendant"),this.activeIndex=-1,this.activeOptionOffset=0,this.selectedEl=null)}showLoadingState(){if(!this.resultsEl||!this.statusEl)return;this.isLoading=!0,this.resultsEl.innerHTML="",this.selectedEl=null,this.resultsEl.setAttribute("aria-busy","true");let e=this.instance?.translate("searching",{SEARCH_TERM:this.searchTerm})||"Searching...";this.statusEl.textContent=e,this.statusEl.className="pf-searchbox-status pf-searchbox-loading",this.statusEl.hidden=!1}showEmptyState(){if(!this.resultsEl||!this.statusEl)return;this.resultsEl.innerHTML="",this.selectedEl=null,this.resultsEl.removeAttribute("aria-busy");let e=this.instance?.translate("zero_results",{SEARCH_TERM:this.searchTerm})||`No results for "${this.searchTerm}"`;this.statusEl.textContent=e,this.statusEl.className="pf-searchbox-status pf-searchbox-empty",this.statusEl.hidden=!1,this.instance?.announce("zero_results",{SEARCH_TERM:this.searchTerm},"assertive")}getOptionsForResult(e){return e.cachedOptions!==null?e.cachedOptions:!e.data||!e.placeholderEl?[]:e.placeholderEl.getAttribute("role")==="group"?Array.from(e.placeholderEl.querySelectorAll('[role="option"]')):e.placeholderEl.getAttribute("role")==="option"?[e.placeholderEl]:[]}moveSelection(e){let t=this.results.length;if(t===0)return;if(e<0){if(this.activeIndex===-1)return;if(this.activeOptionOffset>0){this.activeOptionOffset--,this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.updateSelectionUI(!0);return}let o=this.activeIndex-1;if(o<0){this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.activeIndex=-1,this.activeOptionOffset=0,this.updateSelectionUI(!0);return}let c=this.results[o];if(!c||!c.data)return;let u=this.getOptionsForResult(c);this.activeIndex=o,this.activeOptionOffset=Math.max(0,u.length-1),this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.updateSelectionUI(!0),this.preloadAhead(o,e);return}if(this.activeIndex===-1){if(this.results[0]&&!this.results[0].data){this.pendingNavigation+=e,this.results[0].load(),this.scheduleLoadingAnnouncement(),this.preloadAhead(0,e);return}this.activeIndex=0,this.activeOptionOffset=0,this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.updateSelectionUI(!0),this.preloadAhead(0,e);return}let r=this.results[this.activeIndex];if(!r?.data){r&&(this.pendingNavigation+=e,r.load(),this.scheduleLoadingAnnouncement(),this.preloadAhead(this.activeIndex,e));return}let i=this.getOptionsForResult(r);if(this.activeOptionOffset=t)return;let l=this.results[a];if(l&&!l.data){this.pendingNavigation+=e,l.load(),this.scheduleLoadingAnnouncement(),this.preloadAhead(a,e);return}this.activeIndex=a,this.activeOptionOffset=0,this.pendingNavigation=0,this.clearLoadingAnnouncement(),this.updateSelectionUI(!0),this.preloadAhead(a,e)}preloadAhead(e,t){let r=t>0?1:-1,i=Math.abs(this.pendingNavigation)+3;for(let a=1;a<=i;a++){let l=e+r*a;if(l>=0&&l{this.loadingAnnouncementTimeout=null,this.instance?.announce("loading",{},"polite")},800))}clearLoadingAnnouncement(){this.loadingAnnouncementTimeout&&(clearTimeout(this.loadingAnnouncementTimeout),this.loadingAnnouncementTimeout=null)}handleResultLoaded(){if(this.clearLoadingAnnouncement(),this.pendingNavigation===0){this.updateSelectionUI();return}let e=this.pendingNavigation>0?1:-1,t=this.activeIndex,r=this.activeOptionOffset;for(;this.pendingNavigation!==0;)if(e>0){let i=this.results[t];if(i?.data){let o=this.getOptionsForResult(i);if(r=this.results.length){this.pendingNavigation=0;break}let l=this.results[a];if(l?.data)t=a,r=0,this.pendingNavigation--;else{l&&(l.load(),this.scheduleLoadingAnnouncement(),this.preloadAhead(a,e));break}}else{if(r>0){r--,this.pendingNavigation++;continue}let i=t-1;if(i<0){this.pendingNavigation=0;break}let a=this.results[i];if(a?.data){let l=this.getOptionsForResult(a);t=i,r=Math.max(0,l.length-1),this.pendingNavigation++}else break}(t!==this.activeIndex||r!==this.activeOptionOffset)&&(this.activeIndex=t,this.activeOptionOffset=r,this.updateSelectionUI(!0))}updateSelectionUI(e=!1){if(!this.resultsEl||!this.inputEl)return;this.selectedEl&&(this.selectedEl.removeAttribute("data-pf-selected"),this.selectedEl.setAttribute("aria-selected","false"),this.selectedEl=null);let t=this.activeIndex>=0?this.results[this.activeIndex]:null,i=(t?this.getOptionsForResult(t):[])[this.activeOptionOffset];i?(i.setAttribute("data-pf-selected",""),i.setAttribute("aria-selected","true"),this.selectedEl=i,this.inputEl.setAttribute("aria-activedescendant",i.id),e&&this.scrollToCenter(i)):this.inputEl.removeAttribute("aria-activedescendant")}scrollToCenter(e){if(!this.resultsEl)return;let t=this.resultsEl,r=e.offsetTop,i=e.offsetHeight,a=t.clientHeight,l=r-a/2+i/2;t.scrollTo({top:l,behavior:"smooth"})}getResultAndOffsetFromElement(e){let t=e.closest("[data-pf-result-index]");if(!t)return null;let r=parseInt(t.getAttribute("data-pf-result-index"),10),i=parseInt(t.getAttribute("data-pf-option-offset")||"0",10);return Number.isNaN(r)||Number.isNaN(i)?null:{resultIndex:r,optionOffset:i}}activateCurrentSelection(e){if(this.activeIndex<0||this.activeIndex>=this.results.length)return;let t=this.results[this.activeIndex];if(!t||!t.data)return;let i=this.getOptionsForResult(t)[this.activeOptionOffset];!i||!i.href||(e.metaKey||e.ctrlKey||e.shiftKey?window.open(i.href,"_blank"):window.location.href=i.href,this.closeDropdown())}handleResults(e){this.isLoading=!1,this.resultsEl&&this.resultsEl.removeAttribute("aria-busy"),this.statusEl&&(this.statusEl.hidden=!0);for(let i of this.results)i.cleanup();if(this.pendingNavigation=0,this.clearLoadingAnnouncement(),!e.results||e.results.length===0){this.results=[],this.showEmptyState();return}let t=this.maxResults>0?e.results.slice(0,this.maxResults):e.results;this.resultsEl&&(this.resultsEl.innerHTML="",this.selectedEl=null);let r=this.getResultRenderer();this.results=t.map((i,a)=>{let l=this.getPlaceholder(),c=Ke(l)[0];this.resultsEl&&c&&this.resultsEl.appendChild(c);let u=new jt({rawResult:i,placeholderEl:c,renderFn:r,intersectionRoot:this.resultsEl,index:a,onLoad:()=>{this.results[a]===u&&this.handleResultLoaded()}});return u}),this.activeIndex=0,this.activeOptionOffset=0,this.updateSelectionUI(),this.announceResults()}buildTemplateData(e){let t=this.showSubResults?this.instance.getDisplaySubResults(e):[],r=this.instance.generateId("pf-sb-result");return{meta:e.meta||{},excerpt:e.excerpt||"",url:e.url||"",sub_results:t.map(i=>{let a=this.instance.generateId("pf-sb-result");return{title:i.title,url:i.url,excerpt:i.excerpt,aria:{result_id:a,title_id:`${a}-title`,excerpt_id:`${a}-excerpt`}}}),options:{show_sub_results:this.showSubResults},aria:{result_id:r,title_id:`${r}-title`,excerpt_id:`${r}-excerpt`}}}getResultRenderer(){if(this.resultTemplate)return this.resultTemplate;if(this.compiledResultTemplate){let e=this.compiledResultTemplate;return t=>{let r=this.buildTemplateData(t);return e(r)}}return e=>{let t=this.buildTemplateData(e);return ns(t)}}rerenderLoadedResults(){if(this.resultsEl){this.resultsEl.innerHTML="",this.selectedEl=null;for(let e=0;e{this.searchTerm&&this.searchTerm.trim()&&(this.openDropdown(),this.showLoadingState())},this),e.on("results",t=>{this.handleResults(t)},this),e.on("error",t=>{let r=t;this.isLoading=!1;let i=e.translate("error_search")||"Search failed";this.showError({message:r.message||i,details:r.bundlePath?`Bundle path: ${r.bundlePath}`:void 0}),e.announce("error_search",{},"assertive")},this),e.on("search",t=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.searchTerm=t)},this),e.on("translations",()=>{let t=this.inputEl?.value||"",r=this.isOpen;this.render(),this.inputEl&&t&&(this.inputEl.value=t),r&&(this.openDropdown(),this.results.length>0&&(this.rerenderLoadedResults(),this.updateSelectionUI()))},this)}cleanup(){this.clearLoadingAnnouncement();for(let e of this.results)e.cleanup();this.results=[],this.selectedEl=null,this._documentClickHandler&&(document.removeEventListener("click",this._documentClickHandler),this._documentClickHandler=null),this._shortcutKeyHandler&&(document.removeEventListener("keydown",this._shortcutKeyHandler),this._shortcutKeyHandler=null)}update(){this.readAttributes(),this._documentClickHandler&&(document.removeEventListener("click",this._documentClickHandler),this._documentClickHandler=null),this._shortcutKeyHandler&&(document.removeEventListener("keydown",this._shortcutKeyHandler),this._shortcutKeyHandler=null),this.render(),this.setupOutsideClickHandler(),this.setupShortcutHandler()}focus(){this.inputEl&&this.inputEl.focus()}};customElements.get("pagefind-searchbox")||customElements.define("pagefind-searchbox",Fe);ts("resolveUrl",(n,s)=>{let e=String(n??"");if(!e||/^[a-z][a-z0-9+.-]*:/i.test(e)||/^\/\//.test(e)||e.startsWith("/"))return e;try{return new URL(e,new URL(String(s??"/"),"https://p")).pathname}catch{return e}});typeof window<"u"&&(window.PagefindComponents=Bt);})(); diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json new file mode 100644 index 0000000..e730458 --- /dev/null +++ b/pagefind/pagefind-entry.json @@ -0,0 +1 @@ +{"version":"1.5.2","languages":{"en":{"hash":"en_bca57b166f","wasm":"en","page_count":33}},"include_characters":["_","‿","⁀","⁔","︳","︴","﹍","﹎","﹏","_"]} \ No newline at end of file diff --git a/pagefind/pagefind-highlight.js b/pagefind/pagefind-highlight.js new file mode 100644 index 0000000..0e538a5 --- /dev/null +++ b/pagefind/pagefind-highlight.js @@ -0,0 +1,1070 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + +// node_modules/mark.js/dist/mark.js +var require_mark = __commonJS({ + "node_modules/mark.js/dist/mark.js"(exports, module) { + (function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.Mark = factory(); + })(exports, (function() { + "use strict"; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + var classCallCheck = function(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + var createClass = /* @__PURE__ */ (function() { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + return function(Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + })(); + var _extends = Object.assign || function(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; + var DOMIterator = (function() { + function DOMIterator2(ctx) { + var iframes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + var exclude = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; + var iframesTimeout = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 5e3; + classCallCheck(this, DOMIterator2); + this.ctx = ctx; + this.iframes = iframes; + this.exclude = exclude; + this.iframesTimeout = iframesTimeout; + } + createClass(DOMIterator2, [{ + key: "getContexts", + value: function getContexts() { + var ctx = void 0, filteredCtx = []; + if (typeof this.ctx === "undefined" || !this.ctx) { + ctx = []; + } else if (NodeList.prototype.isPrototypeOf(this.ctx)) { + ctx = Array.prototype.slice.call(this.ctx); + } else if (Array.isArray(this.ctx)) { + ctx = this.ctx; + } else if (typeof this.ctx === "string") { + ctx = Array.prototype.slice.call(document.querySelectorAll(this.ctx)); + } else { + ctx = [this.ctx]; + } + ctx.forEach(function(ctx2) { + var isDescendant = filteredCtx.filter(function(contexts) { + return contexts.contains(ctx2); + }).length > 0; + if (filteredCtx.indexOf(ctx2) === -1 && !isDescendant) { + filteredCtx.push(ctx2); + } + }); + return filteredCtx; + } + }, { + key: "getIframeContents", + value: function getIframeContents(ifr, successFn) { + var errorFn = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() { + }; + var doc = void 0; + try { + var ifrWin = ifr.contentWindow; + doc = ifrWin.document; + if (!ifrWin || !doc) { + throw new Error("iframe inaccessible"); + } + } catch (e) { + errorFn(); + } + if (doc) { + successFn(doc); + } + } + }, { + key: "isIframeBlank", + value: function isIframeBlank(ifr) { + var bl = "about:blank", src = ifr.getAttribute("src").trim(), href = ifr.contentWindow.location.href; + return href === bl && src !== bl && src; + } + }, { + key: "observeIframeLoad", + value: function observeIframeLoad(ifr, successFn, errorFn) { + var _this = this; + var called = false, tout = null; + var listener = function listener2() { + if (called) { + return; + } + called = true; + clearTimeout(tout); + try { + if (!_this.isIframeBlank(ifr)) { + ifr.removeEventListener("load", listener2); + _this.getIframeContents(ifr, successFn, errorFn); + } + } catch (e) { + errorFn(); + } + }; + ifr.addEventListener("load", listener); + tout = setTimeout(listener, this.iframesTimeout); + } + }, { + key: "onIframeReady", + value: function onIframeReady(ifr, successFn, errorFn) { + try { + if (ifr.contentWindow.document.readyState === "complete") { + if (this.isIframeBlank(ifr)) { + this.observeIframeLoad(ifr, successFn, errorFn); + } else { + this.getIframeContents(ifr, successFn, errorFn); + } + } else { + this.observeIframeLoad(ifr, successFn, errorFn); + } + } catch (e) { + errorFn(); + } + } + }, { + key: "waitForIframes", + value: function waitForIframes(ctx, done) { + var _this2 = this; + var eachCalled = 0; + this.forEachIframe(ctx, function() { + return true; + }, function(ifr) { + eachCalled++; + _this2.waitForIframes(ifr.querySelector("html"), function() { + if (!--eachCalled) { + done(); + } + }); + }, function(handled) { + if (!handled) { + done(); + } + }); + } + }, { + key: "forEachIframe", + value: function forEachIframe(ctx, filter, each) { + var _this3 = this; + var end = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { + }; + var ifr = ctx.querySelectorAll("iframe"), open = ifr.length, handled = 0; + ifr = Array.prototype.slice.call(ifr); + var checkEnd = function checkEnd2() { + if (--open <= 0) { + end(handled); + } + }; + if (!open) { + checkEnd(); + } + ifr.forEach(function(ifr2) { + if (DOMIterator2.matches(ifr2, _this3.exclude)) { + checkEnd(); + } else { + _this3.onIframeReady(ifr2, function(con) { + if (filter(ifr2)) { + handled++; + each(con); + } + checkEnd(); + }, checkEnd); + } + }); + } + }, { + key: "createIterator", + value: function createIterator(ctx, whatToShow, filter) { + return document.createNodeIterator(ctx, whatToShow, filter, false); + } + }, { + key: "createInstanceOnIframe", + value: function createInstanceOnIframe(contents) { + return new DOMIterator2(contents.querySelector("html"), this.iframes); + } + }, { + key: "compareNodeIframe", + value: function compareNodeIframe(node, prevNode, ifr) { + var compCurr = node.compareDocumentPosition(ifr), prev = Node.DOCUMENT_POSITION_PRECEDING; + if (compCurr & prev) { + if (prevNode !== null) { + var compPrev = prevNode.compareDocumentPosition(ifr), after = Node.DOCUMENT_POSITION_FOLLOWING; + if (compPrev & after) { + return true; + } + } else { + return true; + } + } + return false; + } + }, { + key: "getIteratorNode", + value: function getIteratorNode(itr) { + var prevNode = itr.previousNode(); + var node = void 0; + if (prevNode === null) { + node = itr.nextNode(); + } else { + node = itr.nextNode() && itr.nextNode(); + } + return { + prevNode, + node + }; + } + }, { + key: "checkIframeFilter", + value: function checkIframeFilter(node, prevNode, currIfr, ifr) { + var key = false, handled = false; + ifr.forEach(function(ifrDict, i) { + if (ifrDict.val === currIfr) { + key = i; + handled = ifrDict.handled; + } + }); + if (this.compareNodeIframe(node, prevNode, currIfr)) { + if (key === false && !handled) { + ifr.push({ + val: currIfr, + handled: true + }); + } else if (key !== false && !handled) { + ifr[key].handled = true; + } + return true; + } + if (key === false) { + ifr.push({ + val: currIfr, + handled: false + }); + } + return false; + } + }, { + key: "handleOpenIframes", + value: function handleOpenIframes(ifr, whatToShow, eCb, fCb) { + var _this4 = this; + ifr.forEach(function(ifrDict) { + if (!ifrDict.handled) { + _this4.getIframeContents(ifrDict.val, function(con) { + _this4.createInstanceOnIframe(con).forEachNode(whatToShow, eCb, fCb); + }); + } + }); + } + }, { + key: "iterateThroughNodes", + value: function iterateThroughNodes(whatToShow, ctx, eachCb, filterCb, doneCb) { + var _this5 = this; + var itr = this.createIterator(ctx, whatToShow, filterCb); + var ifr = [], elements = [], node = void 0, prevNode = void 0, retrieveNodes = function retrieveNodes2() { + var _getIteratorNode = _this5.getIteratorNode(itr); + prevNode = _getIteratorNode.prevNode; + node = _getIteratorNode.node; + return node; + }; + while (retrieveNodes()) { + if (this.iframes) { + this.forEachIframe(ctx, function(currIfr) { + return _this5.checkIframeFilter(node, prevNode, currIfr, ifr); + }, function(con) { + _this5.createInstanceOnIframe(con).forEachNode(whatToShow, function(ifrNode) { + return elements.push(ifrNode); + }, filterCb); + }); + } + elements.push(node); + } + elements.forEach(function(node2) { + eachCb(node2); + }); + if (this.iframes) { + this.handleOpenIframes(ifr, whatToShow, eachCb, filterCb); + } + doneCb(); + } + }, { + key: "forEachNode", + value: function forEachNode(whatToShow, each, filter) { + var _this6 = this; + var done = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { + }; + var contexts = this.getContexts(); + var open = contexts.length; + if (!open) { + done(); + } + contexts.forEach(function(ctx) { + var ready = function ready2() { + _this6.iterateThroughNodes(whatToShow, ctx, each, filter, function() { + if (--open <= 0) { + done(); + } + }); + }; + if (_this6.iframes) { + _this6.waitForIframes(ctx, ready); + } else { + ready(); + } + }); + } + }], [{ + key: "matches", + value: function matches(element, selector) { + var selectors = typeof selector === "string" ? [selector] : selector, fn = element.matches || element.matchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector; + if (fn) { + var match = false; + selectors.every(function(sel) { + if (fn.call(element, sel)) { + match = true; + return false; + } + return true; + }); + return match; + } else { + return false; + } + } + }]); + return DOMIterator2; + })(); + var Mark$1 = (function() { + function Mark3(ctx) { + classCallCheck(this, Mark3); + this.ctx = ctx; + this.ie = false; + var ua = window.navigator.userAgent; + if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) { + this.ie = true; + } + } + createClass(Mark3, [{ + key: "log", + value: function log(msg) { + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "debug"; + var log2 = this.opt.log; + if (!this.opt.debug) { + return; + } + if ((typeof log2 === "undefined" ? "undefined" : _typeof(log2)) === "object" && typeof log2[level] === "function") { + log2[level]("mark.js: " + msg); + } + } + }, { + key: "escapeStr", + value: function escapeStr(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + }, { + key: "createRegExp", + value: function createRegExp(str) { + if (this.opt.wildcards !== "disabled") { + str = this.setupWildcardsRegExp(str); + } + str = this.escapeStr(str); + if (Object.keys(this.opt.synonyms).length) { + str = this.createSynonymsRegExp(str); + } + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.setupIgnoreJoinersRegExp(str); + } + if (this.opt.diacritics) { + str = this.createDiacriticsRegExp(str); + } + str = this.createMergedBlanksRegExp(str); + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.createJoinersRegExp(str); + } + if (this.opt.wildcards !== "disabled") { + str = this.createWildcardsRegExp(str); + } + str = this.createAccuracyRegExp(str); + return str; + } + }, { + key: "createSynonymsRegExp", + value: function createSynonymsRegExp(str) { + var syn = this.opt.synonyms, sens = this.opt.caseSensitive ? "" : "i", joinerPlaceholder = this.opt.ignoreJoiners || this.opt.ignorePunctuation.length ? "\0" : ""; + for (var index in syn) { + if (syn.hasOwnProperty(index)) { + var value = syn[index], k1 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(index) : this.escapeStr(index), k2 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(value) : this.escapeStr(value); + if (k1 !== "" && k2 !== "") { + str = str.replace(new RegExp("(" + this.escapeStr(k1) + "|" + this.escapeStr(k2) + ")", "gm" + sens), joinerPlaceholder + ("(" + this.processSynomyms(k1) + "|") + (this.processSynomyms(k2) + ")") + joinerPlaceholder); + } + } + } + return str; + } + }, { + key: "processSynomyms", + value: function processSynomyms(str) { + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.setupIgnoreJoinersRegExp(str); + } + return str; + } + }, { + key: "setupWildcardsRegExp", + value: function setupWildcardsRegExp(str) { + str = str.replace(/(?:\\)*\?/g, function(val) { + return val.charAt(0) === "\\" ? "?" : ""; + }); + return str.replace(/(?:\\)*\*/g, function(val) { + return val.charAt(0) === "\\" ? "*" : ""; + }); + } + }, { + key: "createWildcardsRegExp", + value: function createWildcardsRegExp(str) { + var spaces = this.opt.wildcards === "withSpaces"; + return str.replace(/\u0001/g, spaces ? "[\\S\\s]?" : "\\S?").replace(/\u0002/g, spaces ? "[\\S\\s]*?" : "\\S*"); + } + }, { + key: "setupIgnoreJoinersRegExp", + value: function setupIgnoreJoinersRegExp(str) { + return str.replace(/[^(|)\\]/g, function(val, indx, original) { + var nextChar = original.charAt(indx + 1); + if (/[(|)\\]/.test(nextChar) || nextChar === "") { + return val; + } else { + return val + "\0"; + } + }); + } + }, { + key: "createJoinersRegExp", + value: function createJoinersRegExp(str) { + var joiner = []; + var ignorePunctuation = this.opt.ignorePunctuation; + if (Array.isArray(ignorePunctuation) && ignorePunctuation.length) { + joiner.push(this.escapeStr(ignorePunctuation.join(""))); + } + if (this.opt.ignoreJoiners) { + joiner.push("\\u00ad\\u200b\\u200c\\u200d"); + } + return joiner.length ? str.split(/\u0000+/).join("[" + joiner.join("") + "]*") : str; + } + }, { + key: "createDiacriticsRegExp", + value: function createDiacriticsRegExp(str) { + var sens = this.opt.caseSensitive ? "" : "i", dct = this.opt.caseSensitive ? ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105", "A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010D", "C\xC7\u0106\u010C", "d\u0111\u010F", "D\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119", "E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012B", "I\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142", "L\u0141", "n\xF1\u0148\u0144", "N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014D", "O\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159", "R\u0158", "s\u0161\u015B\u0219\u015F", "S\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163", "T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016B", "U\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFF", "Y\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017A", "Z\u017D\u017B\u0179"] : ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010DC\xC7\u0106\u010C", "d\u0111\u010FD\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012BI\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142L\u0141", "n\xF1\u0148\u0144N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014DO\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159R\u0158", "s\u0161\u015B\u0219\u015FS\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016BU\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFFY\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017AZ\u017D\u017B\u0179"]; + var handled = []; + str.split("").forEach(function(ch) { + dct.every(function(dct2) { + if (dct2.indexOf(ch) !== -1) { + if (handled.indexOf(dct2) > -1) { + return false; + } + str = str.replace(new RegExp("[" + dct2 + "]", "gm" + sens), "[" + dct2 + "]"); + handled.push(dct2); + } + return true; + }); + }); + return str; + } + }, { + key: "createMergedBlanksRegExp", + value: function createMergedBlanksRegExp(str) { + return str.replace(/[\s]+/gmi, "[\\s]+"); + } + }, { + key: "createAccuracyRegExp", + value: function createAccuracyRegExp(str) { + var _this = this; + var chars = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xA1\xBF"; + var acc = this.opt.accuracy, val = typeof acc === "string" ? acc : acc.value, ls = typeof acc === "string" ? [] : acc.limiters, lsJoin = ""; + ls.forEach(function(limiter) { + lsJoin += "|" + _this.escapeStr(limiter); + }); + switch (val) { + case "partially": + default: + return "()(" + str + ")"; + case "complementary": + lsJoin = "\\s" + (lsJoin ? lsJoin : this.escapeStr(chars)); + return "()([^" + lsJoin + "]*" + str + "[^" + lsJoin + "]*)"; + case "exactly": + return "(^|\\s" + lsJoin + ")(" + str + ")(?=$|\\s" + lsJoin + ")"; + } + } + }, { + key: "getSeparatedKeywords", + value: function getSeparatedKeywords(sv) { + var _this2 = this; + var stack = []; + sv.forEach(function(kw) { + if (!_this2.opt.separateWordSearch) { + if (kw.trim() && stack.indexOf(kw) === -1) { + stack.push(kw); + } + } else { + kw.split(" ").forEach(function(kwSplitted) { + if (kwSplitted.trim() && stack.indexOf(kwSplitted) === -1) { + stack.push(kwSplitted); + } + }); + } + }); + return { + "keywords": stack.sort(function(a, b) { + return b.length - a.length; + }), + "length": stack.length + }; + } + }, { + key: "isNumeric", + value: function isNumeric(value) { + return Number(parseFloat(value)) == value; + } + }, { + key: "checkRanges", + value: function checkRanges(array) { + var _this3 = this; + if (!Array.isArray(array) || Object.prototype.toString.call(array[0]) !== "[object Object]") { + this.log("markRanges() will only accept an array of objects"); + this.opt.noMatch(array); + return []; + } + var stack = []; + var last = 0; + array.sort(function(a, b) { + return a.start - b.start; + }).forEach(function(item) { + var _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last), start = _callNoMatchOnInvalid.start, end = _callNoMatchOnInvalid.end, valid = _callNoMatchOnInvalid.valid; + if (valid) { + item.start = start; + item.length = end - start; + stack.push(item); + last = end; + } + }); + return stack; + } + }, { + key: "callNoMatchOnInvalidRanges", + value: function callNoMatchOnInvalidRanges(range, last) { + var start = void 0, end = void 0, valid = false; + if (range && typeof range.start !== "undefined") { + start = parseInt(range.start, 10); + end = start + parseInt(range.length, 10); + if (this.isNumeric(range.start) && this.isNumeric(range.length) && end - last > 0 && end - start > 0) { + valid = true; + } else { + this.log("Ignoring invalid or overlapping range: " + ("" + JSON.stringify(range))); + this.opt.noMatch(range); + } + } else { + this.log("Ignoring invalid range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } + return { + start, + end, + valid + }; + } + }, { + key: "checkWhitespaceRanges", + value: function checkWhitespaceRanges(range, originalLength, string) { + var end = void 0, valid = true, max = string.length, offset = originalLength - max, start = parseInt(range.start, 10) - offset; + start = start > max ? max : start; + end = start + parseInt(range.length, 10); + if (end > max) { + end = max; + this.log("End range automatically set to the max value of " + max); + } + if (start < 0 || end - start < 0 || start > max || end > max) { + valid = false; + this.log("Invalid range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } else if (string.substring(start, end).replace(/\s+/g, "") === "") { + valid = false; + this.log("Skipping whitespace only range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } + return { + start, + end, + valid + }; + } + }, { + key: "getTextNodes", + value: function getTextNodes(cb) { + var _this4 = this; + var val = "", nodes = []; + this.iterator.forEachNode(NodeFilter.SHOW_TEXT, function(node) { + nodes.push({ + start: val.length, + end: (val += node.textContent).length, + node + }); + }, function(node) { + if (_this4.matchesExclude(node.parentNode)) { + return NodeFilter.FILTER_REJECT; + } else { + return NodeFilter.FILTER_ACCEPT; + } + }, function() { + cb({ + value: val, + nodes + }); + }); + } + }, { + key: "matchesExclude", + value: function matchesExclude(el) { + return DOMIterator.matches(el, this.opt.exclude.concat(["script", "style", "title", "head", "html"])); + } + }, { + key: "wrapRangeInTextNode", + value: function wrapRangeInTextNode(node, start, end) { + var hEl = !this.opt.element ? "mark" : this.opt.element, startNode = node.splitText(start), ret = startNode.splitText(end - start); + var repl = document.createElement(hEl); + repl.setAttribute("data-markjs", "true"); + if (this.opt.className) { + repl.setAttribute("class", this.opt.className); + } + repl.textContent = startNode.textContent; + startNode.parentNode.replaceChild(repl, startNode); + return ret; + } + }, { + key: "wrapRangeInMappedTextNode", + value: function wrapRangeInMappedTextNode(dict, start, end, filterCb, eachCb) { + var _this5 = this; + dict.nodes.every(function(n, i) { + var sibl = dict.nodes[i + 1]; + if (typeof sibl === "undefined" || sibl.start > start) { + if (!filterCb(n.node)) { + return false; + } + var s = start - n.start, e = (end > n.end ? n.end : end) - n.start, startStr = dict.value.substr(0, n.start), endStr = dict.value.substr(e + n.start); + n.node = _this5.wrapRangeInTextNode(n.node, s, e); + dict.value = startStr + endStr; + dict.nodes.forEach(function(k, j) { + if (j >= i) { + if (dict.nodes[j].start > 0 && j !== i) { + dict.nodes[j].start -= e; + } + dict.nodes[j].end -= e; + } + }); + end -= e; + eachCb(n.node.previousSibling, n.start); + if (end > n.end) { + start = n.end; + } else { + return false; + } + } + return true; + }); + } + }, { + key: "wrapMatches", + value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) { + var _this6 = this; + var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; + this.getTextNodes(function(dict) { + dict.nodes.forEach(function(node) { + node = node.node; + var match = void 0; + while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== "") { + if (!filterCb(match[matchIdx], node)) { + continue; + } + var pos = match.index; + if (matchIdx !== 0) { + for (var i = 1; i < matchIdx; i++) { + pos += match[i].length; + } + } + node = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length); + eachCb(node.previousSibling); + regex.lastIndex = 0; + } + }); + endCb(); + }); + } + }, { + key: "wrapMatchesAcrossElements", + value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) { + var _this7 = this; + var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; + this.getTextNodes(function(dict) { + var match = void 0; + while ((match = regex.exec(dict.value)) !== null && match[matchIdx] !== "") { + var start = match.index; + if (matchIdx !== 0) { + for (var i = 1; i < matchIdx; i++) { + start += match[i].length; + } + } + var end = start + match[matchIdx].length; + _this7.wrapRangeInMappedTextNode(dict, start, end, function(node) { + return filterCb(match[matchIdx], node); + }, function(node, lastIndex) { + regex.lastIndex = lastIndex; + eachCb(node); + }); + } + endCb(); + }); + } + }, { + key: "wrapRangeFromIndex", + value: function wrapRangeFromIndex(ranges, filterCb, eachCb, endCb) { + var _this8 = this; + this.getTextNodes(function(dict) { + var originalLength = dict.value.length; + ranges.forEach(function(range, counter) { + var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value), start = _checkWhitespaceRange.start, end = _checkWhitespaceRange.end, valid = _checkWhitespaceRange.valid; + if (valid) { + _this8.wrapRangeInMappedTextNode(dict, start, end, function(node) { + return filterCb(node, range, dict.value.substring(start, end), counter); + }, function(node) { + eachCb(node, range); + }); + } + }); + endCb(); + }); + } + }, { + key: "unwrapMatches", + value: function unwrapMatches(node) { + var parent = node.parentNode; + var docFrag = document.createDocumentFragment(); + while (node.firstChild) { + docFrag.appendChild(node.removeChild(node.firstChild)); + } + parent.replaceChild(docFrag, node); + if (!this.ie) { + parent.normalize(); + } else { + this.normalizeTextNode(parent); + } + } + }, { + key: "normalizeTextNode", + value: function normalizeTextNode(node) { + if (!node) { + return; + } + if (node.nodeType === 3) { + while (node.nextSibling && node.nextSibling.nodeType === 3) { + node.nodeValue += node.nextSibling.nodeValue; + node.parentNode.removeChild(node.nextSibling); + } + } else { + this.normalizeTextNode(node.firstChild); + } + this.normalizeTextNode(node.nextSibling); + } + }, { + key: "markRegExp", + value: function markRegExp(regexp, opt) { + var _this9 = this; + this.opt = opt; + this.log('Searching with expression "' + regexp + '"'); + var totalMatches = 0, fn = "wrapMatches"; + var eachCb = function eachCb2(element) { + totalMatches++; + _this9.opt.each(element); + }; + if (this.opt.acrossElements) { + fn = "wrapMatchesAcrossElements"; + } + this[fn](regexp, this.opt.ignoreGroups, function(match, node) { + return _this9.opt.filter(node, match, totalMatches); + }, eachCb, function() { + if (totalMatches === 0) { + _this9.opt.noMatch(regexp); + } + _this9.opt.done(totalMatches); + }); + } + }, { + key: "mark", + value: function mark(sv, opt) { + var _this10 = this; + this.opt = opt; + var totalMatches = 0, fn = "wrapMatches"; + var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === "string" ? [sv] : sv), kwArr = _getSeparatedKeywords.keywords, kwArrLen = _getSeparatedKeywords.length, sens = this.opt.caseSensitive ? "" : "i", handler = function handler2(kw) { + var regex = new RegExp(_this10.createRegExp(kw), "gm" + sens), matches = 0; + _this10.log('Searching with expression "' + regex + '"'); + _this10[fn](regex, 1, function(term, node) { + return _this10.opt.filter(node, kw, totalMatches, matches); + }, function(element) { + matches++; + totalMatches++; + _this10.opt.each(element); + }, function() { + if (matches === 0) { + _this10.opt.noMatch(kw); + } + if (kwArr[kwArrLen - 1] === kw) { + _this10.opt.done(totalMatches); + } else { + handler2(kwArr[kwArr.indexOf(kw) + 1]); + } + }); + }; + if (this.opt.acrossElements) { + fn = "wrapMatchesAcrossElements"; + } + if (kwArrLen === 0) { + this.opt.done(totalMatches); + } else { + handler(kwArr[0]); + } + } + }, { + key: "markRanges", + value: function markRanges(rawRanges, opt) { + var _this11 = this; + this.opt = opt; + var totalMatches = 0, ranges = this.checkRanges(rawRanges); + if (ranges && ranges.length) { + this.log("Starting to mark with the following ranges: " + JSON.stringify(ranges)); + this.wrapRangeFromIndex(ranges, function(node, range, match, counter) { + return _this11.opt.filter(node, range, match, counter); + }, function(element, range) { + totalMatches++; + _this11.opt.each(element, range); + }, function() { + _this11.opt.done(totalMatches); + }); + } else { + this.opt.done(totalMatches); + } + } + }, { + key: "unmark", + value: function unmark(opt) { + var _this12 = this; + this.opt = opt; + var sel = this.opt.element ? this.opt.element : "*"; + sel += "[data-markjs]"; + if (this.opt.className) { + sel += "." + this.opt.className; + } + this.log('Removal selector "' + sel + '"'); + this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function(node) { + _this12.unwrapMatches(node); + }, function(node) { + var matchesSel = DOMIterator.matches(node, sel), matchesExclude = _this12.matchesExclude(node); + if (!matchesSel || matchesExclude) { + return NodeFilter.FILTER_REJECT; + } else { + return NodeFilter.FILTER_ACCEPT; + } + }, this.opt.done); + } + }, { + key: "opt", + set: function set$$1(val) { + this._opt = _extends({}, { + "element": "", + "className": "", + "exclude": [], + "iframes": false, + "iframesTimeout": 5e3, + "separateWordSearch": true, + "diacritics": true, + "synonyms": {}, + "accuracy": "partially", + "acrossElements": false, + "caseSensitive": false, + "ignoreJoiners": false, + "ignoreGroups": 0, + "ignorePunctuation": [], + "wildcards": "disabled", + "each": function each() { + }, + "noMatch": function noMatch() { + }, + "filter": function filter() { + return true; + }, + "done": function done() { + }, + "debug": false, + "log": window.console + }, val); + }, + get: function get$$1() { + return this._opt; + } + }, { + key: "iterator", + get: function get$$1() { + return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout); + } + }]); + return Mark3; + })(); + function Mark2(ctx) { + var _this = this; + var instance = new Mark$1(ctx); + this.mark = function(sv, opt) { + instance.mark(sv, opt); + return _this; + }; + this.markRegExp = function(sv, opt) { + instance.markRegExp(sv, opt); + return _this; + }; + this.markRanges = function(sv, opt) { + instance.markRanges(sv, opt); + return _this; + }; + this.unmark = function(opt) { + instance.unmark(opt); + return _this; + }; + return this; + } + return Mark2; + })); + } +}); + +// lib/highlight.ts +var import_mark = __toESM(require_mark(), 1); +var PagefindHighlight = class { + constructor(options = { + markContext: null, + highlightParam: "pagefind-highlight", + markOptions: { + className: "pagefind-highlight", + exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] + }, + addStyles: true + }) { + __publicField(this, "highlightParam"); + __publicField(this, "markContext"); + __publicField(this, "markOptions"); + __publicField(this, "addStyles"); + var _a, _b; + const { highlightParam, markContext, markOptions, addStyles } = options; + this.highlightParam = highlightParam ?? "pagefind-highlight"; + this.addStyles = addStyles ?? true; + this.markContext = markContext !== void 0 ? markContext : null; + this.markOptions = markOptions !== void 0 ? markOptions : { + className: "pagefind-highlight", + exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] + }; + (_a = this.markOptions).className ?? (_a.className = "pagefind__highlight"); + (_b = this.markOptions).exclude ?? (_b.exclude = [ + "[data-pagefind-ignore]", + "[data-pagefind-ignore] *" + ]); + this.markOptions.separateWordSearch = false; + this.highlight(); + } + getHighlightParams(paramName) { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.getAll(paramName); + } + // Inline styles might be too hard to override + addHighlightStyles(className) { + if (!className) return; + const styleElement = document.createElement("style"); + styleElement.innerText = `:where(.${className}) { background-color: yellow; color: black; }`; + document.head.appendChild(styleElement); + } + createMarkInstance() { + if (this.markContext) { + return new import_mark.default(this.markContext); + } + const pagefindBody = document.querySelectorAll("[data-pagefind-body]"); + if (pagefindBody.length !== 0) { + return new import_mark.default(pagefindBody); + } else { + return new import_mark.default(document.body); + } + } + markText(instance, text) { + instance.mark(text, this.markOptions); + } + highlight() { + const params = this.getHighlightParams(this.highlightParam); + if (!params || params.length === 0) return; + this.addStyles && this.addHighlightStyles(this.markOptions.className); + const markInstance = this.createMarkInstance(); + this.markText(markInstance, params); + } +}; +window.PagefindHighlight = PagefindHighlight; +export { + PagefindHighlight as default +}; +/*! Bundled license information: + +mark.js/dist/mark.js: + (*!*************************************************** + * mark.js v8.11.1 + * https://markjs.io/ + * Copyright (c) 2014–2018, Julian Kühnel + * Released under the MIT license https://git.io/vwTVl + *****************************************************) +*/ diff --git a/pagefind/pagefind-modular-ui.css b/pagefind/pagefind-modular-ui.css new file mode 100644 index 0000000..9c6793e --- /dev/null +++ b/pagefind/pagefind-modular-ui.css @@ -0,0 +1,214 @@ +:root { + --pagefind-ui-scale: 0.8; + --pagefind-ui-primary: #034AD8; + --pagefind-ui-fade: #707070; + --pagefind-ui-text: #393939; + --pagefind-ui-background: #ffffff; + --pagefind-ui-border: #eeeeee; + --pagefind-ui-tag: #eeeeee; + --pagefind-ui-border-width: 2px; + --pagefind-ui-border-radius: 8px; + --pagefind-ui-image-border-radius: 8px; + --pagefind-ui-image-box-ratio: 3 / 2; + --pagefind-ui-font: system, -apple-system, ".SFNSText-Regular", + "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", + "Lucida Grande", sans-serif; +} + +[data-pfmod-hidden] { + display: none !important; +} + +[data-pfmod-suppressed] { + opacity: 0 !important; + pointer-events: none !important; +} + +[data-pfmod-sr-hidden] { + -webkit-clip: rect(0 0 0 0) !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(100%) !important; + clip-path: inset(100%) !important; + height: 1px !important; + overflow: hidden !important; + overflow: clip !important; + position: absolute !important; + white-space: nowrap !important; + width: 1px !important; +} + +[data-pfmod-loading] { + color: var(--pagefind-ui-text); + background-color: var(--pagefind-ui-text); + border-radius: var(--pagefind-ui-border-radius); + opacity: 0.1; + pointer-events: none; +} + +/* Input */ + +.pagefind-modular-input-wrapper { + position: relative; +} + +.pagefind-modular-input-wrapper::before { + background-color: var(--pagefind-ui-text); + width: calc(18px * var(--pagefind-ui-scale)); + height: calc(18px * var(--pagefind-ui-scale)); + top: calc(23px * var(--pagefind-ui-scale)); + left: calc(20px * var(--pagefind-ui-scale)); + content: ""; + position: absolute; + display: block; + opacity: 0.7; + -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + -webkit-mask-size: 100%; + mask-size: 100%; + z-index: 9; + pointer-events: none; +} + +.pagefind-modular-input { + height: calc(64px * var(--pagefind-ui-scale)); + padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: var(--pagefind-ui-border-radius); + font-size: calc(21px * var(--pagefind-ui-scale)); + position: relative; + appearance: none; + -webkit-appearance: none; + display: flex; + width: 100%; + box-sizing: border-box; + font-weight: 700; +} + +.pagefind-modular-input::placeholder { + opacity: 0.2; +} + +.pagefind-modular-input-clear { + position: absolute; + top: calc(2px * var(--pagefind-ui-scale)); + right: calc(2px * var(--pagefind-ui-scale)); + height: calc(60px * var(--pagefind-ui-scale)); + border-radius: var(--pagefind-ui-border-radius); + padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale)); + color: var(--pagefind-ui-text); + font-size: calc(14px * var(--pagefind-ui-scale)); + cursor: pointer; + background-color: var(--pagefind-ui-background); + border: none; + appearance: none; +} + +/* ResultList */ + +.pagefind-modular-list-result { + list-style-type: none; + display: flex; + align-items: flex-start; + gap: min(calc(40px * var(--pagefind-ui-scale)), 3%); + padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale)); + border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-result:last-of-type { + border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-thumb { + width: min(30%, + calc((30% - (100px * var(--pagefind-ui-scale))) * 100000)); + max-width: calc(120px * var(--pagefind-ui-scale)); + margin-top: calc(10px * var(--pagefind-ui-scale)); + aspect-ratio: var(--pagefind-ui-image-box-ratio); + position: relative; +} + +.pagefind-modular-list-image { + display: block; + position: absolute; + left: 50%; + transform: translateX(-50%); + font-size: 0; + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; + border-radius: var(--pagefind-ui-image-border-radius); +} + +.pagefind-modular-list-inner { + flex: 1; + display: flex; + flex-direction: column; + align-items: flex-start; + margin-top: calc(10px * var(--pagefind-ui-scale)); +} + +.pagefind-modular-list-title { + display: inline-block; + font-weight: 700; + font-size: calc(21px * var(--pagefind-ui-scale)); + margin-top: 0; + margin-bottom: 0; +} + +.pagefind-modular-list-link { + color: var(--pagefind-ui-text); + text-decoration: none; +} + +.pagefind-modular-list-link:hover { + text-decoration: underline; +} + +.pagefind-modular-list-excerpt { + display: inline-block; + font-weight: 400; + font-size: calc(16px * var(--pagefind-ui-scale)); + margin-top: calc(4px * var(--pagefind-ui-scale)); + margin-bottom: 0; + min-width: calc(250px * var(--pagefind-ui-scale)); +} + +/* FilterPills */ + +.pagefind-modular-filter-pills-wrapper { + overflow-x: scroll; + padding: 15px 0; +} + +.pagefind-modular-filter-pills { + display: flex; + gap: 6px; +} + +.pagefind-modular-filter-pill { + display: flex; + justify-content: center; + align-items: center; + border: none; + appearance: none; + padding: 0 calc(24px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + color: var(--pagefind-ui-fade); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: calc(25px * var(--pagefind-ui-scale)); + font-size: calc(18px * var(--pagefind-ui-scale)); + height: calc(50px * var(--pagefind-ui-scale)); + cursor: pointer; + white-space: nowrap; +} + +.pagefind-modular-filter-pill:hover { + border-color: var(--pagefind-ui-primary); +} + +.pagefind-modular-filter-pill[aria-pressed="true"] { + border-color: var(--pagefind-ui-primary); + color: var(--pagefind-ui-primary); +} \ No newline at end of file diff --git a/pagefind/pagefind-modular-ui.js b/pagefind/pagefind-modular-ui.js new file mode 100644 index 0000000..6caacd6 --- /dev/null +++ b/pagefind/pagefind-modular-ui.js @@ -0,0 +1,8 @@ +(()=>{var w=Object.defineProperty;var b=(i,e)=>{for(var t in e)w(i,t,{get:e[t],enumerable:!0})};var f={};b(f,{FilterPills:()=>c,Input:()=>a,Instance:()=>p,ResultList:()=>o,Summary:()=>h});var r=class i{constructor(e){this.element=document.createElement(e)}id(e){return this.element.id=e,this}class(e){return this.element.classList.add(e),this}attrs(e){for(let[t,s]of Object.entries(e))this.element.setAttribute(t,s);return this}text(e){return this.element.innerText=e,this}html(e){return this.element.innerHTML=e,this}handle(e,t){return this.element.addEventListener(e,t),this}addTo(e){return e instanceof i?e.element.appendChild(this.element):e.appendChild(this.element),this.element}};var T=async(i=100)=>new Promise(e=>setTimeout(e,i)),a=class{constructor(e={}){if(this.inputEl=null,this.clearEl=null,this.instance=null,this.searchID=0,this.debounceTimeoutMs=e.debounceTimeoutMs??300,e.inputElement){if(e.containerElement){console.warn("[Pagefind Input component]: inputElement and containerElement both supplied. Ignoring the container option.");return}this.initExisting(e.inputElement)}else if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Input component]: No selector supplied for containerElement or inputElement");return}this.inputEl.addEventListener("input",async t=>{if(this.instance&&typeof t?.target?.value=="string"){this.updateState(t.target.value);let s=++this.searchID;if(await T(this.debounceTimeoutMs),s!==this.searchID)return null;this.instance?.triggerSearch(t.target.value)}}),this.inputEl.addEventListener("keydown",t=>{t.key==="Escape"&&(++this.searchID,this.inputEl.value="",this.instance?.triggerSearch(""),this.updateState("")),t.key==="Enter"&&t.preventDefault()}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad()})}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No container found for ${e} selector`);return}if(t.tagName==="INPUT")console.warn(`[Pagefind Input component]: Encountered input element for ${e} when a container was expected`),console.warn("[Pagefind Input component]: Treating containerElement option as inputElement and proceeding"),this.initExisting(e);else{t.innerHTML="";let s=0;for(;document.querySelector(`#pfmod-input-${s}`);)s+=1;let n=new r("form").class("pagefind-modular-input-wrapper").attrs({role:"search","aria-label":"Search this site",action:"javascript:void(0);"});new r("label").attrs({for:`pfmod-input-${s}`,"data-pfmod-sr-hidden":"true"}).text("Search this site").addTo(n),this.inputEl=new r("input").id(`pfmod-input-${s}`).class("pagefind-modular-input").attrs({autocapitalize:"none",enterkeyhint:"search"}).addTo(n),this.clearEl=new r("button").class("pagefind-modular-input-clear").attrs({"data-pfmod-suppressed":"true"}).text("Clear").handle("click",()=>{this.inputEl.value="",this.instance.triggerSearch(""),this.updateState("")}).addTo(n),n.addTo(t)}}initExisting(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No input element found for ${e} selector`);return}if(t.tagName!=="INPUT"){console.error(`[Pagefind Input component]: Expected ${e} to be an element`);return}this.inputEl=t}updateState(e){this.clearEl&&(e&&e?.length?this.clearEl.removeAttribute("data-pfmod-suppressed"):this.clearEl.setAttribute("data-pfmod-suppressed","true"))}register(e){this.instance=e,this.instance.on("search",(t,s)=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.updateState(t))})}focus(){this.inputEl&&this.inputEl.focus()}};var g=i=>{if(i instanceof Element)return[i];if(Array.isArray(i)&&i.every(e=>e instanceof Element))return i;if(typeof i=="string"||i instanceof String){let e=document.createElement("div");return e.innerHTML=i,[...e.childNodes]}else return console.error(`[Pagefind ResultList component]: Expected template function to return an HTML element or string, got ${typeof i}`),[]},v=()=>{let i=(e=30)=>". ".repeat(Math.floor(10+Math.random()*e));return`
  • +
    +
    +

    ${i(30)}

    +

    ${i(40)}

    +
    +
  • `},y=(i,e)=>{let t=new r("li").class("pagefind-modular-list-result");if(e){let l=new r("div").class("pagefind-modular-list-thumb").addTo(t);i?.meta?.image&&new r("img").class("pagefind-modular-list-image").attrs({src:i.meta.image,alt:i.meta.image_alt||i.meta.title}).addTo(l)}let s=new r("div").class("pagefind-modular-list-inner").addTo(t),n=new r("p").class("pagefind-modular-list-title").addTo(s);return new r("a").class("pagefind-modular-list-link").text(i.meta?.title).attrs({href:i.meta?.url||i.url}).addTo(n),new r("p").class("pagefind-modular-list-excerpt").html(i.excerpt).addTo(s),t.element},E=i=>{if(!(i instanceof HTMLElement))return null;let e=window.getComputedStyle(i).overflowY;return e!=="visible"&&e!=="hidden"?i:E(i.parentNode)},d=class{constructor(e={}){this.rawResult=e.result,this.placeholderNodes=e.placeholderNodes,this.resultFn=e.resultFn,this.intersectionEl=e.intersectionEl,this.showImages=e.showImages,this.result=null,this.waitForIntersection()}waitForIntersection(){if(!this.placeholderNodes?.length)return;let e={root:this.intersectionEl,rootMargin:"0px",threshold:.01};new IntersectionObserver((s,n)=>{this.result===null&&s?.[0]?.isIntersecting&&(this.load(),n.disconnect())},e).observe(this.placeholderNodes[0])}async load(){if(!this.placeholderNodes?.length)return;this.result=await this.rawResult.data();let e=this.resultFn(this.result,this.showImages),t=g(e);for(;this.placeholderNodes.length>1;)this.placeholderNodes.pop().remove();this.placeholderNodes[0].replaceWith(...t)}},o=class{constructor(e){if(this.intersectionEl=document.body,this.containerEl=null,this.results=[],this.placeholderTemplate=e.placeholderTemplate??v,this.resultTemplate=e.resultTemplate??y,this.showImages=e.showImages??!0,e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind ResultList component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind ResultList component]: No container found for ${e} selector`);return}this.containerEl=t}append(e){for(let t of e)this.containerEl.appendChild(t)}register(e){e.on("results",t=>{this.containerEl&&(this.containerEl.innerHTML="",this.intersectionEl=E(this.containerEl),this.results=t.results.map(s=>{let n=g(this.placeholderTemplate());return this.append(n),new d({result:s,placeholderNodes:n,resultFn:this.resultTemplate,intersectionEl:this.intersectionEl,showImages:this.showImages})}))}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerHTML="")})}};var h=class{constructor(e={}){if(this.containerEl=null,this.defaultMessage=e.defaultMessage??"",this.term="",e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Summary component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Summary component]: No container found for ${e} selector`);return}this.containerEl=t,this.containerEl.innerText=this.defaultMessage}register(e){e.on("search",(t,s)=>{this.term=t}),e.on("results",t=>{if(!this.containerEl||!t)return;if(!this.term){this.containerEl.innerText=this.defaultMessage;return}let s=t?.results?.length??0;this.containerEl.innerText=`${s} result${s===1?"":"s"} for ${this.term}`}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerText=`Searching for ${this.term}...`)})}};var c=class{constructor(e={}){if(this.instance=null,this.wrapper=null,this.pillContainer=null,this.available={},this.selected=["All"],this.total=0,this.filterMemo="",this.filter=e.filter,this.ordering=e.ordering??null,this.alwaysShow=e.alwaysShow??!1,this.selectMultiple=e.selectMultiple??!1,!this.filter?.length){console.error("[Pagefind FilterPills component]: No filter option supplied, nothing to display");return}if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind FilterPills component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind FilterPills component]: No container found for ${e} selector`);return}t.innerHTML="";let s=`pagefind_modular_filter_pills_${this.filter}`,n=new r("div").class("pagefind-modular-filter-pills-wrapper").attrs({role:"group","aria-labelledby":s});this.alwaysShow||n.attrs({"data-pfmod-hidden":!0}),new r("div").id(s).class("pagefind-modular-filter-pills-label").attrs({"data-pfmod-sr-hidden":!0}).text(`Filter results by ${this.filter}`).addTo(n),this.pillContainer=new r("div").class("pagefind-modular-filter-pills").addTo(n),this.wrapper=n.addTo(t)}update(){let e=this.available.map(t=>t[0]).join("~");e==this.filterMemo?this.updateExisting():(this.renderNew(),this.filterMemo=e)}pushFilters(){let e=this.selected.filter(t=>t!=="All");this.instance.triggerFilter(this.filter,e)}pillInner(e,t){return this.total?`${e} (${t})`:`${e}`}renderNew(){this.available.forEach(([e,t])=>{new r("button").class("pagefind-modular-filter-pill").html(this.pillInner(e,t)).attrs({"aria-pressed":this.selected.includes(e),type:"button"}).handle("click",()=>{e==="All"?this.selected=["All"]:this.selected.includes(e)?this.selected=this.selected.filter(s=>s!==e):this.selectMultiple?this.selected.push(e):this.selected=[e],this.selected?.length?this.selected?.length>1&&(this.selected=this.selected.filter(s=>s!=="All")):this.selected=["All"],this.update(),this.pushFilters()}).addTo(this.pillContainer)})}updateExisting(){let e=[...this.pillContainer.childNodes];this.available.forEach(([t,s],n)=>{e[n].innerHTML=this.pillInner(t,s),e[n].setAttribute("aria-pressed",this.selected.includes(t))})}register(e){this.instance=e,this.instance.on("filters",t=>{if(!this.pillContainer)return;this.selectMultiple?t=t.available:t=t.total;let s=t[this.filter];if(!s){console.warn(`[Pagefind FilterPills component]: No possible values found for the ${this.filter} filter`);return}this.available=Object.entries(s),Array.isArray(this.ordering)?this.available.sort((n,l)=>{let m=this.ordering.indexOf(n[0]),_=this.ordering.indexOf(l[0]);return(m===-1?1/0:m)-(_===-1?1/0:_)}):this.available.sort((n,l)=>n[0].localeCompare(l[0])),this.available.unshift(["All",this.total]),this.update()}),e.on("results",t=>{this.pillContainer&&(this.total=t?.unfilteredResultCount||0,this.available?.[0]?.[0]==="All"&&(this.available[0][1]=this.total),this.total||this.alwaysShow?this.wrapper.removeAttribute("data-pfmod-hidden"):this.wrapper.setAttribute("data-pfmod-hidden","true"),this.update())})}};var P=async(i=50)=>await new Promise(e=>setTimeout(e,i)),u;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(u=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?modular-ui.js.*$/)[1])}catch{u="/pagefind/"}var p=class{constructor(e={}){this.__pagefind__=null,this.__initializing__=null,this.__searchID__=0,this.__hooks__={search:[],filters:[],loading:[],results:[]},this.components=[],this.searchTerm="",this.searchFilters={},this.searchResult={},this.availableFilters=null,this.totalFilters=null,this.options={bundlePath:e.bundlePath??u,mergeIndex:e.mergeIndex??[]},delete e.bundlePath,delete e.resetStyles,delete e.processResult,delete e.processTerm,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,this.pagefindOptions=e}add(e){e?.register?.(this),this.components.push(e)}on(e,t){if(!this.__hooks__[e]){let s=Object.keys(this.__hooks__).join(", ");console.error(`[Pagefind Composable]: Unknown event type ${e}. Supported events: [${s}]`);return}if(typeof t!="function"){console.error(`[Pagefind Composable]: Expected callback to be a function, received ${typeof t}`);return}this.__hooks__[e].push(t)}triggerLoad(){this.__load__()}triggerSearch(e){this.searchTerm=e,this.__dispatch__("search",e,this.searchFilters),this.__search__(e,this.searchFilters)}triggerSearchWithFilters(e,t){this.searchTerm=e,this.searchFilters=t,this.__dispatch__("search",e,t),this.__search__(e,t)}triggerFilters(e){this.searchFilters=e,this.__dispatch__("search",this.searchTerm,e),this.__search__(this.searchTerm,e)}triggerFilter(e,t){this.searchFilters=this.searchFilters||{},this.searchFilters[e]=t,this.__dispatch__("search",this.searchTerm,this.searchFilters),this.__search__(this.searchTerm,this.searchFilters)}__dispatch__(e,...t){this.__hooks__[e]?.forEach(s=>s?.(...t))}async __clear__(){this.__dispatch__("results",{results:[],unfilteredTotalCount:0}),this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}async __search__(e,t){this.__dispatch__("loading"),await this.__load__();let s=++this.__searchID__;if(!e||!e.length)return this.__clear__();let n=await this.__pagefind__.search(e,{filters:t});n&&this.__searchID__===s&&(n.filters&&Object.keys(n.filters)?.length&&(this.availableFilters=n.filters,this.totalFilters=n.totalFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})),this.searchResult=n,this.__dispatch__("results",this.searchResult))}async __load__(){if(this.__initializing__){for(;!this.__pagefind__;)await P(50);return}if(this.__initializing__=!0,!this.__pagefind__){let e;try{e=await import(`${this.options.bundlePath}pagefind.js`)}catch(t){console.error(t),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindComposable Instance"].join(` +`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location")}await e.options(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let s=t.bundlePath;delete t.bundlePath,await e.mergeIndex(s,t)}this.__pagefind__=e}this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}};window.PagefindModularUI=f;})(); diff --git a/pagefind/pagefind-ui.css b/pagefind/pagefind-ui.css new file mode 100644 index 0000000..c17a1d4 --- /dev/null +++ b/pagefind/pagefind-ui.css @@ -0,0 +1 @@ +.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf{display:flex;flex-direction:column;padding-left:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf:first-of-type{padding-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{font-size:.9em;position:relative}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:before{content:"\2937 ";position:absolute;top:0;right:calc(100% + .1em)}.pagefind-ui__result-thumb.svelte-4xnkmf.svelte-4xnkmf{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-4xnkmf.svelte-4xnkmf{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-4xnkmf.svelte-4xnkmf{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-4xnkmf.svelte-4xnkmf{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-4xnkmf.svelte-4xnkmf{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert;outline:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;appearance:revert}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable=true]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif}.pagefind-ui.svelte-e9gkc3{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-e9gkc3{display:none!important}.pagefind-ui__suppressed.svelte-e9gkc3{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-e9gkc3{position:relative}.pagefind-ui__form.svelte-e9gkc3:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-e9gkc3{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-e9gkc3::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-e9gkc3{position:absolute;top:calc(3px * var(--pagefind-ui-scale));right:calc(3px * var(--pagefind-ui-scale));height:calc(58px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-e9gkc3{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-e9gkc3{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-e9gkc3{padding:0}.pagefind-ui__message.svelte-e9gkc3{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-e9gkc3{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-e9gkc3:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)} diff --git a/pagefind/pagefind-ui.js b/pagefind/pagefind-ui.js new file mode 100644 index 0000000..6a8a4d7 --- /dev/null +++ b/pagefind/pagefind-ui.js @@ -0,0 +1,2 @@ +(()=>{var Os=Object.defineProperty;var x=(l,e)=>{for(var t in e)Os(l,t,{get:e[t],enumerable:!0})};function R(){}function Bt(l){return l()}function ct(){return Object.create(null)}function H(l){l.forEach(Bt)}function ut(l){return typeof l=="function"}function O(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}var ot;function ge(l,e){return l===e?!0:(ot||(ot=document.createElement("a")),ot.href=e,l===ot.href)}function Wl(l){return Object.keys(l).length===0}var ht=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;var Ct=class l{_listeners="WeakMap"in ht?new WeakMap:void 0;_observer=void 0;options;constructor(e){this.options=e}observe(e,t){return this._listeners.set(e,t),this._getObserver().observe(e,this.options),()=>{this._listeners.delete(e),this._observer.unobserve(e)}}_getObserver(){return this._observer??(this._observer=new ResizeObserver(e=>{for(let t of e)l.entries.set(t.target,t),this._listeners.get(t.target)?.(t)}))}};Ct.entries="WeakMap"in ht?new WeakMap:void 0;var Sl=!1;function Vl(){Sl=!0}function Dl(){Sl=!1}function b(l,e){l.appendChild(e)}function h(l,e,t){l.insertBefore(e,t||null)}function B(l){l.parentNode&&l.parentNode.removeChild(l)}function $(l,e){for(let t=0;tl.removeEventListener(e,t,s)}function _(l,e,t){t==null?l.removeAttribute(e):l.getAttribute(e)!==t&&l.setAttribute(e,t)}function Tl(l){return Array.from(l.childNodes)}function W(l,e){e=""+e,l.data!==e&&(l.data=e)}function oe(l,e){l.value=e??""}function z(l,e,t){l.classList.toggle(e,!!t)}var It=class{is_svg=!1;e=void 0;n=void 0;t=void 0;a=void 0;constructor(e=!1){this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,t,s=null){this.e||(this.is_svg?this.e=Ps(t.nodeName):this.e=F(t.nodeType===11?"TEMPLATE":t.nodeName),this.t=t.tagName!=="TEMPLATE"?t:t.content,this.c(e)),this.i(s)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let t=0;t{e[t.slot||"default"]=!0}),e}var te;function j(l){te=l}function Ut(){if(!te)throw new Error("Function called outside component initialization");return te}function xt(l){Ut().$$.on_mount.push(l)}function yt(l){Ut().$$.on_destroy.push(l)}var se=[];var Ce=[],ue=[],Gt=[],sa=Promise.resolve(),Nt=!1;function Ml(){Nt||(Nt=!0,sa.then(dt))}function Ae(l){ue.push(l)}function Yl(l){Gt.push(l)}var Zt=new Set,ce=0;function dt(){if(ce!==0)return;let l=te;do{try{for(;cel.indexOf(s)===-1?e.push(s):t.push(s)),t.forEach(s=>s()),ue=e}var At=new Set,ae;function re(){ae={r:0,c:[],p:ae}}function ie(){ae.r||H(ae.c),ae=ae.p}function k(l,e){l&&l.i&&(At.delete(l),l.i(e))}function D(l,e,t,s){if(l&&l.o){if(At.has(l))return;At.add(l),ae.c.push(()=>{At.delete(l),s&&(t&&l.d(1),s())}),l.o(e)}else s&&s()}function V(l){return l?.length!==void 0?l:Array.from(l)}function zl(l,e){D(l,1,1,()=>{e.delete(l.key)})}function Jl(l,e,t,s,a,r,i,n,g,C,u,A){let c=l.length,d=r.length,o=c,I={};for(;o--;)I[l[o].key]=o;let m=[],f=new Map,p=new Map,U=[];for(o=d;o--;){let N=A(a,r,o),S=t(N),E=i.get(S);E?s&&U.push(()=>E.p(N,e)):(E=C(S,N),E.c()),f.set(S,m[o]=E),S in I&&p.set(S,Math.abs(o-I[S]))}let y=new Set,q=new Set;function J(N){k(N,1),N.m(n,u),i.set(N.key,N),u=N.first,d--}for(;c&&d;){let N=m[d-1],S=l[c-1],E=N.key,v=S.key;N===S?(u=N.first,c--,d--):f.has(v)?!i.has(E)||y.has(E)?J(N):q.has(v)?c--:p.get(E)>p.get(v)?(q.add(E),J(N)):(y.add(v),c--):(g(S,i),c--)}for(;c--;){let N=l[c];f.has(N.key)||g(N,i)}for(;d;)J(m[d-1]);return H(U),m}var ra=["allowfullscreen","allowpaymentrequest","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"],ia=new Set([...ra]);function Ol(l,e,t){let s=l.$$.props[e];s!==void 0&&(l.$$.bound[s]=t,t(l.$$.ctx[s]))}function _t(l){l&&l.c()}function _e(l,e,t){let{fragment:s,after_update:a}=l.$$;s&&s.m(e,t),Ae(()=>{let r=l.$$.on_mount.map(Bt).filter(ut);l.$$.on_destroy?l.$$.on_destroy.push(...r):H(r),l.$$.on_mount=[]}),a.forEach(Ae)}function Qe(l,e){let t=l.$$;t.fragment!==null&&(wl(t.after_update),H(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function ga(l,e){l.$$.dirty[0]===-1&&(se.push(l),Ml(),l.$$.dirty.fill(0)),l.$$.dirty[e/31|0]|=1<{let o=d.length?d[0]:c;return C.ctx&&a(C.ctx[A],C.ctx[A]=o)&&(!C.skip_bound&&C.bound[A]&&C.bound[A](o),u&&ga(l,A)),c}):[],C.update(),u=!0,H(C.before_update),C.fragment=s?s(C.ctx):!1,e.target){if(e.hydrate){Vl();let A=Tl(e.target);C.fragment&&C.fragment.l(A),A.forEach(B)}else C.fragment&&C.fragment.c();e.intro&&k(l.$$.fragment),_e(l,e.target,e.anchor),Dl(),dt()}j(g)}var oa;typeof HTMLElement=="function"&&(oa=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;constructor(l,e,t){super(),this.$$ctor=l,this.$$s=e,t&&this.attachShadow({mode:"open"})}addEventListener(l,e,t){if(this.$$l[l]=this.$$l[l]||[],this.$$l[l].push(e),this.$$c){let s=this.$$c.$on(l,e);this.$$l_u.set(e,s)}super.addEventListener(l,e,t)}removeEventListener(l,e,t){if(super.removeEventListener(l,e,t),this.$$c){let s=this.$$l_u.get(e);s&&(s(),this.$$l_u.delete(e))}if(this.$$l[l]){let s=this.$$l[l].indexOf(e);s>=0&&this.$$l[l].splice(s,1)}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let l=function(a){return()=>{let r;return{c:function(){r=F("slot"),a!=="default"&&_(r,"name",a)},m:function(g,C){h(g,r,C)},d:function(g){g&&B(r)}}}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;let e={},t=vl(this);for(let a of this.$$s)a in t&&(e[a]=[l(a)]);for(let a of this.attributes){let r=this.$$g_p(a.name);r in this.$$d||(this.$$d[r]=Xt(r,a.value,this.$$p_d,"toProp"))}for(let a in this.$$p_d)!(a in this.$$d)&&this[a]!==void 0&&(this.$$d[a]=this[a],delete this[a]);this.$$c=new this.$$ctor({target:this.shadowRoot||this,props:{...this.$$d,$$slots:e,$$scope:{ctx:[]}}});let s=()=>{this.$$r=!0;for(let a in this.$$p_d)if(this.$$d[a]=this.$$c.$$.ctx[this.$$c.$$.props[a]],this.$$p_d[a].reflect){let r=Xt(a,this.$$d[a],this.$$p_d,"toAttribute");r==null?this.removeAttribute(this.$$p_d[a].attribute||a):this.setAttribute(this.$$p_d[a].attribute||a,r)}this.$$r=!1};this.$$c.$$.after_update.push(s),s();for(let a in this.$$l)for(let r of this.$$l[a]){let i=this.$$c.$on(a,r);this.$$l_u.set(r,i)}this.$$l={}}}attributeChangedCallback(l,e,t){this.$$r||(l=this.$$g_p(l),this.$$d[l]=Xt(l,t,this.$$p_d,"toProp"),this.$$c?.$set({[l]:this.$$d[l]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$c=void 0)})}$$g_p(l){return Object.keys(this.$$p_d).find(e=>this.$$p_d[e].attribute===l||!this.$$p_d[e].attribute&&e.toLowerCase()===l)||l}});function Xt(l,e,t,s){let a=t[l]?.type;if(e=a==="Boolean"&&typeof e!="boolean"?e!=null:e,!s||!t[l])return e;if(s==="toAttribute")switch(a){case"Object":case"Array":return e==null?null:JSON.stringify(e);case"Boolean":return e?"":null;case"Number":return e??null;default:return e}else switch(a){case"Object":case"Array":return e&&JSON.parse(e);case"Boolean":return e;case"Number":return e!=null?+e:e;default:return e}}var M=class{$$=void 0;$$set=void 0;$destroy(){Qe(this,1),this.$destroy=R}$on(e,t){if(!ut(t))return R;let s=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return s.push(t),()=>{let a=s.indexOf(t);a!==-1&&s.splice(a,1)}}$set(e){this.$$set&&!Wl(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add("4");function T(l){let e=typeof l=="string"?l.charCodeAt(0):l;return e>=97&&e<=122||e>=65&&e<=90}function le(l){let e=typeof l=="string"?l.charCodeAt(0):l;return e>=48&&e<=57}function P(l){return T(l)||le(l)}var jl=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"];var Et={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"};var ua={}.hasOwnProperty;function Qt(l,e={}){let t=Kl(),s=String(l),a=s.toLowerCase(),r=0;if(l==null)throw new Error("Expected string, got `"+l+"`");if(ua.call(Et,a)){let n=Et[a];return(e.normalize===void 0||e.normalize===null||e.normalize)&&typeof n=="string"?Qt(n):(t[jl.includes(a)?"regular":"irregular"]=s,t)}for(;T(a.charCodeAt(r))&&r<9;)r++;if(r>1&&r<9){if(t.language=s.slice(0,r),r<4){let n=0;for(;a.charCodeAt(r)===45&&T(a.charCodeAt(r+1))&&T(a.charCodeAt(r+2))&&T(a.charCodeAt(r+3))&&!T(a.charCodeAt(r+4));){if(n>2)return i(r,3,"Too many extended language subtags, expected at most 3 subtags");t.extendedLanguageSubtags.push(s.slice(r+1,r+4)),r+=4,n++}}for(a.charCodeAt(r)===45&&T(a.charCodeAt(r+1))&&T(a.charCodeAt(r+2))&&T(a.charCodeAt(r+3))&&T(a.charCodeAt(r+4))&&!T(a.charCodeAt(r+5))&&(t.script=s.slice(r+1,r+5),r+=5),a.charCodeAt(r)===45&&(T(a.charCodeAt(r+1))&&T(a.charCodeAt(r+2))&&!T(a.charCodeAt(r+3))?(t.region=s.slice(r+1,r+3),r+=3):le(a.charCodeAt(r+1))&&le(a.charCodeAt(r+2))&&le(a.charCodeAt(r+3))&&!le(a.charCodeAt(r+4))&&(t.region=s.slice(r+1,r+4),r+=4));a.charCodeAt(r)===45;){let n=r+1,g=n;for(;P(a.charCodeAt(g));){if(g-n>7)return i(g,1,"Too long variant, expected at most 8 characters");g++}if(g-n>4||g-n>3&&le(a.charCodeAt(n)))t.variants.push(s.slice(n,g)),r=g;else break}for(;a.charCodeAt(r)===45&&!(a.charCodeAt(r+1)===120||!P(a.charCodeAt(r+1))||a.charCodeAt(r+2)!==45||!P(a.charCodeAt(r+3)));){let n=r+2,g=0;for(;a.charCodeAt(n)===45&&P(a.charCodeAt(n+1))&&P(a.charCodeAt(n+2));){let C=n+1;for(n=C+2,g++;P(a.charCodeAt(n));){if(n-C>7)return i(n,2,"Too long extension, expected at most 8 characters");n++}}if(!g)return i(n,4,"Empty extension, extensions must have at least 2 characters of content");t.extensions.push({singleton:s.charAt(r+1),extensions:s.slice(r+3,n).split("-")}),r=n}}else r=0;if(r===0&&a.charCodeAt(r)===120||a.charCodeAt(r)===45&&a.charCodeAt(r+1)===120){r=r?r+2:1;let n=r;for(;a.charCodeAt(n)===45&&P(a.charCodeAt(n+1));){let g=r+1;for(n=g;P(a.charCodeAt(n));){if(n-g>7)return i(n,5,"Too long private-use area, expected at most 8 characters");n++}t.privateuse.push(s.slice(r+1,n)),r=n}}if(r!==s.length)return i(r,6,"Found superfluous content after tag");return t;function i(n,g,C){return e.warning&&e.warning(C,g,n),e.forgiving?t:Kl()}}function Kl(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}function Pl(l,e,t){let s=l.slice();return s[9]=e[t][0],s[10]=e[t][1],s}function Ca(l){let e,t,s,a,r,i=l[0]&&ql(l);return{c(){i&&i.c(),e=Z(),t=F("div"),s=F("p"),s.textContent=`${l[3](30)}`,a=Z(),r=F("p"),r.textContent=`${l[3](40)}`,_(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-j9e30"),_(r,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-j9e30"),_(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(n,g){i&&i.m(n,g),h(n,e,g),h(n,t,g),b(t,s),b(t,a),b(t,r)},p(n,g){n[0]?i||(i=ql(n),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(n){n&&(B(e),B(t)),i&&i.d(n)}}}function Ia(l){let e,t,s,a,r=l[1].meta?.title+"",i,n,g,C,u=l[1].excerpt+"",A,c=l[0]&&$l(l),d=l[2].length&&ts(l);return{c(){c&&c.c(),e=Z(),t=F("div"),s=F("p"),a=F("a"),i=G(r),g=Z(),C=F("p"),A=Z(),d&&d.c(),_(a,"class","pagefind-ui__result-link svelte-j9e30"),_(a,"href",n=l[1].meta?.url||l[1].url),_(s,"class","pagefind-ui__result-title svelte-j9e30"),_(C,"class","pagefind-ui__result-excerpt svelte-j9e30"),_(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(o,I){c&&c.m(o,I),h(o,e,I),h(o,t,I),b(t,s),b(s,a),b(a,i),b(t,g),b(t,C),C.innerHTML=u,b(t,A),d&&d.m(t,null)},p(o,I){o[0]?c?c.p(o,I):(c=$l(o),c.c(),c.m(e.parentNode,e)):c&&(c.d(1),c=null),I&2&&r!==(r=o[1].meta?.title+"")&&W(i,r),I&2&&n!==(n=o[1].meta?.url||o[1].url)&&_(a,"href",n),I&2&&u!==(u=o[1].excerpt+"")&&(C.innerHTML=u),o[2].length?d?d.p(o,I):(d=ts(o),d.c(),d.m(t,null)):d&&(d.d(1),d=null)},d(o){o&&(B(e),B(t)),c&&c.d(o),d&&d.d()}}}function ql(l){let e;return{c(){e=F("div"),_(e,"class","pagefind-ui__result-thumb pagefind-ui__loading svelte-j9e30")},m(t,s){h(t,e,s)},d(t){t&&B(e)}}}function $l(l){let e,t=l[1].meta.image&&es(l);return{c(){e=F("div"),t&&t.c(),_(e,"class","pagefind-ui__result-thumb svelte-j9e30")},m(s,a){h(s,e,a),t&&t.m(e,null)},p(s,a){s[1].meta.image?t?t.p(s,a):(t=es(s),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(s){s&&B(e),t&&t.d()}}}function es(l){let e,t,s;return{c(){e=F("img"),_(e,"class","pagefind-ui__result-image svelte-j9e30"),ge(e.src,t=l[1].meta?.image)||_(e,"src",t),_(e,"alt",s=l[1].meta?.image_alt||l[1].meta?.title)},m(a,r){h(a,e,r)},p(a,r){r&2&&!ge(e.src,t=a[1].meta?.image)&&_(e,"src",t),r&2&&s!==(s=a[1].meta?.image_alt||a[1].meta?.title)&&_(e,"alt",s)},d(a){a&&B(e)}}}function ts(l){let e,t=V(l[2]),s=[];for(let a=0;al.toLocaleUpperCase();function Aa(l,e,t){let{show_images:s=!0}=e,{process_result:a=null}=e,{result:r={data:async()=>{}}}=e,i=["title","image","image_alt","url"],n,g=[],C=(c,d)=>{if(!c||/^[a-z][a-z0-9+.-]*:/i.test(c)||/^\/\//.test(c)||c.startsWith("/"))return c;try{return new URL(c,new URL(d||"/","https://p")).pathname}catch{return c}},u=async c=>{t(1,n=await c.data()),t(1,n=a?.(n)??n),n.meta?.image&&t(1,n={...n,meta:{...n.meta,image:C(n.meta.image,n.meta.url||n.url)}}),t(2,g=Object.entries(n.meta).filter(([d])=>!i.includes(d)))},A=(c=30)=>". ".repeat(Math.floor(10+Math.random()*c));return l.$$set=c=>{"show_images"in c&&t(0,s=c.show_images),"process_result"in c&&t(4,a=c.process_result),"result"in c&&t(5,r=c.result)},l.$$.update=()=>{l.$$.dirty&32&&u(r)},[s,n,g,A,a,r]}var kt=class extends M{constructor(e){super(),K(this,e,Aa,da,O,{show_images:0,process_result:4,result:5})}},as=kt;function rs(l,e,t){let s=l.slice();return s[11]=e[t][0],s[12]=e[t][1],s}function is(l,e,t){let s=l.slice();return s[15]=e[t],s}function _a(l){let e,t,s,a,r,i=l[0]&&ns(l);return{c(){i&&i.c(),e=Z(),t=F("div"),s=F("p"),s.textContent=`${l[5](30)}`,a=Z(),r=F("p"),r.textContent=`${l[5](40)}`,_(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-4xnkmf"),_(r,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-4xnkmf"),_(t,"class","pagefind-ui__result-inner svelte-4xnkmf")},m(n,g){i&&i.m(n,g),h(n,e,g),h(n,t,g),b(t,s),b(t,a),b(t,r)},p(n,g){n[0]?i||(i=ns(n),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(n){n&&(B(e),B(t)),i&&i.d(n)}}}function Qa(l){let e,t,s,a,r=l[1].meta?.title+"",i,n,g,C,u,A=l[0]&&gs(l),c=l[4]&&cs(l),d=V(l[3]),o=[];for(let m=0;ml.toLocaleUpperCase();function ba(l,e,t){let{show_images:s=!0}=e,{process_result:a=null}=e,{result:r={data:async()=>{}}}=e,i=["title","image","image_alt","url"],n,g=[],C=[],u=!1,A=(o,I)=>{if(o.length<=I)return o;let m=[...o].sort((f,p)=>p.locations.length-f.locations.length).slice(0,3).map(f=>f.url);return o.filter(f=>m.includes(f.url))},c=async o=>{t(1,n=await o.data()),t(1,n=a?.(n)??n),t(2,g=Object.entries(n.meta).filter(([I])=>!i.includes(I))),Array.isArray(n.sub_results)&&(t(4,u=n.sub_results?.[0]?.url===(n.meta?.url||n.url)),u?t(3,C=A(n.sub_results.slice(1),3)):t(3,C=A([...n.sub_results],3)))},d=(o=30)=>". ".repeat(Math.floor(10+Math.random()*o));return l.$$set=o=>{"show_images"in o&&t(0,s=o.show_images),"process_result"in o&&t(6,a=o.process_result),"result"in o&&t(7,r=o.result)},l.$$.update=()=>{l.$$.dirty&128&&c(r)},[s,n,g,C,u,d,a,r]}var Lt=class extends M{constructor(e){super(),K(this,e,ba,ma,O,{show_images:0,process_result:6,result:7})}},As=Lt;function _s(l,e,t){let s=l.slice();return s[10]=e[t][0],s[11]=e[t][1],s[12]=e,s[13]=t,s}function Qs(l,e,t){let s=l.slice();return s[14]=e[t][0],s[15]=e[t][1],s[16]=e,s[17]=t,s}function ms(l){let e,t,s=l[4]("filters_label",l[5],l[6])+"",a,r,i=V(Object.entries(l[1])),n=[];for(let g=0;gl.toLocaleUpperCase(),Bs=l=>l.toLowerCase();function Fa(l,e,t){let{available_filters:s=null}=e,{show_empty_filters:a=!0}=e,{open_filters:r=[]}=e,{translate:i=()=>""}=e,{automatic_translations:n={}}=e,{translations:g={}}=e,{selected_filters:C={}}=e,u=!1,A=!1;function c(d,o){C[`${d}:${o}`]=this.checked,t(0,C)}return l.$$set=d=>{"available_filters"in d&&t(1,s=d.available_filters),"show_empty_filters"in d&&t(2,a=d.show_empty_filters),"open_filters"in d&&t(3,r=d.open_filters),"translate"in d&&t(4,i=d.translate),"automatic_translations"in d&&t(5,n=d.automatic_translations),"translations"in d&&t(6,g=d.translations),"selected_filters"in d&&t(0,C=d.selected_filters)},l.$$.update=()=>{if(l.$$.dirty&258&&s&&!u){t(8,u=!0);let d=Object.entries(s||{});d.length===1&&Object.entries(d[0][1])?.length<=6&&t(7,A=!0)}},[C,s,a,r,i,n,g,A,u,c]}var Rt=class extends M{constructor(e){super(),K(this,e,Fa,fa,O,{available_filters:1,show_empty_filters:2,open_filters:3,translate:4,automatic_translations:5,translations:6,selected_filters:0})}},hs=Rt;var Wt={};x(Wt,{comments:()=>Ba,default:()=>xa,direction:()=>ha,strings:()=>Ua,thanks_to:()=>pa});var pa="Jan Claasen ",Ba="",ha="ltr",Ua={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",total_zero_results:"Geen resultate",total_one_result:"[COUNT] resultaat",total_many_results:"[COUNT] resultate",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]",results_label:"Soekresultate",keyboard_navigate:"navigeer",keyboard_select:"kies",keyboard_clear:"wis",keyboard_close:"sluit",keyboard_search:"soek",error_search:"Soek het misluk",filter_selected_one:"[COUNT] gekies",filter_selected_many:"[COUNT] gekies",input_hint:"Resultate sal verskyn terwyl jy tik",loading:"Laai"},xa={thanks_to:pa,comments:Ba,direction:ha,strings:Ua};var St={};x(St,{comments:()=>Za,default:()=>Xa,direction:()=>Ga,strings:()=>Na,thanks_to:()=>ya});var ya="Jermanuts",Za="",Ga="rtl",Na={placeholder:"\u0628\u062D\u062B",clear_search:"\u0627\u0645\u0633\u062D",load_more:"\u062D\u0645\u0651\u0650\u0644 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C",search_label:"\u0627\u0628\u062D\u062B \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639",filters_label:"\u062A\u0635\u0641\u064A\u0627\u062A",zero_results:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",many_results:"[COUNT] \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",one_result:"[COUNT] \u0646\u062A\u064A\u062C\u0629 \u0644 [SEARCH_TERM]",total_zero_results:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C",total_one_result:"[COUNT] \u0646\u062A\u064A\u062C\u0629",total_many_results:"[COUNT] \u0646\u062A\u0627\u0626\u062C",alt_search:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u064A\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0644 [DIFFERENT_TERM] \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643",search_suggestion:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u062C\u0631\u0628 \u0623\u062D\u062F \u0639\u0645\u0644\u064A\u0627\u062A \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u062A\u0627\u0644\u064A\u0629:",searching:"\u064A\u0628\u062D\u062B \u0639\u0646 [SEARCH_TERM]...",results_label:"\u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0628\u062D\u062B",keyboard_navigate:"\u062A\u0646\u0642\u0644",keyboard_select:"\u0627\u062E\u062A\u064A\u0627\u0631",keyboard_clear:"\u0627\u0645\u0633\u062D",keyboard_close:"\u0625\u063A\u0644\u0627\u0642",keyboard_search:"\u0628\u062D\u062B",error_search:"\u0641\u0634\u0644 \u0627\u0644\u0628\u062D\u062B",filter_selected_one:"[COUNT] \u0645\u062D\u062F\u062F",filter_selected_many:"[COUNT] \u0645\u062D\u062F\u062F",input_hint:"\u0633\u062A\u0638\u0647\u0631 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0643\u062A\u0627\u0628\u0629",loading:"\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0645\u064A\u0644"},Xa={thanks_to:ya,comments:Za,direction:Ga,strings:Na};var Vt={};x(Vt,{comments:()=>ka,default:()=>Wa,direction:()=>La,strings:()=>Ra,thanks_to:()=>Ea});var Ea="Maruf Alom ",ka="",La="ltr",Ra={placeholder:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",clear_search:"\u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09C1\u09A8",load_more:"\u0986\u09B0\u09CB \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09C1\u09A8",search_label:"\u098F\u0987 \u0993\u09AF\u09BC\u09C7\u09AC\u09B8\u09BE\u0987\u099F\u09C7 \u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",filters_label:"\u09AB\u09BF\u09B2\u09CD\u099F\u09BE\u09B0",zero_results:"[SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF",many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09BF\u09AF\u09BC\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09BF\u09AF\u09BC\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",total_zero_results:"\u0995\u09CB\u09A8 \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A8\u09C7\u0987",total_one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2",total_many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2",alt_search:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF. \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09C7 [DIFFERENT_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7",search_suggestion:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u09AC\u09BF\u09B7\u09AF\u09BC\u09C7. \u09A8\u09BF\u09A8\u09CD\u09AE\u09C7\u09B0 \u09AC\u09BF\u09B7\u09AF\u09BC\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09A6\u09C7\u0996\u09C1\u09A8:",searching:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u099A\u09B2\u099B\u09C7 [SEARCH_TERM]...",results_label:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8\u09C7\u09B0 \u09AB\u09B2\u09BE\u09AB\u09B2",keyboard_navigate:"\u09A8\u09C7\u09AD\u09BF\u0997\u09C7\u099F",keyboard_select:"\u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09A8",keyboard_clear:"\u09AE\u09C1\u099B\u09C1\u09A8",keyboard_close:"\u09AC\u09A8\u09CD\u09A7",keyboard_search:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8",error_search:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5",filter_selected_one:"[COUNT]-\u099F\u09BF \u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09BF\u09A4",filter_selected_many:"[COUNT]-\u099F\u09BF \u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09BF\u09A4",input_hint:"\u099F\u09BE\u0987\u09AA \u0995\u09B0\u09BE\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09B8\u09BE\u09A5\u09C7 \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09BE \u09AF\u09BE\u09AC\u09C7",loading:"\u09B2\u09CB\u09A1 \u09B9\u099A\u09CD\u099B\u09C7"},Wa={thanks_to:Ea,comments:ka,direction:La,strings:Ra};var Dt={};x(Dt,{comments:()=>Va,default:()=>va,direction:()=>Da,strings:()=>Ta,thanks_to:()=>Sa});var Sa="Pablo Villaverde ",Va="",Da="ltr",Ta={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure m\xE9s resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",total_zero_results:"Sense resultats",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultats",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques seg\xFCents:",searching:"Cercant [SEARCH_TERM]...",results_label:"Resultats de la cerca",keyboard_navigate:"navegar",keyboard_select:"triar",keyboard_clear:"netejar",keyboard_close:"tancar",keyboard_search:"cercar",error_search:"Error en la cerca",filter_selected_one:"[COUNT] seleccionat",filter_selected_many:"[COUNT] seleccionats",input_hint:"Els resultats apareixeran mentre escriviu",loading:"Carregant"},va={thanks_to:Sa,comments:Va,direction:Da,strings:Ta};var Tt={};x(Tt,{comments:()=>Ma,default:()=>za,direction:()=>Ya,strings:()=>wa,thanks_to:()=>Ha});var Ha="Dalibor Hon ",Ma="",Ya="ltr",wa={placeholder:"Hledat",clear_search:"Smazat",load_more:"Na\u010D\xEDst dal\u0161\xED v\xFDsledky",search_label:"Prohledat tuto str\xE1nku",filters_label:"Filtry",zero_results:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]",many_results:"[COUNT] v\xFDsledk\u016F pro [SEARCH_TERM]",one_result:"[COUNT] v\xFDsledek pro [SEARCH_TERM]",total_zero_results:"\u017D\xE1dn\xE9 v\xFDsledky",total_one_result:"[COUNT] v\xFDsledek",total_many_results:"[COUNT] v\xFDsledk\u016F",alt_search:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Zobrazuj\xED se v\xFDsledky pro [DIFFERENT_TERM]",search_suggestion:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Souvisej\xEDc\xED v\xFDsledky hled\xE1n\xED:",searching:"Hled\xE1m [SEARCH_TERM]...",results_label:"V\xFDsledky hled\xE1n\xED",keyboard_navigate:"navigovat",keyboard_select:"vybrat",keyboard_clear:"smazat",keyboard_close:"zav\u0159\xEDt",keyboard_search:"hledat",error_search:"Hled\xE1n\xED selhalo",filter_selected_one:"[COUNT] vybran\xFD",filter_selected_many:"[COUNT] vybran\xFDch",input_hint:"V\xFDsledky se zobraz\xED b\u011Bhem psan\xED",loading:"Na\u010D\xEDt\xE1n\xED"},za={thanks_to:Ha,comments:Ma,direction:Ya,strings:wa};var vt={};x(vt,{comments:()=>Oa,default:()=>Pa,direction:()=>ja,strings:()=>Ka,thanks_to:()=>Ja});var Ja="Jonas Smedegaard ",Oa="",ja="ltr",Ka={placeholder:"S\xF8g",clear_search:"Nulstil",load_more:"Indl\xE6s flere resultater",search_label:"S\xF8g p\xE5 dette website",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultater",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultater",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v et af disse s\xF8geord i stedet:",searching:"S\xF8ger efter [SEARCH_TERM]...",results_label:"S\xF8geresultater",keyboard_navigate:"naviger",keyboard_select:"v\xE6lg",keyboard_clear:"ryd",keyboard_close:"luk",keyboard_search:"s\xF8g",error_search:"S\xF8gning mislykkedes",filter_selected_one:"[COUNT] valgt",filter_selected_many:"[COUNT] valgte",input_hint:"Resultater vises mens du skriver",loading:"Indl\xE6ser"},Pa={thanks_to:Ja,comments:Oa,direction:ja,strings:Ka};var Ht={};x(Ht,{comments:()=>$a,default:()=>lr,direction:()=>er,strings:()=>tr,thanks_to:()=>qa});var qa="Jan Claasen ",$a="",er="ltr",tr={placeholder:"Suche",clear_search:"L\xF6schen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse f\xFCr [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse f\xFCr [SEARCH_TERM]",one_result:"[COUNT] Ergebnis f\xFCr [SEARCH_TERM]",total_zero_results:"Keine Ergebnisse",total_one_result:"[COUNT] Ergebnis",total_many_results:"[COUNT] Ergebnisse",alt_search:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Stattdessen werden Ergebnisse f\xFCr [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche nach [SEARCH_TERM]\u202F\u2026",results_label:"Suchergebnisse",keyboard_navigate:"navigieren",keyboard_select:"ausw\xE4hlen",keyboard_clear:"l\xF6schen",keyboard_close:"schlie\xDFen",keyboard_search:"suchen",error_search:"Suche fehlgeschlagen",filter_selected_one:"[COUNT] ausgew\xE4hlt",filter_selected_many:"[COUNT] ausgew\xE4hlt",input_hint:"Ergebnisse werden w\xE4hrend der Eingabe angezeigt",loading:"Wird geladen"},lr={thanks_to:qa,comments:$a,direction:er,strings:tr};var Mt={};x(Mt,{comments:()=>ar,default:()=>nr,direction:()=>rr,strings:()=>ir,thanks_to:()=>sr});var sr="George Papadopoulos",ar="",rr="ltr",ir={placeholder:"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7",clear_search:"\u039A\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2",load_more:"\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03C0\u03B5\u03C1\u03B9\u03C3\u03C3\u03CC\u03C4\u03B5\u03C1\u03C9\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03B5\u03C3\u03BC\u03AC\u03C4\u03C9\u03BD",search_label:"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03C3\u03B5 \u03B1\u03C5\u03C4\u03CC\u03BD \u03C4\u03BF\u03BD \u03B9\u03C3\u03C4\u03CC\u03C4\u03BF\u03C0\u03BF",filters_label:"\u03A6\u03AF\u03BB\u03C4\u03C1\u03B1",zero_results:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]",many_results:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]",one_result:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03AD\u03BB\u03B5\u03C3\u03BC\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]",total_zero_results:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1",total_one_result:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03AD\u03BB\u03B5\u03C3\u03BC\u03B1",total_many_results:"[COUNT] \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1",alt_search:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]. \u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [DIFFERENT_TERM]",search_suggestion:"\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 [SEARCH_TERM]. \u0394\u03BF\u03BA\u03B9\u03BC\u03AC\u03C3\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03B1\u03C0\u03CC \u03C4\u03B9\u03C2 \u03C0\u03B1\u03C1\u03B1\u03BA\u03AC\u03C4\u03C9 \u03B1\u03BD\u03B1\u03B6\u03B7\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2:",searching:"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B3\u03B9\u03B1 [SEARCH_TERM]...",results_label:"\u0391\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2",keyboard_navigate:"\u03C0\u03BB\u03BF\u03AE\u03B3\u03B7\u03C3\u03B7",keyboard_select:"\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE",keyboard_clear:"\u03BA\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2",keyboard_close:"\u03BA\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF",keyboard_search:"\u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7",error_search:"\u0397 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5",filter_selected_one:"[COUNT] \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF",filter_selected_many:"[COUNT] \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1",input_hint:"\u03A4\u03B1 \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B8\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BA\u03B1\u03B8\u03CE\u03C2 \u03C0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03BF\u03B3\u03B5\u03AF\u03C4\u03B5",loading:"\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7"},nr={thanks_to:sr,comments:ar,direction:rr,strings:ir};var Yt={};x(Yt,{comments:()=>or,default:()=>Cr,direction:()=>cr,strings:()=>ur,thanks_to:()=>gr});var gr="Liam Bigelow ",or="",cr="ltr",ur={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",total_zero_results:"No results",total_one_result:"[COUNT] result",total_many_results:"[COUNT] results",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]...",results_label:"Search results",keyboard_navigate:"navigate",keyboard_select:"select",keyboard_clear:"clear",keyboard_close:"close",keyboard_search:"search",error_search:"Search failed",filter_selected_one:"[COUNT] selected",filter_selected_many:"[COUNT] selected",input_hint:"Results will appear as you type",loading:"Loading"},Cr={thanks_to:gr,comments:or,direction:cr,strings:ur};var wt={};x(wt,{comments:()=>dr,default:()=>Qr,direction:()=>Ar,strings:()=>_r,thanks_to:()=>Ir});var Ir="Pablo Villaverde ",dr="",Ar="ltr",_r={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver m\xE1s resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",total_zero_results:"Sin resultados",total_one_result:"[COUNT] resultado",total_many_results:"[COUNT] resultados",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes b\xFAsquedas:",searching:"Buscando [SEARCH_TERM]...",results_label:"Resultados de b\xFAsqueda",keyboard_navigate:"navegar",keyboard_select:"elegir",keyboard_clear:"limpiar",keyboard_close:"cerrar",keyboard_search:"buscar",error_search:"Error en la b\xFAsqueda",filter_selected_one:"[COUNT] seleccionado",filter_selected_many:"[COUNT] seleccionados",input_hint:"Los resultados aparecer\xE1n mientras escribe",loading:"Cargando"},Qr={thanks_to:Ir,comments:dr,direction:Ar,strings:_r};var zt={};x(zt,{comments:()=>br,default:()=>pr,direction:()=>fr,strings:()=>Fr,thanks_to:()=>mr});var mr="Mikel Larreategi ",br="",fr="ltr",Fr={placeholder:"Bilatu",clear_search:"Garbitu",load_more:"Kargatu emaitza gehiagi",search_label:"Bilatu",filters_label:"Iragazkiak",zero_results:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat",many_results:"[COUNT] emaitza [SEARCH_TERM] bilaketarentzat",one_result:"Emaitza bat [COUNT] [SEARCH_TERM] bilaketarentzat",total_zero_results:"Emaitzarik ez",total_one_result:"[COUNT] emaitza",total_many_results:"[COUNT] emaitza",alt_search:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat. [DIFFERENT_TERM] bilaketaren emaitzak erakusten",search_suggestion:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat. Saiatu hauetako beste bateikin:",searching:"[SEARCH_TERM] bilatzen...",results_label:"Bilaketaren emaitzak",keyboard_navigate:"nabigatu",keyboard_select:"hautatu",keyboard_clear:"garbitu",keyboard_close:"itxi",keyboard_search:"bilatu",error_search:"Bilaketak huts egin du",filter_selected_one:"[COUNT] hautatuta",filter_selected_many:"[COUNT] hautatuta",input_hint:"Emaitzak idatzi ahala agertuko dira",loading:"Kargatzen"},pr={thanks_to:mr,comments:br,direction:fr,strings:Fr};var Jt={};x(Jt,{comments:()=>hr,default:()=>yr,direction:()=>Ur,strings:()=>xr,thanks_to:()=>Br});var Br="Ali Khaleqi Yekta ",hr="",Ur="rtl",xr={placeholder:"\u062C\u0633\u062A\u062C\u0648",clear_search:"\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC",load_more:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0646\u062A\u0627\u06CC\u062C \u0628\u06CC\u0634\u062A\u0631",search_label:"\u062C\u0633\u062A\u062C\u0648 \u062F\u0631 \u0633\u0627\u06CC\u062A",filters_label:"\u0641\u06CC\u0644\u062A\u0631\u0647\u0627",zero_results:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F",many_results:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",one_result:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",total_zero_results:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u06CC\u0627\u0641\u062A \u0646\u0634\u062F",total_one_result:"[COUNT] \u0646\u062A\u06CC\u062C\u0647",total_many_results:"[COUNT] \u0646\u062A\u06CC\u062C\u0647",alt_search:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u062F\u0631 \u0639\u0648\u0636 \u0646\u062A\u0627\u06CC\u062C \u0628\u0631\u0627\u06CC [DIFFERENT_TERM] \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F",search_suggestion:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u06CC\u06A9\u06CC \u0627\u0632 \u062C\u0633\u062A\u062C\u0648\u0647\u0627\u06CC \u0632\u06CC\u0631 \u0631\u0627 \u0627\u0645\u062A\u062D\u0627\u0646 \u06A9\u0646\u06CC\u062F:",searching:"\u062F\u0631 \u062D\u0627\u0644 \u062C\u0633\u062A\u062C\u0648\u06CC [SEARCH_TERM]...",results_label:"\u0646\u062A\u0627\u06CC\u062C \u062C\u0633\u062A\u062C\u0648",keyboard_navigate:"\u067E\u06CC\u0645\u0627\u06CC\u0634",keyboard_select:"\u0627\u0646\u062A\u062E\u0627\u0628",keyboard_clear:"\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC",keyboard_close:"\u0628\u0633\u062A\u0646",keyboard_search:"\u062C\u0633\u062A\u062C\u0648",error_search:"\u062C\u0633\u062A\u062C\u0648 \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062F",filter_selected_one:"[COUNT] \u0627\u0646\u062A\u062E\u0627\u0628 \u0634\u062F\u0647",filter_selected_many:"[COUNT] \u0627\u0646\u062A\u062E\u0627\u0628 \u0634\u062F\u0647",input_hint:"\u0646\u062A\u0627\u06CC\u062C \u0647\u0646\u06AF\u0627\u0645 \u062A\u0627\u06CC\u067E \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u0646\u062F",loading:"\u062F\u0631 \u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC"},yr={thanks_to:Br,comments:hr,direction:Ur,strings:xr};var Ot={};x(Ot,{comments:()=>Gr,default:()=>Er,direction:()=>Nr,strings:()=>Xr,thanks_to:()=>Zr});var Zr="Valtteri Laitinen ",Gr="",Nr="ltr",Xr={placeholder:"Haku",clear_search:"Tyhjenn\xE4",load_more:"Lataa lis\xE4\xE4 tuloksia",search_label:"Hae t\xE4lt\xE4 sivustolta",filters_label:"Suodattimet",zero_results:"Ei tuloksia haulle [SEARCH_TERM]",many_results:"[COUNT] tulosta haulle [SEARCH_TERM]",one_result:"[COUNT] tulos haulle [SEARCH_TERM]",total_zero_results:"Ei tuloksia",total_one_result:"[COUNT] tulos",total_many_results:"[COUNT] tulosta",alt_search:"Ei tuloksia haulle [SEARCH_TERM]. N\xE4ytet\xE4\xE4n tulokset sen sijaan haulle [DIFFERENT_TERM]",search_suggestion:"Ei tuloksia haulle [SEARCH_TERM]. Kokeile jotain seuraavista:",searching:"Haetaan [SEARCH_TERM]...",results_label:"Hakutulokset",keyboard_navigate:"siirry",keyboard_select:"valitse",keyboard_clear:"tyhjenn\xE4",keyboard_close:"sulje",keyboard_search:"hae",error_search:"Haku ep\xE4onnistui",filter_selected_one:"[COUNT] valittu",filter_selected_many:"[COUNT] valittu",input_hint:"Tulokset n\xE4kyv\xE4t kirjoittaessasi",loading:"Ladataan"},Er={thanks_to:Zr,comments:Gr,direction:Nr,strings:Xr};var jt={};x(jt,{comments:()=>Lr,default:()=>Sr,direction:()=>Rr,strings:()=>Wr,thanks_to:()=>kr});var kr="Nicolas Friedli ",Lr="",Rr="ltr",Wr={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de r\xE9sultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de r\xE9sultat pour [SEARCH_TERM]",many_results:"[COUNT] r\xE9sultats pour [SEARCH_TERM]",one_result:"[COUNT] r\xE9sultat pour [SEARCH_TERM]",total_zero_results:"Pas de r\xE9sultat",total_one_result:"[COUNT] r\xE9sultat",total_many_results:"[COUNT] r\xE9sultats",alt_search:"Pas de r\xE9sultat pour [SEARCH_TERM]. Montre les r\xE9sultats pour [DIFFERENT_TERM] \xE0 la place",search_suggestion:"Pas de r\xE9sultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]...",results_label:"R\xE9sultats de recherche",keyboard_navigate:"naviguer",keyboard_select:"choisir",keyboard_clear:"effacer",keyboard_close:"fermer",keyboard_search:"rechercher",error_search:"\xC9chec de la recherche",filter_selected_one:"[COUNT] s\xE9lectionn\xE9",filter_selected_many:"[COUNT] s\xE9lectionn\xE9s",input_hint:"Les r\xE9sultats appara\xEEtront au fur et \xE0 mesure de la saisie",loading:"Chargement"},Sr={thanks_to:kr,comments:Lr,direction:Rr,strings:Wr};var Kt={};x(Kt,{comments:()=>Dr,default:()=>Hr,direction:()=>Tr,strings:()=>vr,thanks_to:()=>Vr});var Vr="Pablo Villaverde ",Dr="",Tr="ltr",vr={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver m\xE1is resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",total_zero_results:"Sen resultados",total_one_result:"[COUNT] resultado",total_many_results:"[COUNT] resultados",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]...",results_label:"Resultados da busca",keyboard_navigate:"navegar",keyboard_select:"escoller",keyboard_clear:"limpar",keyboard_close:"pechar",keyboard_search:"buscar",error_search:"Erro na busca",filter_selected_one:"[COUNT] seleccionado",filter_selected_many:"[COUNT] seleccionados",input_hint:"Os resultados aparecer\xE1n mentres escribe",loading:"Cargando"},Hr={thanks_to:Vr,comments:Dr,direction:Tr,strings:vr};var Pt={};x(Pt,{comments:()=>Yr,default:()=>Jr,direction:()=>wr,strings:()=>zr,thanks_to:()=>Mr});var Mr="Nir Tamir ",Yr="",wr="rtl",zr={placeholder:"\u05D7\u05D9\u05E4\u05D5\u05E9",clear_search:"\u05E0\u05D9\u05E7\u05D5\u05D9",load_more:"\u05E2\u05D5\u05D3 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",search_label:"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05D6\u05D4",filters_label:"\u05DE\u05E1\u05E0\u05E0\u05D9\u05DD",zero_results:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",many_results:"\u05E0\u05DE\u05E6\u05D0\u05D5 [COUNT] \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",one_result:"\u05E0\u05DE\u05E6\u05D0\u05D4 \u05EA\u05D5\u05E6\u05D0\u05D4 \u05D0\u05D7\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",total_zero_results:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",total_one_result:"\u05EA\u05D5\u05E6\u05D0\u05D4 [COUNT]",total_many_results:"[COUNT] \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",alt_search:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05DE\u05D5\u05E6\u05D2\u05D5\u05EA \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [DIFFERENT_TERM]",search_suggestion:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05E0\u05E1\u05D5 \u05D0\u05D7\u05D3 \u05DE\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9\u05D9\u05DD \u05D4\u05D1\u05D0\u05D9\u05DD:",searching:"\u05DE\u05D7\u05E4\u05E9 \u05D0\u05EA [SEARCH_TERM]...",results_label:"\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05D7\u05D9\u05E4\u05D5\u05E9",keyboard_navigate:"\u05E0\u05D9\u05D5\u05D5\u05D8",keyboard_select:"\u05D1\u05D7\u05D9\u05E8\u05D4",keyboard_clear:"\u05E0\u05D9\u05E7\u05D5\u05D9",keyboard_close:"\u05E1\u05D2\u05D9\u05E8\u05D4",keyboard_search:"\u05D7\u05D9\u05E4\u05D5\u05E9",error_search:"\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9 \u05E0\u05DB\u05E9\u05DC",filter_selected_one:"[COUNT] \u05E0\u05D1\u05D7\u05E8",filter_selected_many:"[COUNT] \u05E0\u05D1\u05D7\u05E8\u05D5",input_hint:"\u05D4\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05D9\u05D5\u05E4\u05D9\u05E2\u05D5 \u05EA\u05D5\u05DA \u05DB\u05D3\u05D9 \u05D4\u05E7\u05DC\u05D3\u05D4",loading:"\u05D8\u05D5\u05E2\u05DF"},Jr={thanks_to:Mr,comments:Yr,direction:wr,strings:zr};var qt={};x(qt,{comments:()=>jr,default:()=>qr,direction:()=>Kr,strings:()=>Pr,thanks_to:()=>Or});var Or="Amit Yadav ",jr="",Kr="ltr",Pr={placeholder:"\u0916\u094B\u091C\u0947\u0902",clear_search:"\u0938\u093E\u092B \u0915\u0930\u0947\u0902",load_more:"\u0914\u0930 \u0905\u0927\u093F\u0915 \u092A\u0930\u093F\u0923\u093E\u092E \u0932\u094B\u0921 \u0915\u0930\u0947\u0902",search_label:"\u0907\u0938 \u0938\u093E\u0907\u091F \u092E\u0947\u0902 \u0916\u094B\u091C\u0947\u0902",filters_label:"\u092B\u093C\u093F\u0932\u094D\u091F\u0930",zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E",many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u0947",one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u093E",total_zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902",total_one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E",total_many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E",alt_search:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0907\u0938\u0915\u0947 \u092C\u091C\u093E\u092F [DIFFERENT_TERM] \u0915\u0947 \u0932\u093F\u090F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E \u0930\u0939\u093E \u0939\u0948",search_suggestion:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0928\u093F\u092E\u094D\u0928\u0932\u093F\u0916\u093F\u0924 \u0916\u094B\u091C\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u0915\u094B\u0908 \u090F\u0915 \u0906\u091C\u093C\u092E\u093E\u090F\u0902:",searching:"[SEARCH_TERM] \u0915\u0940 \u0916\u094B\u091C \u0915\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948...",results_label:"\u0916\u094B\u091C \u092A\u0930\u093F\u0923\u093E\u092E",keyboard_navigate:"\u0928\u0947\u0935\u093F\u0917\u0947\u091F",keyboard_select:"\u091A\u0941\u0928\u0947\u0902",keyboard_clear:"\u0938\u093E\u092B\u093C \u0915\u0930\u0947\u0902",keyboard_close:"\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",keyboard_search:"\u0916\u094B\u091C\u0947\u0902",error_search:"\u0916\u094B\u091C \u0935\u093F\u092B\u0932",filter_selected_one:"[COUNT] \u091A\u092F\u0928\u093F\u0924",filter_selected_many:"[COUNT] \u091A\u092F\u0928\u093F\u0924",input_hint:"\u091F\u093E\u0907\u092A \u0915\u0930\u0924\u0947 \u0938\u092E\u092F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E\u0908 \u0926\u0947\u0902\u0917\u0947",loading:"\u0932\u094B\u0921 \u0939\u094B \u0930\u0939\u093E \u0939\u0948"},qr={thanks_to:Or,comments:jr,direction:Kr,strings:Pr};var $t={};x($t,{comments:()=>ei,default:()=>si,direction:()=>ti,strings:()=>li,thanks_to:()=>$r});var $r="Diomed ",ei="",ti="ltr",li={placeholder:"Tra\u017Ei",clear_search:"O\u010Disti",load_more:"U\u010Ditaj vi\u0161e rezultata",search_label:"Pretra\u017Ei ovu stranicu",filters_label:"Filteri",zero_results:"Nema rezultata za [SEARCH_TERM]",many_results:"[COUNT] rezultata za [SEARCH_TERM]",one_result:"[COUNT] rezultat za [SEARCH_TERM]",total_zero_results:"Nema rezultata",total_one_result:"[COUNT] rezultat",total_many_results:"[COUNT] rezultata",alt_search:"Nema rezultata za [SEARCH_TERM]. Prikazujem rezultate za [DIFFERENT_TERM]",search_suggestion:"Nema rezultata za [SEARCH_TERM]. Poku\u0161aj s jednom od ovih pretraga:",searching:"Pretra\u017Eujem [SEARCH_TERM]...",results_label:"Rezultati pretrage",keyboard_navigate:"navigiraj",keyboard_select:"odaberi",keyboard_clear:"o\u010Disti",keyboard_close:"zatvori",keyboard_search:"tra\u017Ei",error_search:"Pretraga nije uspjela",filter_selected_one:"[COUNT] odabran",filter_selected_many:"[COUNT] odabranih",input_hint:"Rezultati \u0107e se pojaviti dok tipkate",loading:"U\u010Ditavanje"},si={thanks_to:$r,comments:ei,direction:ti,strings:li};var el={};x(el,{comments:()=>ri,default:()=>gi,direction:()=>ii,strings:()=>ni,thanks_to:()=>ai});var ai="Adam Laki ",ri="",ii="ltr",ni={placeholder:"Keres\xE9s",clear_search:"T\xF6rl\xE9s",load_more:"Tov\xE1bbi tal\xE1latok bet\xF6lt\xE9se",search_label:"Keres\xE9s az oldalon",filters_label:"Sz\u0171r\xE9s",zero_results:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",many_results:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",one_result:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",total_zero_results:"Nincs tal\xE1lat",total_one_result:"[COUNT] tal\xE1lat",total_many_results:"[COUNT] tal\xE1lat",alt_search:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Tal\xE1latok mutat\xE1sa ink\xE1bb a(z) [DIFFERENT_TERM] kifejez\xE9sre",search_suggestion:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Pr\xF3b\xE1ld meg a k\xF6vetkez\u0151 keres\xE9sek egyik\xE9t:",searching:"Keres\xE9s a(z) [SEARCH_TERM] kifejez\xE9sre...",results_label:"Keres\xE9si tal\xE1latok",keyboard_navigate:"navig\xE1l\xE1s",keyboard_select:"kiv\xE1laszt\xE1s",keyboard_clear:"t\xF6rl\xE9s",keyboard_close:"bez\xE1r\xE1s",keyboard_search:"keres\xE9s",error_search:"A keres\xE9s sikertelen",filter_selected_one:"[COUNT] kiv\xE1lasztva",filter_selected_many:"[COUNT] kiv\xE1lasztva",input_hint:"A tal\xE1latok g\xE9pel\xE9s k\xF6zben jelennek meg",loading:"Bet\xF6lt\xE9s"},gi={thanks_to:ai,comments:ri,direction:ii,strings:ni};var tl={};x(tl,{comments:()=>ci,default:()=>Ii,direction:()=>ui,strings:()=>Ci,thanks_to:()=>oi});var oi="Nixentric",ci="",ui="ltr",Ci={placeholder:"Cari",clear_search:"Bersihkan",load_more:"Muat lebih banyak hasil",search_label:"Telusuri situs ini",filters_label:"Filter",zero_results:"[SEARCH_TERM] tidak ditemukan",many_results:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",one_result:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",total_zero_results:"Tidak ada hasil",total_one_result:"[COUNT] hasil",total_many_results:"[COUNT] hasil",alt_search:"[SEARCH_TERM] tidak ditemukan. Menampilkan hasil [DIFFERENT_TERM] sebagai gantinya",search_suggestion:"[SEARCH_TERM] tidak ditemukan. Coba salah satu pencarian berikut ini:",searching:"Mencari [SEARCH_TERM]...",results_label:"Hasil pencarian",keyboard_navigate:"navigasi",keyboard_select:"pilih",keyboard_clear:"bersihkan",keyboard_close:"tutup",keyboard_search:"cari",error_search:"Pencarian gagal",filter_selected_one:"[COUNT] dipilih",filter_selected_many:"[COUNT] dipilih",input_hint:"Hasil akan muncul saat Anda mengetik",loading:"Memuat"},Ii={thanks_to:oi,comments:ci,direction:ui,strings:Ci};var ll={};x(ll,{comments:()=>Ai,default:()=>mi,direction:()=>_i,strings:()=>Qi,thanks_to:()=>di});var di="Cosette Bruhns Alonso, Andrew Janco ",Ai="",_i="ltr",Qi={placeholder:"Cerca",clear_search:"Cancella la cronologia",load_more:"Mostra pi\xF9 risultati",search_label:"Cerca nel sito",filters_label:"Filtri di ricerca",zero_results:"Nessun risultato per [SEARCH_TERM]",many_results:"[COUNT] risultati per [SEARCH_TERM]",one_result:"[COUNT] risultato per [SEARCH_TERM]",total_zero_results:"Nessun risultato",total_one_result:"[COUNT] risultato",total_many_results:"[COUNT] risultati",alt_search:"Nessun risultato per [SEARCH_TERM]. Mostrando risultati per [DIFFERENT_TERM] come alternativa.",search_suggestion:"Nessun risultato per [SEARCH_TERM]. Prova una delle seguenti ricerche:",searching:"Cercando [SEARCH_TERM]...",results_label:"Risultati della ricerca",keyboard_navigate:"naviga",keyboard_select:"seleziona",keyboard_clear:"cancella",keyboard_close:"chiudi",keyboard_search:"cerca",error_search:"Ricerca fallita",filter_selected_one:"[COUNT] selezionato",filter_selected_many:"[COUNT] selezionati",input_hint:"I risultati appariranno durante la digitazione",loading:"Caricamento"},mi={thanks_to:di,comments:Ai,direction:_i,strings:Qi};var sl={};x(sl,{comments:()=>fi,default:()=>Bi,direction:()=>Fi,strings:()=>pi,thanks_to:()=>bi});var bi="Tate",fi="",Fi="ltr",pi={placeholder:"\u691C\u7D22",clear_search:"\u30AF\u30EA\u30A2",load_more:"\u6B21\u3092\u8AAD\u307F\u8FBC\u3080",search_label:"\u3053\u306E\u30B5\u30A4\u30C8\u3092\u691C\u7D22",filters_label:"\u30D5\u30A3\u30EB\u30BF",zero_results:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",many_results:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",one_result:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",total_zero_results:"\u7D50\u679C\u306A\u3057",total_one_result:"[COUNT]\u4EF6\u306E\u7D50\u679C",total_many_results:"[COUNT]\u4EF6\u306E\u7D50\u679C",alt_search:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002[DIFFERENT_TERM]\u306E\u691C\u7D22\u7D50\u679C\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059",search_suggestion:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B21\u306E\u3044\u305A\u308C\u304B\u306E\u691C\u7D22\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",searching:"[SEARCH_TERM]\u3092\u691C\u7D22\u3057\u3066\u3044\u307E\u3059",results_label:"\u691C\u7D22\u7D50\u679C",keyboard_navigate:"\u79FB\u52D5",keyboard_select:"\u9078\u629E",keyboard_clear:"\u30AF\u30EA\u30A2",keyboard_close:"\u9589\u3058\u308B",keyboard_search:"\u691C\u7D22",error_search:"\u691C\u7D22\u306B\u5931\u6557\u3057\u307E\u3057\u305F",filter_selected_one:"[COUNT]\u4EF6\u9078\u629E\u4E2D",filter_selected_many:"[COUNT]\u4EF6\u9078\u629E\u4E2D",input_hint:"\u5165\u529B\u4E2D\u306B\u691C\u7D22\u7D50\u679C\u304C\u8868\u793A\u3055\u308C\u307E\u3059",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D"},Bi={thanks_to:bi,comments:fi,direction:Fi,strings:pi};var al={};x(al,{comments:()=>Ui,default:()=>Zi,direction:()=>xi,strings:()=>yi,thanks_to:()=>hi});var hi="Seokho Son ",Ui="",xi="ltr",yi={placeholder:"\uAC80\uC0C9\uC5B4",clear_search:"\uBE44\uC6B0\uAE30",load_more:"\uAC80\uC0C9 \uACB0\uACFC \uB354 \uBCF4\uAE30",search_label:"\uC0AC\uC774\uD2B8 \uAC80\uC0C9",filters_label:"\uD544\uD130",zero_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C",many_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",one_result:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",total_zero_results:"\uACB0\uACFC \uC5C6\uC74C",total_one_result:"\uACB0\uACFC [COUNT]\uAC74",total_many_results:"\uACB0\uACFC [COUNT]\uAC74",alt_search:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. [DIFFERENT_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC",search_suggestion:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. \uCD94\uCC9C \uAC80\uC0C9\uC5B4: ",searching:"[SEARCH_TERM] \uAC80\uC0C9 \uC911...",results_label:"\uAC80\uC0C9 \uACB0\uACFC",keyboard_navigate:"\uC774\uB3D9",keyboard_select:"\uC120\uD0DD",keyboard_clear:"\uBE44\uC6B0\uAE30",keyboard_close:"\uB2EB\uAE30",keyboard_search:"\uAC80\uC0C9",error_search:"\uAC80\uC0C9 \uC2E4\uD328",filter_selected_one:"[COUNT]\uAC1C \uC120\uD0DD\uB428",filter_selected_many:"[COUNT]\uAC1C \uC120\uD0DD\uB428",input_hint:"\uC785\uB825\uD558\uB294 \uB3D9\uC548 \uACB0\uACFC\uAC00 \uD45C\uC2DC\uB429\uB2C8\uB2E4",loading:"\uB85C\uB529 \uC911"},Zi={thanks_to:hi,comments:Ui,direction:xi,strings:yi};var rl={};x(rl,{comments:()=>Ni,default:()=>ki,direction:()=>Xi,strings:()=>Ei,thanks_to:()=>Gi});var Gi="",Ni="",Xi="ltr",Ei={placeholder:"Rapu",clear_search:"Whakakore",load_more:"Whakauta \u0113tahi otinga k\u0113",search_label:"Rapu",filters_label:"T\u0101tari",zero_results:"Otinga kore ki [SEARCH_TERM]",many_results:"[COUNT] otinga ki [SEARCH_TERM]",one_result:"[COUNT] otinga ki [SEARCH_TERM]",total_zero_results:"K\u0101ore he otinga",total_one_result:"[COUNT] otinga",total_many_results:"[COUNT] ng\u0101 otinga",alt_search:"Otinga kore ki [SEARCH_TERM]. Otinga k\u0113 ki [DIFFERENT_TERM]",search_suggestion:"Otinga kore ki [SEARCH_TERM]. whakam\u0101tau ki ng\u0101 mea atu:",searching:"Rapu ki [SEARCH_TERM]...",results_label:"Ng\u0101 otinga rapu",keyboard_navigate:"whakatere",keyboard_select:"t\u012Bpako",keyboard_clear:"whakakore",keyboard_close:"kati",keyboard_search:"rapu",error_search:"K\u0101ore i eke te rapu",filter_selected_one:"[COUNT] kua t\u012Bpakohia",filter_selected_many:"[COUNT] kua t\u012Bpakohia",input_hint:"Ka puta ng\u0101 otinga i a koe e patopato ana",loading:"E uta ana"},ki={thanks_to:Gi,comments:Ni,direction:Xi,strings:Ei};var il={};x(il,{comments:()=>Ri,default:()=>Vi,direction:()=>Wi,strings:()=>Si,thanks_to:()=>Li});var Li="Harry Min Khant ",Ri="",Wi="ltr",Si={placeholder:"\u101B\u103E\u102C\u101B\u1014\u103A",clear_search:"\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F\u1000\u102D\u102F \u101B\u103E\u1004\u103A\u1038\u101C\u1004\u103A\u1038\u1015\u102B\u104B",load_more:"\u1014\u1031\u102C\u1000\u103A\u1011\u1015\u103A\u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038\u1000\u102D\u102F \u1010\u1004\u103A\u1015\u102B\u104B",search_label:"\u1024\u1006\u102D\u102F\u1000\u103A\u1010\u103D\u1004\u103A\u101B\u103E\u102C\u1016\u103D\u1031\u1015\u102B\u104B",filters_label:"\u1005\u1005\u103A\u1011\u102F\u1010\u103A\u1019\u103E\u102F\u1019\u103B\u102C\u1038",zero_results:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038 \u1019\u101B\u103E\u102D\u1015\u102B",many_results:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A [COUNT] \u1001\u102F",one_result:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A [COUNT]",total_zero_results:"\u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038 \u1019\u101B\u103E\u102D\u1015\u102B",total_one_result:"\u101B\u101C\u1012\u103A [COUNT] \u1001\u102F",total_many_results:"\u101B\u101C\u1012\u103A [COUNT] \u1001\u102F",alt_search:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u101B\u103E\u102D\u1015\u102B\u104B \u104E\u1004\u103A\u1038\u1021\u1005\u102C\u1038 [DIFFERENT_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038\u1000\u102D\u102F \u1015\u103C\u101E\u101E\u100A\u103A\u104B",search_suggestion:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u101B\u103E\u102D\u1015\u102B\u104B \u1021\u1031\u102C\u1000\u103A\u1015\u102B\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F\u1019\u103B\u102C\u1038\u1011\u1032\u1019\u103E \u1010\u1005\u103A\u1001\u102F\u1000\u102D\u102F \u1005\u1019\u103A\u1038\u1000\u103C\u100A\u1037\u103A\u1015\u102B:",searching:"[SEARCH_TERM] \u1000\u102D\u102F \u101B\u103E\u102C\u1016\u103D\u1031\u1014\u1031\u101E\u100A\u103A...",results_label:"\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038",keyboard_navigate:"\u101C\u1019\u103A\u1038\u100A\u103D\u103E\u1014\u103A",keyboard_select:"\u101B\u103D\u1031\u1038\u1001\u103B\u101A\u103A",keyboard_clear:"\u101B\u103E\u1004\u103A\u1038\u101C\u1004\u103A\u1038",keyboard_close:"\u1015\u102D\u1010\u103A",keyboard_search:"\u101B\u103E\u102C\u101B\u1014\u103A",error_search:"\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F \u1019\u1021\u1031\u102C\u1004\u103A\u1019\u103C\u1004\u103A\u1015\u102B",filter_selected_one:"[COUNT] \u1001\u102F \u101B\u103D\u1031\u1038\u1001\u103B\u101A\u103A\u1011\u102C\u1038\u101E\u100A\u103A",filter_selected_many:"[COUNT] \u1001\u102F \u101B\u103D\u1031\u1038\u1001\u103B\u101A\u103A\u1011\u102C\u1038\u101E\u100A\u103A",input_hint:"\u101B\u102D\u102F\u1000\u103A\u1014\u1031\u1005\u1009\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038 \u1015\u1031\u102B\u103A\u101C\u102C\u1015\u102B\u1019\u100A\u103A",loading:"\u1010\u1004\u103A\u1014\u1031\u101E\u100A\u103A"},Vi={thanks_to:Li,comments:Ri,direction:Wi,strings:Si};var nl={};x(nl,{comments:()=>Ti,default:()=>Mi,direction:()=>vi,strings:()=>Hi,thanks_to:()=>Di});var Di="Eirik Mikkelsen",Ti="",vi="ltr",Hi={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultater",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultater",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]",results_label:"S\xF8keresultater",keyboard_navigate:"naviger",keyboard_select:"velg",keyboard_clear:"fjern",keyboard_close:"lukk",keyboard_search:"s\xF8k",error_search:"S\xF8k feilet",filter_selected_one:"[COUNT] valgt",filter_selected_many:"[COUNT] valgte",input_hint:"Resultater vises mens du skriver",loading:"Laster"},Mi={thanks_to:Di,comments:Ti,direction:vi,strings:Hi};var gl={};x(gl,{comments:()=>wi,default:()=>Oi,direction:()=>zi,strings:()=>Ji,thanks_to:()=>Yi});var Yi="Paul van Brouwershaven",wi="",zi="ltr",Ji={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",total_zero_results:"Geen resultaten",total_one_result:"[COUNT] resultaat",total_many_results:"[COUNT] resultaten",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]...",results_label:"Zoekresultaten",keyboard_navigate:"navigeren",keyboard_select:"selecteren",keyboard_clear:"wissen",keyboard_close:"sluiten",keyboard_search:"zoeken",error_search:"Zoeken mislukt",filter_selected_one:"[COUNT] geselecteerd",filter_selected_many:"[COUNT] geselecteerd",input_hint:"Resultaten verschijnen terwijl u typt",loading:"Laden"},Oi={thanks_to:Yi,comments:wi,direction:zi,strings:Ji};var ol={};x(ol,{comments:()=>Ki,default:()=>$i,direction:()=>Pi,strings:()=>qi,thanks_to:()=>ji});var ji="Eirik Mikkelsen",Ki="",Pi="ltr",qi={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last fleire resultat",search_label:"S\xF8k p\xE5 denne sida",filters_label:"Filter",zero_results:"Ingen resultat for [SEARCH_TERM]",many_results:"[COUNT] resultat for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultat",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultat",alt_search:"Ingen resultat for [SEARCH_TERM]. Viser resultat for [DIFFERENT_TERM] i staden",search_suggestion:"Ingen resultat for [SEARCH_TERM]. Pr\xF8v eitt av desse s\xF8keorda i staden:",searching:"S\xF8ker etter [SEARCH_TERM]",results_label:"S\xF8keresultat",keyboard_navigate:"naviger",keyboard_select:"vel",keyboard_clear:"fjern",keyboard_close:"lukk",keyboard_search:"s\xF8k",error_search:"S\xF8k feila",filter_selected_one:"[COUNT] vald",filter_selected_many:"[COUNT] valde",input_hint:"Resultat visast medan du skriv",loading:"Lastar"},$i={thanks_to:ji,comments:Ki,direction:Pi,strings:qi};var cl={};x(cl,{comments:()=>tn,default:()=>an,direction:()=>ln,strings:()=>sn,thanks_to:()=>en});var en="Christopher Wingate",tn="",ln="ltr",sn={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",total_zero_results:"Ingen resultater",total_one_result:"[COUNT] resultat",total_many_results:"[COUNT] resultater",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]",results_label:"S\xF8keresultater",keyboard_navigate:"naviger",keyboard_select:"velg",keyboard_clear:"fjern",keyboard_close:"lukk",keyboard_search:"s\xF8k",error_search:"S\xF8k feilet",filter_selected_one:"[COUNT] valgt",filter_selected_many:"[COUNT] valgte",input_hint:"Resultater vises mens du skriver",loading:"Laster"},an={thanks_to:en,comments:tn,direction:ln,strings:sn};var ul={};x(ul,{comments:()=>nn,default:()=>cn,direction:()=>gn,strings:()=>on,thanks_to:()=>rn});var rn="",nn="",gn="ltr",on={placeholder:"Szukaj",clear_search:"Wyczy\u015B\u0107",load_more:"Za\u0142aduj wi\u0119cej",search_label:"Przeszukaj t\u0119 stron\u0119",filters_label:"Filtry",zero_results:"Brak wynik\xF3w dla [SEARCH_TERM]",many_results:"[COUNT] wynik\xF3w dla [SEARCH_TERM]",one_result:"[COUNT] wynik dla [SEARCH_TERM]",total_zero_results:"Brak wynik\xF3w",total_one_result:"[COUNT] wynik",total_many_results:"[COUNT] wynik\xF3w",alt_search:"Brak wynik\xF3w dla [SEARCH_TERM]. Wy\u015Bwietlam wyniki dla [DIFFERENT_TERM]",search_suggestion:"Brak wynik\xF3w dla [SEARCH_TERM]. Pokrewne wyniki wyszukiwania:",searching:"Szukam [SEARCH_TERM]...",results_label:"Wyniki wyszukiwania",keyboard_navigate:"nawiguj",keyboard_select:"wybierz",keyboard_clear:"wyczy\u015B\u0107",keyboard_close:"zamknij",keyboard_search:"szukaj",error_search:"Wyszukiwanie nie powiod\u0142o si\u0119",filter_selected_one:"[COUNT] wybrany",filter_selected_many:"[COUNT] wybranych",input_hint:"Wyniki pojawi\u0105 si\u0119 podczas pisania",loading:"\u0141adowanie"},cn={thanks_to:rn,comments:nn,direction:gn,strings:on};var Cl={};x(Cl,{comments:()=>Cn,default:()=>An,direction:()=>In,strings:()=>dn,thanks_to:()=>un});var un="Jonatah",Cn="",In="ltr",dn={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",total_zero_results:"Nenhum resultado",total_one_result:"[COUNT] resultado",total_many_results:"[COUNT] resultados",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]...",results_label:"Resultados da pesquisa",keyboard_navigate:"navegar",keyboard_select:"selecionar",keyboard_clear:"limpar",keyboard_close:"fechar",keyboard_search:"pesquisar",error_search:"Falha na pesquisa",filter_selected_one:"[COUNT] selecionado",filter_selected_many:"[COUNT] selecionados",input_hint:"Os resultados aparecer\xE3o enquanto voc\xEA digita",loading:"Carregando"},An={thanks_to:un,comments:Cn,direction:In,strings:dn};var Il={};x(Il,{comments:()=>Qn,default:()=>fn,direction:()=>mn,strings:()=>bn,thanks_to:()=>_n});var _n="Bogdan Mateescu ",Qn="",mn="ltr",bn={placeholder:"C\u0103utare",clear_search:"\u015Eterge\u0163i",load_more:"\xCEnc\u0103rca\u021Bi mai multe rezultate",search_label:"C\u0103uta\u021Bi \xEEn acest site",filters_label:"Filtre",zero_results:"Niciun rezultat pentru [SEARCH_TERM]",many_results:"[COUNT] rezultate pentru [SEARCH_TERM]",one_result:"[COUNT] rezultat pentru [SEARCH_TERM]",total_zero_results:"Niciun rezultat",total_one_result:"[COUNT] rezultat",total_many_results:"[COUNT] rezultate",alt_search:"Niciun rezultat pentru [SEARCH_TERM]. Se afi\u0219eaz\u0103 \xEEn schimb rezultatele pentru [DIFFERENT_TERM]",search_suggestion:"Niciun rezultat pentru [SEARCH_TERM]. \xCEncerca\u021Bi una dintre urm\u0103toarele c\u0103ut\u0103ri:",searching:"Se caut\u0103 dup\u0103: [SEARCH_TERM]...",results_label:"Rezultatele c\u0103ut\u0103rii",keyboard_navigate:"navigare",keyboard_select:"selectare",keyboard_clear:"\u0219tergere",keyboard_close:"\xEEnchidere",keyboard_search:"c\u0103utare",error_search:"C\u0103utarea a e\u0219uat",filter_selected_one:"[COUNT] selectat",filter_selected_many:"[COUNT] selectate",input_hint:"Rezultatele vor ap\u0103rea pe m\u0103sur\u0103 ce tasta\u021Bi",loading:"Se \xEEncarc\u0103"},fn={thanks_to:_n,comments:Qn,direction:mn,strings:bn};var dl={};x(dl,{comments:()=>pn,default:()=>Un,direction:()=>Bn,strings:()=>hn,thanks_to:()=>Fn});var Fn="Aleksandr Gordeev",pn="",Bn="ltr",hn={placeholder:"\u041F\u043E\u0438\u0441\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0435\u0449\u0435",search_label:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0438\u043B\u044C\u0442\u0440\u044B",zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",total_zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",total_one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442",total_many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432",alt_search:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",searching:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",results_label:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E\u0438\u0441\u043A\u0430",keyboard_navigate:"\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F",keyboard_select:"\u0432\u044B\u0431\u0440\u0430\u0442\u044C",keyboard_clear:"\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C",keyboard_close:"\u0437\u0430\u043A\u0440\u044B\u0442\u044C",keyboard_search:"\u043F\u043E\u0438\u0441\u043A",error_search:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u043E\u0438\u0441\u043A\u0430",filter_selected_one:"[COUNT] \u0432\u044B\u0431\u0440\u0430\u043D",filter_selected_many:"[COUNT] \u0432\u044B\u0431\u0440\u0430\u043D\u043E",input_hint:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u0431\u0443\u0434\u0443\u0442 \u043F\u043E\u044F\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u043F\u043E \u043C\u0435\u0440\u0435 \u0432\u0432\u043E\u0434\u0430",loading:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430"},Un={thanks_to:Fn,comments:pn,direction:Bn,strings:hn};var Al={};x(Al,{comments:()=>yn,default:()=>Nn,direction:()=>Zn,strings:()=>Gn,thanks_to:()=>xn});var xn="Andrija Sagicc",yn="",Zn="ltr",Gn={placeholder:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",clear_search:"\u0411\u0440\u0438\u0441\u0430\u045A\u0435",load_more:"\u041F\u0440\u0438\u043A\u0430\u0437 \u0432\u0438\u0448\u0435 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",search_label:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0441\u0430\u0458\u0442\u0430",filters_label:"\u0424\u0438\u043B\u0442\u0435\u0440\u0438",zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",total_zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",total_one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442",total_many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",alt_search:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u0440\u0438\u043A\u0430\u0437 \u0434\u043E\u0434\u0430\u0442\u043D\u0438\u043A \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [DIFFERENT_TERM]",search_suggestion:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u043E\u043A\u0443\u0448\u0430\u0458\u0442\u0435 \u0441\u0430 \u043D\u0435\u043A\u043E\u043C \u043E\u0434 \u0441\u043B\u0435\u0434\u0435\u045B\u0438\u0445 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430:",searching:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0442\u0435\u0440\u043C\u0438\u043D\u0430 [SEARCH_TERM]...",results_label:"\u0420\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0438 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0435",keyboard_navigate:"\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0458\u0430",keyboard_select:"\u0438\u0437\u0430\u0431\u0435\u0440\u0438",keyboard_clear:"\u043E\u0431\u0440\u0438\u0448\u0438",keyboard_close:"\u0437\u0430\u0442\u0432\u043E\u0440\u0438",keyboard_search:"\u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",error_search:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u043D\u0438\u0458\u0435 \u0443\u0441\u043F\u0435\u043B\u0430",filter_selected_one:"[COUNT] \u0438\u0437\u0430\u0431\u0440\u0430\u043D",filter_selected_many:"[COUNT] \u0438\u0437\u0430\u0431\u0440\u0430\u043D\u0438\u0445",input_hint:"\u0420\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0438 \u045B\u0435 \u0441\u0435 \u043F\u043E\u0458\u0430\u0432\u0459\u0438\u0432\u0430\u0442\u0438 \u0434\u043E\u043A \u043A\u0443\u0446\u0430\u0442\u0435",loading:"\u0423\u0447\u0438\u0442\u0430\u0432\u0430\u045A\u0435"},Nn={thanks_to:xn,comments:yn,direction:Zn,strings:Gn};var _l={};x(_l,{comments:()=>En,default:()=>Rn,direction:()=>kn,strings:()=>Ln,thanks_to:()=>Xn});var Xn="Montazar Al-Jaber ",En="",kn="ltr",Ln={placeholder:"S\xF6k",clear_search:"Rensa",load_more:"Visa fler tr\xE4ffar",search_label:"S\xF6k p\xE5 denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga tr\xE4ffar",many_results:"[SEARCH_TERM] gav [COUNT] tr\xE4ffar",one_result:"[SEARCH_TERM] gav [COUNT] tr\xE4ff",total_zero_results:"Inga tr\xE4ffar",total_one_result:"[COUNT] tr\xE4ff",total_many_results:"[COUNT] tr\xE4ffar",alt_search:"[SEARCH_TERM] gav inga tr\xE4ffar. Visar resultat f\xF6r [DIFFERENT_TERM] ist\xE4llet",search_suggestion:"[SEARCH_TERM] gav inga tr\xE4ffar. F\xF6rs\xF6k igen med en av f\xF6ljande s\xF6kord:",searching:"S\xF6ker efter [SEARCH_TERM]...",results_label:"S\xF6kresultat",keyboard_navigate:"navigera",keyboard_select:"v\xE4lj",keyboard_clear:"rensa",keyboard_close:"st\xE4ng",keyboard_search:"s\xF6k",error_search:"S\xF6kningen misslyckades",filter_selected_one:"[COUNT] vald",filter_selected_many:"[COUNT] valda",input_hint:"Resultat visas medan du skriver",loading:"L\xE4ser in"},Rn={thanks_to:Xn,comments:En,direction:kn,strings:Ln};var Ql={};x(Ql,{comments:()=>Sn,default:()=>Tn,direction:()=>Vn,strings:()=>Dn,thanks_to:()=>Wn});var Wn="Anonymous",Sn="",Vn="ltr",Dn={placeholder:"Tafuta",clear_search:"Futa",load_more:"Pakia matokeo zaidi",search_label:"Tafuta tovuti hii",filters_label:"Vichujio",zero_results:"Hakuna matokeo ya [SEARCH_TERM]",many_results:"Matokeo [COUNT] ya [SEARCH_TERM]",one_result:"Tokeo [COUNT] la [SEARCH_TERM]",total_zero_results:"Hakuna matokeo",total_one_result:"Tokeo [COUNT]",total_many_results:"Matokeo [COUNT]",alt_search:"Hakuna mayokeo ya [SEARCH_TERM]. Badala yake, inaonyesha matokeo ya [DIFFERENT_TERM]",search_suggestion:"Hakuna matokeo ya [SEARCH_TERM]. Jaribu mojawapo ya utafutaji ufuatao:",searching:"Kutafuta [SEARCH_TERM]...",results_label:"Matokeo ya utafutaji",keyboard_navigate:"sogeza",keyboard_select:"chagua",keyboard_clear:"futa",keyboard_close:"funga",keyboard_search:"tafuta",error_search:"Utafutaji umeshindwa",filter_selected_one:"[COUNT] imechaguliwa",filter_selected_many:"[COUNT] zimechaguliwa",input_hint:"Matokeo yataonekana unapoandika",loading:"Inapakia"},Tn={thanks_to:Wn,comments:Sn,direction:Vn,strings:Dn};var ml={};x(ml,{comments:()=>Hn,default:()=>wn,direction:()=>Mn,strings:()=>Yn,thanks_to:()=>vn});var vn="",Hn="",Mn="ltr",Yn={placeholder:"\u0BA4\u0BC7\u0B9F\u0BC1\u0B95",clear_search:"\u0B85\u0BB4\u0BBF\u0B95\u0BCD\u0B95\u0BC1\u0B95",load_more:"\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BC8\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B95",search_label:"\u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BB3\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BCD \u0BA4\u0BC7\u0B9F\u0BC1\u0B95",filters_label:"\u0BB5\u0B9F\u0BBF\u0B95\u0B9F\u0BCD\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",zero_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",many_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 [COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",one_result:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",total_zero_results:"\u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",total_one_result:"[COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",total_many_results:"[COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",alt_search:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD\u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8, \u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B92\u0BA4\u0BCD\u0BA4 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD [DIFFERENT_TERM]",search_suggestion:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD \u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8.\u0B87\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC0\u0B9F\u0BBE\u0BA9 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC8 \u0BA4\u0BC7\u0B9F\u0BC1\u0B95:",searching:"[SEARCH_TERM] \u0BA4\u0BC7\u0B9F\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BA4\u0BC1",results_label:"\u0BA4\u0BC7\u0B9F\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",keyboard_navigate:"\u0BB5\u0BB4\u0BBF\u0BA8\u0B9F\u0BA4\u0BCD\u0BA4\u0BC1",keyboard_select:"\u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1",keyboard_clear:"\u0B85\u0BB4\u0BBF",keyboard_close:"\u0BAE\u0BC2\u0B9F\u0BC1",keyboard_search:"\u0BA4\u0BC7\u0B9F\u0BC1",error_search:"\u0BA4\u0BC7\u0B9F\u0BB2\u0BCD \u0BA4\u0BCB\u0BB2\u0BCD\u0BB5\u0BBF",filter_selected_one:"[COUNT] \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1",filter_selected_many:"[COUNT] \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA9",input_hint:"\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BA4\u0B9F\u0BCD\u0B9F\u0B9A\u0BCD\u0B9A\u0BC1 \u0B9A\u0BC6\u0BAF\u0BCD\u0BAF\u0BC1\u0BAE\u0BCD\u0BAA\u0BCB\u0BA4\u0BC1 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0BA4\u0BCB\u0BA9\u0BCD\u0BB1\u0BC1\u0BAE\u0BCD",loading:"\u0B8F\u0BB1\u0BCD\u0BB1\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1"},wn={thanks_to:vn,comments:Hn,direction:Mn,strings:Yn};var bl={};x(bl,{comments:()=>Jn,default:()=>Kn,direction:()=>On,strings:()=>jn,thanks_to:()=>zn});var zn="Patiphon Loetsuthakun ",Jn="",On="ltr",jn={placeholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32",clear_search:"\u0E25\u0E49\u0E32\u0E07",load_more:"\u0E42\u0E2B\u0E25\u0E14\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21",search_label:"\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E1A\u0E19\u0E40\u0E27\u0E47\u0E1A\u0E44\u0E0B\u0E15\u0E4C",filters_label:"\u0E15\u0E31\u0E27\u0E01\u0E23\u0E2D\u0E07",zero_results:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",many_results:"\u0E1E\u0E1A [COUNT] \u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",one_result:"\u0E1E\u0E1A [COUNT] \u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",total_zero_results:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C",total_one_result:"[COUNT] \u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C",total_many_results:"[COUNT] \u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C",alt_search:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM] \u0E41\u0E2A\u0E14\u0E07\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32 [DIFFERENT_TERM] \u0E41\u0E17\u0E19",search_suggestion:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM] \u0E25\u0E2D\u0E07\u0E04\u0E33\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E41\u0E17\u0E19:",searching:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E04\u0E49\u0E19\u0E2B\u0E32 [SEARCH_TERM]...",results_label:"\u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32",keyboard_navigate:"\u0E19\u0E33\u0E17\u0E32\u0E07",keyboard_select:"\u0E40\u0E25\u0E37\u0E2D\u0E01",keyboard_clear:"\u0E25\u0E49\u0E32\u0E07",keyboard_close:"\u0E1B\u0E34\u0E14",keyboard_search:"\u0E04\u0E49\u0E19\u0E2B\u0E32",error_search:"\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27",filter_selected_one:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27 [COUNT] \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23",filter_selected_many:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27 [COUNT] \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23",input_hint:"\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E08\u0E30\u0E1B\u0E23\u0E32\u0E01\u0E0F\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E04\u0E38\u0E13\u0E1E\u0E34\u0E21\u0E1E\u0E4C",loading:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14"},Kn={thanks_to:zn,comments:Jn,direction:On,strings:jn};var fl={};x(fl,{comments:()=>qn,default:()=>tg,direction:()=>$n,strings:()=>eg,thanks_to:()=>Pn});var Pn="Taylan \xD6zg\xFCr Bildik",qn="",$n="ltr",eg={placeholder:"Ara\u015Ft\u0131r",clear_search:"Temizle",load_more:"Daha fazla sonu\xE7",search_label:"Site genelinde arama",filters_label:"Filtreler",zero_results:"[SEARCH_TERM] i\xE7in sonu\xE7 yok",many_results:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",one_result:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",total_zero_results:"Sonu\xE7 yok",total_one_result:"[COUNT] sonu\xE7",total_many_results:"[COUNT] sonu\xE7",alt_search:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Bunun yerine [DIFFERENT_TERM] i\xE7in sonu\xE7lar g\xF6steriliyor",search_suggestion:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Alternatif olarak a\u015Fa\u011F\u0131daki kelimelerden birini deneyebilirsiniz:",searching:"[SEARCH_TERM] ara\u015Ft\u0131r\u0131l\u0131yor...",results_label:"Arama sonu\xE7lar\u0131",keyboard_navigate:"gezin",keyboard_select:"se\xE7",keyboard_clear:"temizle",keyboard_close:"kapat",keyboard_search:"ara",error_search:"Arama ba\u015Far\u0131s\u0131z",filter_selected_one:"[COUNT] se\xE7ili",filter_selected_many:"[COUNT] se\xE7ili",input_hint:"Sonu\xE7lar siz yazarken g\xF6r\xFCnecektir",loading:"Y\xFCkleniyor"},tg={thanks_to:Pn,comments:qn,direction:$n,strings:eg};var Fl={};x(Fl,{comments:()=>sg,default:()=>ig,direction:()=>ag,strings:()=>rg,thanks_to:()=>lg});var lg="Vladyslav Lyshenko ",sg="",ag="ltr",rg={placeholder:"\u041F\u043E\u0448\u0443\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0449\u0435",search_label:"\u041F\u043E\u0448\u0443\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0456\u043B\u044C\u0442\u0440\u0438",zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",total_zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",total_one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442",total_many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432",alt_search:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0456\u0437 \u0442\u0430\u043A\u0438\u0445 \u0432\u0430\u0440\u0456\u0430\u043D\u0442\u0456\u0432",searching:"\u041F\u043E\u0448\u0443\u043A \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",results_label:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043F\u043E\u0448\u0443\u043A\u0443",keyboard_navigate:"\u043D\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u044F",keyboard_select:"\u0432\u0438\u0431\u0440\u0430\u0442\u0438",keyboard_clear:"\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u0438",keyboard_close:"\u0437\u0430\u043A\u0440\u0438\u0442\u0438",keyboard_search:"\u043F\u043E\u0448\u0443\u043A",error_search:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u043E\u0448\u0443\u043A\u0443",filter_selected_one:"[COUNT] \u0432\u0438\u0431\u0440\u0430\u043D\u043E",filter_selected_many:"[COUNT] \u0432\u0438\u0431\u0440\u0430\u043D\u043E",input_hint:"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u0437'\u044F\u0432\u043B\u044F\u0442\u0438\u043C\u0443\u0442\u044C\u0441\u044F \u043F\u0456\u0434 \u0447\u0430\u0441 \u0432\u0432\u0435\u0434\u0435\u043D\u043D\u044F",loading:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F"},ig={thanks_to:lg,comments:sg,direction:ag,strings:rg};var pl={};x(pl,{comments:()=>gg,default:()=>ug,direction:()=>og,strings:()=>cg,thanks_to:()=>ng});var ng="Long Nhat Nguyen",gg="",og="ltr",cg={placeholder:"T\xECm ki\u1EBFm",clear_search:"X\xF3a",load_more:"Nhi\u1EC1u k\u1EBFt qu\u1EA3 h\u01A1n",search_label:"T\xECm ki\u1EBFm trong trang n\xE0y",filters_label:"B\u1ED9 l\u1ECDc",zero_results:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",many_results:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",one_result:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",total_zero_results:"Kh\xF4ng c\xF3 k\u1EBFt qu\u1EA3",total_one_result:"[COUNT] k\u1EBFt qu\u1EA3",total_many_results:"[COUNT] k\u1EBFt qu\u1EA3",alt_search:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Ki\u1EC3m th\u1ECB k\u1EBFt qu\u1EA3 thay th\u1EBF v\u1EDBi [DIFFERENT_TERM]",search_suggestion:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Th\u1EED m\u1ED9t trong c\xE1c t\xECm ki\u1EBFm:",searching:"\u0110ang t\xECm ki\u1EBFm cho [SEARCH_TERM]...",results_label:"K\u1EBFt qu\u1EA3 t\xECm ki\u1EBFm",keyboard_navigate:"chuy\u1EC3n",keyboard_select:"ch\u1ECDn",keyboard_clear:"x\xF3a",keyboard_close:"\u0111\xF3ng",keyboard_search:"t\xECm ki\u1EBFm",error_search:"T\xECm ki\u1EBFm th\u1EA5t b\u1EA1i",filter_selected_one:"\u0110\xE3 ch\u1ECDn [COUNT]",filter_selected_many:"\u0110\xE3 ch\u1ECDn [COUNT]",input_hint:"K\u1EBFt qu\u1EA3 s\u1EBD xu\u1EA5t hi\u1EC7n khi b\u1EA1n nh\u1EADp",loading:"\u0110ang t\u1EA3i"},ug={thanks_to:ng,comments:gg,direction:og,strings:cg};var Bl={};x(Bl,{comments:()=>Ig,default:()=>_g,direction:()=>dg,strings:()=>Ag,thanks_to:()=>Cg});var Cg="Amber Song",Ig="",dg="ltr",Ag={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",total_zero_results:"\u65E0\u7ED3\u679C",total_one_result:"[COUNT] \u4E2A\u7ED3\u679C",total_many_results:"[COUNT] \u4E2A\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]...",results_label:"\u641C\u7D22\u7ED3\u679C",keyboard_navigate:"\u5BFC\u822A",keyboard_select:"\u9009\u62E9",keyboard_clear:"\u6E05\u9664",keyboard_close:"\u5173\u95ED",keyboard_search:"\u641C\u7D22",error_search:"\u641C\u7D22\u5931\u8D25",filter_selected_one:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",filter_selected_many:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",input_hint:"\u8F93\u5165\u65F6\u5C06\u663E\u793A\u7ED3\u679C",loading:"\u52A0\u8F7D\u4E2D"},_g={thanks_to:Cg,comments:Ig,direction:dg,strings:Ag};var hl={};x(hl,{comments:()=>mg,default:()=>Fg,direction:()=>bg,strings:()=>fg,thanks_to:()=>Qg});var Qg="Amber Song",mg="",bg="ltr",fg={placeholder:"\u641C\u5C0B",clear_search:"\u6E05\u9664",load_more:"\u8F09\u5165\u66F4\u591A\u7D50\u679C",search_label:"\u7AD9\u5167\u641C\u5C0B",filters_label:"\u7BE9\u9078",zero_results:"\u627E\u4E0D\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",many_results:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",one_result:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",total_zero_results:"\u7121\u7D50\u679C",total_one_result:"[COUNT] \u500B\u7D50\u679C",total_many_results:"[COUNT] \u500B\u7D50\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u6539\u70BA\u986F\u793A [DIFFERENT_TERM] \u7684\u76F8\u95DC\u7D50\u679C",search_suggestion:"\u627E\u4E0D\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u4EE5\u4E0B\u7684\u5EFA\u8B70\u4E4B\u4E00\u3002",searching:"\u6B63\u5728\u641C\u5C0B[SEARCH_TERM]...",results_label:"\u641C\u5C0B\u7D50\u679C",keyboard_navigate:"\u5C0E\u89BD",keyboard_select:"\u9078\u64C7",keyboard_clear:"\u6E05\u9664",keyboard_close:"\u95DC\u9589",keyboard_search:"\u641C\u5C0B",error_search:"\u641C\u5C0B\u5931\u6557",filter_selected_one:"\u5DF2\u9078\u64C7 [COUNT] \u500B",filter_selected_many:"\u5DF2\u9078\u64C7 [COUNT] \u500B",input_hint:"\u8F38\u5165\u6642\u5C07\u986F\u793A\u7D50\u679C",loading:"\u8F09\u5165\u4E2D"},Fg={thanks_to:Qg,comments:mg,direction:bg,strings:fg};var Ul={};x(Ul,{comments:()=>Bg,default:()=>xg,direction:()=>hg,strings:()=>Ug,thanks_to:()=>pg});var pg="Amber Song",Bg="",hg="ltr",Ug={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",total_zero_results:"\u65E0\u7ED3\u679C",total_one_result:"[COUNT] \u4E2A\u7ED3\u679C",total_many_results:"[COUNT] \u4E2A\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]...",results_label:"\u641C\u7D22\u7ED3\u679C",keyboard_navigate:"\u5BFC\u822A",keyboard_select:"\u9009\u62E9",keyboard_clear:"\u6E05\u9664",keyboard_close:"\u5173\u95ED",keyboard_search:"\u641C\u7D22",error_search:"\u641C\u7D22\u5931\u8D25",filter_selected_one:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",filter_selected_many:"\u5DF2\u9009\u62E9 [COUNT] \u4E2A",input_hint:"\u8F93\u5165\u65F6\u5C06\u663E\u793A\u7ED3\u679C",loading:"\u52A0\u8F7D\u4E2D"},xg={thanks_to:pg,comments:Bg,direction:hg,strings:Ug};var yg=[Wt,St,Vt,Dt,Tt,vt,Ht,Mt,Yt,wt,zt,Jt,Ot,jt,Kt,Pt,qt,$t,el,tl,ll,sl,al,rl,il,nl,gl,ol,cl,ul,Cl,Il,dl,Al,_l,Ql,ml,bl,fl,Fl,pl,Bl,hl,Ul],Us=yg,xs=["../../translations/af.json","../../translations/ar.json","../../translations/bn.json","../../translations/ca.json","../../translations/cs.json","../../translations/da.json","../../translations/de.json","../../translations/el.json","../../translations/en.json","../../translations/es.json","../../translations/eu.json","../../translations/fa.json","../../translations/fi.json","../../translations/fr.json","../../translations/gl.json","../../translations/he.json","../../translations/hi.json","../../translations/hr.json","../../translations/hu.json","../../translations/id.json","../../translations/it.json","../../translations/ja.json","../../translations/ko.json","../../translations/mi.json","../../translations/my.json","../../translations/nb.json","../../translations/nl.json","../../translations/nn.json","../../translations/no.json","../../translations/pl.json","../../translations/pt.json","../../translations/ro.json","../../translations/ru.json","../../translations/sr.json","../../translations/sv.json","../../translations/sw.json","../../translations/ta.json","../../translations/th.json","../../translations/tr.json","../../translations/uk.json","../../translations/vi.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function ys(l,e,t){let s=l.slice();return s[53]=e[t],s}function Zs(l){let e,t,s;function a(i){l[38](i)}let r={show_empty_filters:l[5],open_filters:l[6],available_filters:l[18],translate:l[20],automatic_translations:l[19],translations:l[7]};return l[0]!==void 0&&(r.selected_filters=l[0]),e=new hs({props:r}),Ce.push(()=>Ol(e,"selected_filters",a)),{c(){_t(e.$$.fragment)},m(i,n){_e(e,i,n),s=!0},p(i,n){let g={};n[0]&32&&(g.show_empty_filters=i[5]),n[0]&64&&(g.open_filters=i[6]),n[0]&262144&&(g.available_filters=i[18]),n[0]&524288&&(g.automatic_translations=i[19]),n[0]&128&&(g.translations=i[7]),!t&&n[0]&1&&(t=!0,g.selected_filters=i[0],Yl(()=>t=!1)),e.$set(g)},i(i){s||(k(e.$$.fragment,i),s=!0)},o(i){D(e.$$.fragment,i),s=!1},d(i){Qe(e,i)}}}function Gs(l){let e,t,s,a,r=[Ng,Gg],i=[];function n(g,C){return g[14]?0:1}return t=n(l,[-1,-1]),s=i[t]=r[t](l),{c(){e=F("div"),s.c(),_(e,"class","pagefind-ui__results-area svelte-e9gkc3")},m(g,C){h(g,e,C),i[t].m(e,null),a=!0},p(g,C){let u=t;t=n(g,C),t===u?i[t].p(g,C):(re(),D(i[u],1,1,()=>{i[u]=null}),ie(),s=i[t],s?s.p(g,C):(s=i[t]=r[t](g),s.c()),k(s,1),s.m(e,null))},i(g){a||(k(s),a=!0)},o(g){D(s),a=!1},d(g){g&&B(e),i[t].d()}}}function Gg(l){let e,t,s,a=[],r=new Map,i,n,g;function C(I,m){return I[13].results.length===0?kg:I[13].results.length===1?Eg:Xg}let u=C(l,[-1,-1]),A=u(l),c=V(l[13].results.slice(0,l[17])),d=I=>I[53].id;for(let I=0;Il[17]&&Xs(l);return{c(){e=F("p"),A.c(),t=Z(),s=F("ol");for(let I=0;II[17]?o?o.p(I,m):(o=Xs(I),o.c(),o.m(n.parentNode,n)):o&&(o.d(1),o=null)},i(I){if(!g){for(let m=0;m{g[c]=null}),ie(),a=g[s],a?a.p(e,A):(a=g[s]=n[s](e),a.c()),k(a,1),a.m(r.parentNode,r))},i(u){i||(k(a),i=!0)},o(u){D(a),i=!1},d(u){u&&(B(t),B(r)),g[s].d(u)}}}function Xs(l){let e,t=l[20]("load_more",l[19],l[7])+"",s,a,r;return{c(){e=F("button"),s=G(t),_(e,"type","button"),_(e,"class","pagefind-ui__button svelte-e9gkc3")},m(i,n){h(i,e,n),b(e,s),a||(r=w(e,"click",l[22]),a=!0)},p(i,n){n[0]&524416&&t!==(t=i[20]("load_more",i[19],i[7])+"")&&W(s,t)},d(i){i&&B(e),a=!1,r()}}}function Es(l){let e,t=l[20]("searching",l[19],l[7]).replace(/\[SEARCH_TERM\]/,l[16])+"",s;return{c(){e=F("p"),s=G(t),_(e,"class","pagefind-ui__message svelte-e9gkc3")},m(a,r){h(a,e,r),b(e,s)},p(a,r){r[0]&589952&&t!==(t=a[20]("searching",a[19],a[7]).replace(/\[SEARCH_TERM\]/,a[16])+"")&&W(s,t)},d(a){a&&B(e)}}}function Wg(l){let e,t,s,a,r,i,n,g=l[20]("clear_search",l[19],l[7])+"",C,u,A,c,d,o,I,m,f=l[12]&&Zs(l),p=l[15]&&Gs(l);return{c(){e=F("div"),t=F("form"),s=F("input"),i=Z(),n=F("button"),C=G(g),u=Z(),A=F("div"),f&&f.c(),c=Z(),p&&p.c(),_(s,"class","pagefind-ui__search-input svelte-e9gkc3"),_(s,"type","text"),_(s,"placeholder",a=l[20]("placeholder",l[19],l[7])),_(s,"title",r=l[20]("placeholder",l[19],l[7])),_(s,"autocapitalize","none"),_(s,"enterkeyhint","search"),s.autofocus=l[8],_(n,"class","pagefind-ui__search-clear svelte-e9gkc3"),z(n,"pagefind-ui__suppressed",!l[9]),_(A,"class","pagefind-ui__drawer svelte-e9gkc3"),z(A,"pagefind-ui__hidden",!l[15]),_(t,"class","pagefind-ui__form svelte-e9gkc3"),_(t,"role","search"),_(t,"aria-label",d=l[20]("search_label",l[19],l[7])),_(t,"action","javascript:void(0);"),_(e,"class","pagefind-ui svelte-e9gkc3"),z(e,"pagefind-ui--reset",l[1])},m(U,y){h(U,e,y),b(e,t),b(t,s),oe(s,l[9]),l[35](s),b(t,i),b(t,n),b(n,C),l[36](n),b(t,u),b(t,A),f&&f.m(A,null),b(A,c),p&&p.m(A,null),o=!0,l[8]&&s.focus(),I||(m=[w(s,"focus",l[21]),w(s,"keydown",l[33]),w(s,"input",l[34]),w(n,"click",l[37]),w(t,"submit",Sg)],I=!0)},p(U,y){(!o||y[0]&524416&&a!==(a=U[20]("placeholder",U[19],U[7])))&&_(s,"placeholder",a),(!o||y[0]&524416&&r!==(r=U[20]("placeholder",U[19],U[7])))&&_(s,"title",r),(!o||y[0]&256)&&(s.autofocus=U[8]),y[0]&512&&s.value!==U[9]&&oe(s,U[9]),(!o||y[0]&524416)&&g!==(g=U[20]("clear_search",U[19],U[7])+"")&&W(C,g),(!o||y[0]&512)&&z(n,"pagefind-ui__suppressed",!U[9]),U[12]?f?(f.p(U,y),y[0]&4096&&k(f,1)):(f=Zs(U),f.c(),k(f,1),f.m(A,c)):f&&(re(),D(f,1,1,()=>{f=null}),ie()),U[15]?p?(p.p(U,y),y[0]&32768&&k(p,1)):(p=Gs(U),p.c(),k(p,1),p.m(A,null)):p&&(re(),D(p,1,1,()=>{p=null}),ie()),(!o||y[0]&32768)&&z(A,"pagefind-ui__hidden",!U[15]),(!o||y[0]&524416&&d!==(d=U[20]("search_label",U[19],U[7])))&&_(t,"aria-label",d),(!o||y[0]&2)&&z(e,"pagefind-ui--reset",U[1])},i(U){o||(k(f),k(p),o=!0)},o(U){D(f),D(p),o=!1},d(U){U&&B(e),l[35](null),l[36](null),f&&f.d(),p&&p.d(),I=!1,H(m)}}}var Sg=l=>l.preventDefault();function Vg(l,e,t){let s={},a=xs.map(Q=>Q.match(/([^\/]+)\.json$/)[1]);for(let Q=0;QL[Q]??X[Q]??"",kl=Q=>{if(!q)return;let X=document.activeElement,L=X&&(X.tagName==="INPUT"||X.tagName==="TEXTAREA"||X.isContentEditable);Q.key==="/"&&!L&&(Q.preventDefault(),v?.focus())};xt(()=>{let Q=document?.querySelector?.("html")?.getAttribute?.("lang")||"en",X=Qt(Q.toLocaleLowerCase());t(19,El=s[`${X.language}-${X.script}-${X.region}`]||s[`${X.language}-${X.region}`]||s[`${X.language}`]||s.en),q&&document.addEventListener("keydown",kl)}),yt(()=>{E?.destroy?.(),E=null,q&&document.removeEventListener("keydown",kl)});let Ll=async()=>{if(!bt&&(t(12,bt=!0),!E)){let Q;try{Q=await import(`${r}pagefind.js`)}catch(L){console.error(L),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindUI"].join(` +`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript.src??"bad script location"}]`):console.error("no known script location")}u||t(24,u=C?12:30);let X={...m||{},excerptLength:u};await Q.options(X);for(let L of f){if(!L.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let Y=L.bundlePath;delete L.bundlePath,await Q.mergeIndex(Y,L)}E=Q,Ws()}},Ws=async()=>{E&&(Xl=await E.filters(),(!Ie||!Object.keys(Ie).length)&&t(18,Ie=Xl))},Ss=Q=>{let X={};return Object.entries(Q).filter(([,L])=>L).forEach(([L])=>{let[Y,ne]=L.split(/:(.*)$/);X[Y]=X[Y]||[],X[Y].push(ne)}),X},de,Vs=async(Q,X)=>{if(!Q){t(15,Ft=!1),de&&clearTimeout(de);return}let L=Ss(X),Y=()=>Ds(Q,L);I>0&&Q?(de&&clearTimeout(de),de=setTimeout(Y,I),await Rl(),E.preload(Q,{filters:L})):Y(),Ts()},Rl=async()=>{for(;!E;)Ll(),await new Promise(Q=>setTimeout(Q,50))},Ds=async(Q,X)=>{t(16,Nl=Q||""),typeof c=="function"&&(Q=c(Q)),t(14,ft=!0),t(15,Ft=!0),await Rl();let L=++Gl,Y={filters:X};J&&typeof J=="object"&&(Y.sort=J);let ne=await E.search(Q,Y);Gl===L&&(ne.filters&&Object.keys(ne.filters)?.length&&t(18,Ie=ne.filters),t(13,Zl=ne),t(14,ft=!1),t(17,pt=i))},Ts=()=>{let Q=gt.offsetWidth;Q!=Ls&&t(10,v.style.paddingRight=`${Q+2}px`,v)},vs=Q=>{Q?.preventDefault(),t(17,pt+=i)},Hs=Q=>{Q.key==="Escape"&&(t(9,S=""),v.blur()),Q.key==="Enter"&&Q.preventDefault()};function Ms(){S=this.value,t(9,S),t(23,p)}function Ys(Q){Ce[Q?"unshift":"push"](()=>{v=Q,t(10,v)})}function ws(Q){Ce[Q?"unshift":"push"](()=>{gt=Q,t(11,gt)})}let zs=()=>{t(9,S=""),v.blur()};function Js(Q){N=Q,t(0,N)}return l.$$set=Q=>{"base_path"in Q&&t(25,r=Q.base_path),"page_size"in Q&&t(26,i=Q.page_size),"reset_styles"in Q&&t(1,n=Q.reset_styles),"show_images"in Q&&t(2,g=Q.show_images),"show_sub_results"in Q&&t(3,C=Q.show_sub_results),"excerpt_length"in Q&&t(24,u=Q.excerpt_length),"process_result"in Q&&t(4,A=Q.process_result),"process_term"in Q&&t(27,c=Q.process_term),"show_empty_filters"in Q&&t(5,d=Q.show_empty_filters),"open_filters"in Q&&t(6,o=Q.open_filters),"debounce_timeout_ms"in Q&&t(28,I=Q.debounce_timeout_ms),"pagefind_options"in Q&&t(29,m=Q.pagefind_options),"merge_index"in Q&&t(30,f=Q.merge_index),"trigger_search_term"in Q&&t(23,p=Q.trigger_search_term),"translations"in Q&&t(7,U=Q.translations),"autofocus"in Q&&t(8,y=Q.autofocus),"focus_on_slash"in Q&&t(31,q=Q.focus_on_slash),"sort"in Q&&t(32,J=Q.sort),"selected_filters"in Q&&t(0,N=Q.selected_filters)},l.$$.update=()=>{l.$$.dirty[0]&8388608&&p&&(t(9,S=p),t(23,p="")),l.$$.dirty[0]&513&&Vs(S,N)},[N,n,g,C,A,d,o,U,y,S,v,gt,bt,Zl,ft,Ft,Nl,pt,Ie,El,Rs,Ll,vs,p,u,r,i,c,I,m,f,q,J,Hs,Ms,Ys,ws,zs,Js]}var xl=class extends M{constructor(e){super(),K(this,e,Vg,Wg,O,{base_path:25,page_size:26,reset_styles:1,show_images:2,show_sub_results:3,excerpt_length:24,process_result:4,process_term:27,show_empty_filters:5,open_filters:6,debounce_timeout_ms:28,pagefind_options:29,merge_index:30,trigger_search_term:23,translations:7,autofocus:8,focus_on_slash:31,sort:32,selected_filters:0},null,[-1,-1])}},ks=xl;var yl;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(yl=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?ui.js.*$/)[1])}catch{yl="/pagefind/"}var mt=class{constructor(e){this._pfs=null;let t=e.element??"[data-pagefind-ui]",s=e.bundlePath??yl,a=e.pageSize??5,r=e.resetStyles??!0,i=e.showImages??!0,n=e.showSubResults??!1,g=e.excerptLength??0,C=e.processResult??null,u=e.processTerm??null,A=e.showEmptyFilters??!0,c=e.openFilters??[],d=e.debounceTimeoutMs??300,o=e.mergeIndex??[],I=e.translations??[],m=e.autofocus??!1,f=e.focusOnSlash??!1,p=e.sort??null;delete e.element,delete e.bundlePath,delete e.pageSize,delete e.resetStyles,delete e.showImages,delete e.showSubResults,delete e.excerptLength,delete e.processResult,delete e.processTerm,delete e.showEmptyFilters,delete e.openFilters,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,delete e.autofocus,delete e.focusOnSlash,delete e.sort;let U=t instanceof HTMLElement?t:document.querySelector(t);U?this._pfs=new ks({target:U,props:{base_path:s,page_size:a,reset_styles:r,show_images:i,show_sub_results:n,excerpt_length:g,process_result:C,process_term:u,show_empty_filters:A,open_filters:c,debounce_timeout_ms:d,merge_index:o,translations:I,autofocus:m,focus_on_slash:f,sort:p,pagefind_options:e}}):console.error(`Pagefind UI couldn't find the selector ${t}`)}triggerSearch(e){this._pfs.$$set({trigger_search_term:e})}triggerFilters(e){let t={};for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let r of a)t[`${s}:${r}`]=!0;else t[`${s}:${a}`]=!0;this._pfs.$$set({selected_filters:t})}destroy(){this._pfs.$destroy()}};window.PagefindUI=mt;})(); diff --git a/pagefind/pagefind-worker.js b/pagefind/pagefind-worker.js new file mode 100644 index 0000000..e2b1dd2 --- /dev/null +++ b/pagefind/pagefind-worker.js @@ -0,0 +1,6 @@ +const pagefind_version="1.5.2";let wasm_bindgen=(function(exports){let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString();}function add_synthetic_filter(ptr,filter){const ptr0=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.add_synthetic_filter(ptr,ptr0,len0);return ret>>>0;}exports.add_synthetic_filter=add_synthetic_filter;function enter_playground_mode(ptr){const ret=wasm.enter_playground_mode(ptr);return ret>>>0;}exports.enter_playground_mode=enter_playground_mode;function filters(ptr){let deferred1_0;let deferred1_1;try{const ret=wasm.filters(ptr);deferred1_0=ret[0];deferred1_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred1_0,deferred1_1,1);}}exports.filters=filters;function init_pagefind(metadata_bytes){const ptr0=passArray8ToWasm0(metadata_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.init_pagefind(ptr0,len0);return ret>>>0;}exports.init_pagefind=init_pagefind;function load_filter_chunk(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_filter_chunk(ptr,ptr0,len0);return ret>>>0;}exports.load_filter_chunk=load_filter_chunk;function load_index_chunk(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_index_chunk(ptr,ptr0,len0);return ret>>>0;}exports.load_index_chunk=load_index_chunk;function request_all_filter_indexes(ptr){let deferred1_0;let deferred1_1;try{const ret=wasm.request_all_filter_indexes(ptr);deferred1_0=ret[0];deferred1_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred1_0,deferred1_1,1);}}exports.request_all_filter_indexes=request_all_filter_indexes;function request_filter_indexes(ptr,filters){let deferred2_0;let deferred2_1;try{const ptr0=passStringToWasm0(filters,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.request_filter_indexes(ptr,ptr0,len0);deferred2_0=ret[0];deferred2_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred2_0,deferred2_1,1);}}exports.request_filter_indexes=request_filter_indexes;function request_indexes(ptr,query){let deferred2_0;let deferred2_1;try{const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.request_indexes(ptr,ptr0,len0);deferred2_0=ret[0];deferred2_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred2_0,deferred2_1,1);}}exports.request_indexes=request_indexes;function search(ptr,query,original_query,filter,sort,exact,exact_diacritics){let deferred5_0;let deferred5_1;try{const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ptr1=passStringToWasm0(original_query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len1=WASM_VECTOR_LEN;const ptr2=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len2=WASM_VECTOR_LEN;const ptr3=passStringToWasm0(sort,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len3=WASM_VECTOR_LEN;const ret=wasm.search(ptr,ptr0,len0,ptr1,len1,ptr2,len2,ptr3,len3,exact,exact_diacritics);deferred5_0=ret[0];deferred5_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred5_0,deferred5_1,1);}}exports.search=search;function set_ranking_weights(ptr,weights){const ptr0=passStringToWasm0(weights,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.set_ranking_weights(ptr,ptr0,len0);return ret>>>0;}exports.set_ranking_weights=set_ranking_weights;function __wbg_get_imports(){const import0={__proto__:null,__wbindgen_init_externref_table:function(){const table=wasm.__wbindgen_externrefs;const offset=table.grow(4);table.set(0,undefined);table.set(offset+0,undefined);table.set(offset+1,null);table.set(offset+2,true);table.set(offset+3,false);},};return{__proto__:null,"./pagefind_web_bg.js":import0,};}function getStringFromWasm0(ptr,len){ptr=ptr>>>0;return decodeText(ptr,len);}let cachedUint8ArrayMemory0=null;function getUint8ArrayMemory0(){if(cachedUint8ArrayMemory0===null||cachedUint8ArrayMemory0.byteLength===0){cachedUint8ArrayMemory0=new Uint8Array(wasm.memory.buffer);}return cachedUint8ArrayMemory0;}function passArray8ToWasm0(arg,malloc){const ptr=malloc(arg.length*1,1)>>>0;getUint8ArrayMemory0().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr;}function passStringToWasm0(arg,malloc,realloc){if(realloc===undefined){const buf=cachedTextEncoder.encode(arg);const ptr=malloc(buf.length,1)>>>0;getUint8ArrayMemory0().subarray(ptr,ptr+buf.length).set(buf);WASM_VECTOR_LEN=buf.length;return ptr;}let len=arg.length;let ptr=malloc(len,1)>>>0;const mem=getUint8ArrayMemory0();let offset=0;for(;offset0x7F)break;mem[ptr+offset]=code;}if(offset!==len){if(offset!==0){arg=arg.slice(offset);}ptr=realloc(ptr,len,len=offset+arg.length*3,1)>>>0;const view=getUint8ArrayMemory0().subarray(ptr+offset,ptr+len);const ret=cachedTextEncoder.encodeInto(arg,view);offset+=ret.written;ptr=realloc(ptr,len,offset,1)>>>0;}WASM_VECTOR_LEN=offset;return ptr;}let cachedTextDecoder=new TextDecoder('utf-8',{ignoreBOM:true,fatal:true});cachedTextDecoder.decode();function decodeText(ptr,len){return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr,ptr+len));}const cachedTextEncoder=new TextEncoder();if(!('encodeInto'in cachedTextEncoder)){cachedTextEncoder.encodeInto=function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length};};}let WASM_VECTOR_LEN=0;let wasmModule,wasm;function __wbg_finalize_init(instance,module){wasm=instance.exports;wasmModule=module;cachedUint8ArrayMemory0=null;wasm.__wbindgen_start();return wasm;}async function __wbg_load(module,imports){if(typeof Response==='function'&&module instanceof Response){if(typeof WebAssembly.instantiateStreaming==='function'){try{return await WebAssembly.instantiateStreaming(module,imports);}catch(e){const validResponse=module.ok&&expectedResponseType(module.type);if(validResponse&&module.headers.get('Content-Type')!=='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e);}else{throw e;}}}const bytes=await module.arrayBuffer();return await WebAssembly.instantiate(bytes,imports);}else{const instance=await WebAssembly.instantiate(module,imports);if(instance instanceof WebAssembly.Instance){return{instance,module};}else{return instance;}}function expectedResponseType(type){switch(type){case'basic':case'cors':case'default':return true;}return false;}}function initSync(module){if(wasm!==undefined)return wasm;if(module!==undefined){if(Object.getPrototypeOf(module)===Object.prototype){({module}=module)}else{console.warn('using deprecated parameters for `initSync()`; pass a single object instead')}}const imports=__wbg_get_imports();if(!(module instanceof WebAssembly.Module)){module=new WebAssembly.Module(module);}const instance=new WebAssembly.Instance(module,imports);return __wbg_finalize_init(instance,module);}async function __wbg_init(module_or_path){if(wasm!==undefined)return wasm;if(module_or_path!==undefined){if(Object.getPrototypeOf(module_or_path)===Object.prototype){({module_or_path}=module_or_path)}else{console.warn('using deprecated parameters for the initialization function; pass a single object instead')}}if(module_or_path===undefined&&script_src!==undefined){module_or_path=script_src.replace(/\.js$/,"_bg.wasm");}const imports=__wbg_get_imports();if(typeof module_or_path==='string'||(typeof Request==='function'&&module_or_path instanceof Request)||(typeof URL==='function'&&module_or_path instanceof URL)){module_or_path=fetch(module_or_path);}const{instance,module}=await __wbg_load(await module_or_path,imports);return __wbg_finalize_init(instance,module);}return Object.assign(__wbg_init,{initSync},exports);})({__proto__:null});"use strict";(()=>{var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:true,configurable:true,writable:true,value}):obj[key]=value;var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!=="symbol"?key+"":key,value);var u8=Uint8Array;var u16=Uint16Array;var u32=Uint32Array;var fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);var fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);var clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var freb=function(eb,start){var b=new u16(31);for(var i2=0;i2<31;++i2){b[i2]=start+=1<>>1|(i&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2;x=(x&61680)>>>4|(x&3855)<<4;rev[i]=((x&65280)>>>8|(x&255)<<8)>>>1;}var x;var i;var hMap=function(cd,mb,r){var s=cd.length;var i2=0;var l=new u16(mb);for(;i2>>rvb]=sv;}}}}else{co=new u16(s);for(i2=0;i2>>15-cd[i2];}}}return co;};var flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;var i;for(i=144;i<256;++i)flt[i]=9;var i;for(i=256;i<280;++i)flt[i]=7;var i;for(i=280;i<288;++i)flt[i]=8;var i;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var i;var flrm=hMap(flt,9,1);var fdrm=hMap(fdt,5,1);var max=function(a){var m=a[0];for(var i2=1;i2m)m=a[i2];}return m;};var bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m;};var bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7);};var shft=function(p){return(p+7)/8|0;};var slc=function(v,s,e){if(s==null||s<0)s=0;if(e==null||e>v.length)e=v.length;var n=new(v.BYTES_PER_ELEMENT==2?u16:v.BYTES_PER_ELEMENT==4?u32:u8)(e-s);n.set(v.subarray(s,e));return n;};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];var err=function(ind,msg,nt){var e=new Error(msg||ec[ind]);e.code=ind;if(Error.captureStackTrace)Error.captureStackTrace(e,err);if(!nt)throw e;return e;};var inflt=function(dat,buf,st){var sl=dat.length;if(!sl||st&&st.f&&!st.l)return buf||new u8(0);var noBuf=!buf||st;var noSt=!st||st.i;if(!st)st={};if(!buf)buf=new u8(sl*3);var cbuf=function(l2){var bl=buf.length;if(l2>bl){var nbuf=new u8(Math.max(bl*2,l2));nbuf.set(buf);buf=nbuf;}};var final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;var tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);pos+=3;if(!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){if(noSt)err(0);break;}if(noBuf)cbuf(bt+l);buf.set(dat.subarray(s,t),bt);st.b=bt+=l,st.p=pos=t*8,st.f=final;continue;}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;var tl=hLit+bits(dat,pos+5,31)+1;pos+=14;var ldt=new u8(tl);var clt=new u8(19);for(var i2=0;i2>>4;if(s<16){ldt[i2++]=s;}else{var c=0,n=0;if(s==16)n=3+bits(dat,pos,3),pos+=2,c=ldt[i2-1];else if(s==17)n=3+bits(dat,pos,7),pos+=3;else if(s==18)n=11+bits(dat,pos,127),pos+=7;while(n--)ldt[i2++]=c;}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1);}else err(1);if(pos>tbts){if(noSt)err(0);break;}}if(noBuf)cbuf(bt+131072);var lms=(1<>>4;pos+=c&15;if(pos>tbts){if(noSt)err(0);break;}if(!c)err(2);if(sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break;}else{var add=sym-254;if(sym>264){var i2=sym-257,b=fleb[i2];add=bits(dat,pos,(1<>>4;if(!d)err(3);pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){if(noSt)err(0);break;}if(noBuf)cbuf(bt+131072);var end=bt+add;for(;bt>3&1)+(flg>>4&1);zs>0;zs-=!d[st++]);return st+(flg&2);};var gzl=function(d){var l=d.length;return(d[l-4]|d[l-3]<<8|d[l-2]<<16|d[l-1]<<24)>>>0;};function gunzipSync(data,out){return inflt(data.subarray(gzs(data),-8),out||new u8(gzl(data)));}var td=typeof TextDecoder!="undefined"&&new TextDecoder();var tds=0;try{td.decode(et,{stream:true});tds=1;}catch(e){}var gz_default=gunzipSync;var calculate_excerpt_region=(word_positions,excerpt_length)=>{if(word_positions.length===0){return 0;}let words=[];for(const word of word_positions){words[word.location]=words[word.location]||0;words[word.location]+=word.balanced_score;}if(words.length<=excerpt_length){return 0;}let densest=words.slice(0,excerpt_length).reduce((partialSum,a)=>partialSum+a,0);let working_sum=densest;let densest_at=[0];for(let i2=0;i2densest){densest=working_sum;densest_at=[i2];}else if(working_sum===densest&&densest_at[densest_at.length-1]===i2-1){densest_at.push(i2);}}let midpoint=densest_at[Math.floor(densest_at.length/2)];return midpoint;};var build_excerpt=(content,start,length,locations,not_before,not_from)=>{let is_zws_delimited=content.includes("\u200B");let fragment_words=[];if(is_zws_delimited){fragment_words=content.split("\u200B");}else{fragment_words=content.split(/[\r\n\s]+/g);}let endcap=not_from??fragment_words.length;let startcap=not_before??0;if(endcap-startcapendcap){start=endcap-length;}if(start`)){continue;}fragment_words[word]=`${fragment_words[word]}`;}const excerpt=fragment_words.slice(start,start+length).join(joiner).trim();return{excerpt,plain_excerpt};};var calculate_sub_results=(fragment,desired_excerpt_length)=>{const effective_url=fragment.meta?.url||fragment.url;const anchors=fragment.anchors.filter((a)=>/h\d/i.test(a.element)&&a.text?.length&&/\S/.test(a.text)).sort((a,b)=>a.location-b.location);const results=[];let current_anchor_position=0;let current_anchor={title:fragment.meta["title"],url:effective_url,weighted_locations:[],locations:[],excerpt:"",plain_excerpt:""};const add_result=(end_range)=>{if(current_anchor.locations.length){const relative_weighted_locations=current_anchor.weighted_locations.map((l)=>{return{weight:l.weight,balanced_score:l.balanced_score,location:l.location-current_anchor_position};});const excerpt_start=calculate_excerpt_region(relative_weighted_locations,desired_excerpt_length)+current_anchor_position;const excerpt_length=end_range?Math.min(end_range-excerpt_start,desired_excerpt_length):desired_excerpt_length;const excerpts=build_excerpt(fragment.raw_content??"",excerpt_start,excerpt_length,current_anchor.locations,current_anchor_position,end_range);current_anchor.excerpt=excerpts.excerpt;current_anchor.plain_excerpt=excerpts.plain_excerpt;results.push(current_anchor);}};for(let word of fragment.weighted_locations){if(!anchors.length||word.location=anchors[0].location){next_anchor=anchors.shift();}let anchored_url=effective_url;try{const url_is_fq=/^((https?:)?\/\/)/.test(anchored_url);if(url_is_fq){let fq_url=new URL(anchored_url);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString();}else{if(!/^\//.test(anchored_url)){anchored_url=`/${anchored_url}`;}let fq_url=new URL(`https://example.com${anchored_url}`);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString().replace(/^https:\/\/example.com/,"");}}catch(e){console.error(`Pagefind: Couldn't process ${anchored_url} for a search result`);}current_anchor_position=next_anchor.location;current_anchor={title:next_anchor.text,url:anchored_url,anchor:next_anchor,weighted_locations:[word],locations:[word.location],excerpt:"",plain_excerpt:""};}}add_result(anchors[0]?.location);return results;};var import_meta={};var asyncSleep=async(ms=100)=>{return new Promise((r)=>setTimeout(r,ms));};var normalizeDiacritics=(str)=>{return str.normalize("NFD").replace(/\p{M}/gu,"");};var isBrowser=()=>typeof window!=="undefined"&&typeof document!=="undefined";var needsWordSegmentation=(lang)=>{if(!lang)return false;const primaryLang=lang.split("-")[0].toLowerCase();return["zh","ja","th"].includes(primaryLang);};var PagefindInstance=class{constructor(opts={}){__publicField(this,"backend");__publicField(this,"decoder");__publicField(this,"wasm");__publicField(this,"basePath");__publicField(this,"baseUrl");__publicField(this,"primary");__publicField(this,"indexWeight");__publicField(this,"excerptLength");__publicField(this,"mergeFilter");__publicField(this,"ranking");__publicField(this,"highlightParam");__publicField(this,"exactDiacritics");__publicField(this,"metaCacheTag");__publicField(this,"loaded_chunks");__publicField(this,"loaded_filters");__publicField(this,"loaded_fragments");__publicField(this,"fetchQueue",[]);__publicField(this,"activeFetches",0);__publicField(this,"maxConcurrentFetches",100);__publicField(this,"raw_ptr");__publicField(this,"initError");__publicField(this,"searchMeta");__publicField(this,"languages");__publicField(this,"loadedLanguage");__publicField(this,"includeCharacters");__publicField(this,"version");__publicField(this,"loadedVersion");this.version=pagefind_version;this.backend=wasm_bindgen;this.decoder=new TextDecoder("utf-8");this.wasm=null;let basePath=opts.basePath||"/pagefind/";let primary=opts.primary||false;if(primary&&!opts.basePath&&isBrowser()){basePath=this.initPrimaryBasePath(basePath);}if(/[^\/]$/.test(basePath)){basePath=`${basePath}/`;}if(isBrowser()&&window?.location?.origin&&basePath.startsWith(window.location.origin)){basePath=basePath.replace(window.location.origin,"");}this.basePath=basePath;this.baseUrl=opts.baseUrl||this.getDefaultBaseUrl(basePath);if(!/^(\/|https?:\/\/)/.test(this.baseUrl)){this.baseUrl=`/${this.baseUrl}`;}this.primary=primary;this.indexWeight=opts.indexWeight??1;this.excerptLength=opts.excerptLength??30;this.mergeFilter=opts.mergeFilter??{};this.ranking=opts.ranking;this.highlightParam=opts.highlightParam??null;this.exactDiacritics=opts.exactDiacritics??false;this.metaCacheTag=opts.metaCacheTag??null;this.loaded_chunks={};this.loaded_filters={};this.loaded_fragments={};this.raw_ptr=null;this.initError=null;this.searchMeta=null;this.languages=null;}throttledFetch(input){return new Promise((resolve,reject)=>{this.fetchQueue.push({resolve,reject,input});this.dequeueNextFetch();});}dequeueNextFetch(){while(this.fetchQueue.length>0&&this.activeFetchesb.page_count-a.page_count);if(topLang[0])return topLang[0];}throw new Error("Pagefind Error: No language indexes found.");}async loadMeta(index){try{let compressed_resp=await this.throttledFetch(`${this.basePath}pagefind.${index}.pf_meta`);let compressed_meta=await compressed_resp.arrayBuffer();this.searchMeta=this.decompress(new Uint8Array(compressed_meta),"Pagefind metadata");}catch(e){console.error(`Failed to load the meta index: +${e?.toString()}`);}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await this.throttledFetch(wasm_url);let compressed_wasm=await compressed_resp.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression");}this.wasm=await this.backend({module_or_path:final_wasm});}catch(e){console.error(`Failed to load the Pagefind WASM: +${e?.toString()}`);throw new Error(`Failed to load the Pagefind WASM: +${e?.toString()}`);}}async _loadGenericChunk(url,method){try{let compressed_resp=await this.throttledFetch(url);let compressed_chunk=await compressed_resp.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk);}catch(e){console.error(`Failed to load the index chunk ${url}: +${e?.toString()}`);}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk");}return await this.loaded_chunks[hash];}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk");}return await this.loaded_filters[hash];}async _loadFragment(hash){let compressed_resp=await this.throttledFetch(`${this.basePath}fragment/${hash}.pf_fragment`);let compressed_fragment=await compressed_resp.arrayBuffer();let fragment=this.decompress(new Uint8Array(compressed_fragment),`Fragment ${hash}`);return JSON.parse(new TextDecoder().decode(fragment));}async loadFragment(hash,weighted_locations=[],search_term){if(!this.loaded_fragments[hash]){this.loaded_fragments[hash]=this._loadFragment(hash);}let fragment=await this.loaded_fragments[hash];fragment.weighted_locations=weighted_locations;fragment.locations=weighted_locations.map((l)=>l.location);if(!fragment.raw_content){fragment.raw_content=fragment.content.replace(//g,">");fragment.content=fragment.content.replace(/\u200B/g,"");}if(!fragment.raw_url){fragment.raw_url=fragment.url;}fragment.url=this.processedUrl(fragment.raw_url,search_term);const excerpt_start=calculate_excerpt_region(weighted_locations,this.excerptLength);const excerpts=build_excerpt(fragment.raw_content,excerpt_start,this.excerptLength,fragment.locations);fragment.excerpt=excerpts.excerpt;fragment.plain_excerpt=excerpts.plain_excerpt;fragment.sub_results=calculate_sub_results(fragment,this.excerptLength);return fragment;}fullUrl(raw){if(/^(https?:)?\/\//.test(raw)){return raw;}return`${this.baseUrl}/${raw}`.replace(/\/+/g,"/").replace(/^(https?:\/)/,"$1/");}processedUrl(url,search_term){const normalized=this.fullUrl(url);if(this.highlightParam===null){return normalized;}let individual_terms=search_term.split(/\s+/);try{let processed=new URL(normalized);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term);}return processed.toString();}catch(e){try{let processed=new URL(`https://example.com${normalized}`);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term);}return processed.toString().replace(/^https:\/\/example\.com/,"");}catch(e2){return normalized;}}}async getPtr(){while(this.raw_ptr===null){if(this.initError){throw this.initError;}await asyncSleep(50);}if(!this.raw_ptr){console.error("Pagefind: WASM Error (No pointer)");throw new Error("Pagefind: WASM Error (No pointer)");}return this.raw_ptr;}stringifyFilters(obj={}){return JSON.stringify(obj);}stringifySorts(obj={}){let sorts=Object.entries(obj);for(let[sort,direction]of sorts){if(sorts.length>1){console.warn(`Pagefind was provided multiple sort options in this search, but can only operate on one. Using the ${sort} sort.`);}if(direction!=="asc"&&direction!=="desc"){console.warn(`Pagefind was provided a sort with unknown direction ${direction}. Supported: [asc, desc]`);}return`${sort}:${direction}`;}return``;}async filters(){let ptr=await this.getPtr();let filters=this.backend.request_all_filter_indexes(ptr);let filter_array=JSON.parse(filters);if(Array.isArray(filter_array)){let filter_chunks=filter_array.filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...filter_chunks]);}ptr=await this.getPtr();let results=this.backend.filters(ptr);return JSON.parse(results);}async preload(term,options={}){await this.search(term,{...options,preload:true});}async search(term,options={}){options={verbose:false,filters:{},sort:{},...options};const log=(str)=>{if(options.verbose)console.log(str);};log(`Starting search on ${this.basePath}`);let start=Date.now();let ptr=await this.getPtr();let filter_only=term===null;term=term??"";let exact_search=/^\s*".+"\s*$/.test(term);if(exact_search){log(`Running an exact search`);}let trueLanguage=null;try{trueLanguage=Intl.getCanonicalLocales(this.loadedLanguage)[0];}catch(err2){}const term_chunks=[];if(trueLanguage&&typeof Intl.Segmenter!=="undefined"){const graphemeSegmenter=new Intl.Segmenter(trueLanguage,{granularity:"grapheme"});if(needsWordSegmentation(trueLanguage)){const wordSegmenter=new Intl.Segmenter(trueLanguage,{granularity:"word"});for(const{segment:word}of wordSegmenter.segment(term)){const wordChunks=[];for(const{segment:grapheme}of graphemeSegmenter.segment(word)){if(this.includeCharacters?.includes(grapheme)){wordChunks.push(grapheme);}else if(!/^\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}$/u.test(grapheme)){wordChunks.push(grapheme.toLocaleLowerCase());}}if(wordChunks.length>0){term_chunks.push(wordChunks.join(""));}}term=term_chunks.join(" ").replace(/\s{2,}/g," ").trim();}else{for(const{segment:grapheme}of graphemeSegmenter.segment(term)){if(this.includeCharacters?.includes(grapheme)){term_chunks.push(grapheme);}else if(!/^\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}$/u.test(grapheme)){term_chunks.push(grapheme.toLocaleLowerCase());}}term=term_chunks.join("").replace(/\s{2,}/g," ").trim();}}else{for(const char of term){if(this.includeCharacters?.includes(char)){term_chunks.push(char);}else if(!/^\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}$/u.test(char)){term_chunks.push(char.toLocaleLowerCase());}}term=term_chunks.join("").replace(/\s{2,}/g," ").trim();}const originalTerm=term;term=normalizeDiacritics(term);log(`Normalized search term to ${term}`);if(!term?.length&&!filter_only){return{results:[],unfilteredResultCount:0,filters:{},totalFilters:{},timings:{preload:Date.now()-start,search:Date.now()-start,total:Date.now()-start}};}let sort_list=this.stringifySorts(options.sort);log(`Stringified sort to ${sort_list}`);const filter_list=this.stringifyFilters(options.filters);log(`Stringified filters to ${filter_list}`);let index_resp=this.backend.request_indexes(ptr,term);let index_array=JSON.parse(index_resp);let filter_resp=this.backend.request_filter_indexes(ptr,filter_list);let filter_array=JSON.parse(filter_resp);let chunks=index_array.filter((v)=>v).map((chunk)=>this.loadChunk(chunk));let filter_chunks=filter_array.filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...chunks,...filter_chunks]);log(`Loaded necessary chunks to run search`);if(options.preload){log(`Preload \u2014 bailing out of search operation now.`);return null;}ptr=await this.getPtr();let searchStart=Date.now();let result=this.backend.search(ptr,term,originalTerm,filter_list,sort_list,exact_search,this.exactDiacritics);log(`Got the raw search result: ${result}`);let{filtered_counts,total_counts,results,unfiltered_total,search_keywords,query_term_idfs}=JSON.parse(result);let resultsInterface=results.map((result2)=>{let weighted_locations=result2.l.map((l)=>{let loc={weight:l.w/24,balanced_score:l.s,location:l.l};if(l.v){loc.verbose={word_string:l.v.ws,length_bonus:l.v.lb};}return loc;});let locations=weighted_locations.map((l)=>l.location);let res={id:result2.p,score:result2.s*this.indexWeight,words:locations,data:async()=>await this.loadFragment(result2.p,weighted_locations,term)};if(result2.params){res.params={document_length:result2.params.dl,average_page_length:result2.params.apl,total_pages:result2.params.tp};}if(result2.scores){res.scores=result2.scores.map((r)=>{return{search_term:r.w,idf:r.idf,saturating_tf:r.b_tf,raw_tf:r.r_tf,pagefind_tf:r.p_tf,score:r.s,params:{weighted_term_frequency:r.params.w_tf,pages_containing_term:r.params.pct,length_bonus:r.params.lb}};});}if(result2.mf&&result2.mf.length>0){res.matchedMetaFields=result2.mf;}if(result2.vms&&result2.vms.length>0){res.verbose_meta_scores=result2.vms.map((s)=>({field_name:s.fn,field_weight:s.fw,matched_terms:s.mt,matched_idf:s.mi,query_total_idf:s.ti,coverage:s.cv,coverage_boost:s.cb}));}return res;});const searchTime=Date.now()-searchStart;const realTime=Date.now()-start;log(`Found ${results.length} result${results.length == 1 ? "" : "s"} for "${term}" in ${Date.now() - searchStart}ms (${Date.now() - start}ms realtime)`);let response={results:resultsInterface,unfilteredResultCount:unfiltered_total,filters:filtered_counts,totalFilters:total_counts,timings:{preload:realTime-searchTime,search:searchTime,total:realTime}};if(search_keywords){response.search_keywords=search_keywords;}if(query_term_idfs){response.query_term_idfs=query_term_idfs.map((q)=>({term:q.t,idf:q.i}));}return response;}};var Pagefind=class{constructor(options={}){__publicField(this,"primaryLanguage");__publicField(this,"searchID");__publicField(this,"primary");__publicField(this,"instances");this.primaryLanguage="unknown";this.searchID=0;this.primary=new PagefindInstance({...options,primary:true});this.instances=[this.primary];this.init(options?.language);}async options(options){await this.primary.options(options);}async enterPlaygroundMode(){await this.primary.enterPlaygroundMode();}async init(overrideLanguage){if(isBrowser()&&document?.querySelector){const langCode=document.querySelector("html")?.getAttribute("lang")||"unknown";this.primaryLanguage=langCode.toLocaleLowerCase();}if(overrideLanguage){this.primaryLanguage=overrideLanguage;}await this.primary.init(overrideLanguage?overrideLanguage:this.primaryLanguage,{load_wasm:true});}async mergeIndex(indexPath,options={}){if(this.primary.basePath.startsWith(indexPath)){console.warn(`Skipping mergeIndex ${indexPath} that appears to be the same as the primary index (${this.primary.basePath})`);return;}let newInstance=new PagefindInstance({primary:false,basePath:indexPath,...options});this.instances.push(newInstance);while(this.primary.wasm===null){await asyncSleep(50);}await newInstance.init(options.language||this.primaryLanguage,{load_wasm:false});const{language,...remainingOptions}=options;await newInstance.options(remainingOptions);}mergeFilters(filters){const merged={};for(const searchFilter of filters){for(const[filterKey,values]of Object.entries(searchFilter)){if(!merged[filterKey]){merged[filterKey]=values;continue;}else{const filter=merged[filterKey];for(const[valueKey,count]of Object.entries(values)){filter[valueKey]=(filter[valueKey]||0)+count;}}}}return merged;}async filters(){let filters=await Promise.all(this.instances.map((i2)=>i2.filters()));return this.mergeFilters(filters);}async preload(term,options={}){await Promise.all(this.instances.map((i2)=>i2.preload(term,options)));}async debouncedSearch(term,options,debounceTimeoutMs){const thisSearchID=++this.searchID;this.preload(term,options);await asyncSleep(debounceTimeoutMs);if(thisSearchID!==this.searchID){return null;}const searchResult=await this.search(term,options);if(thisSearchID!==this.searchID){return null;}return searchResult;}async search(term,options={}){let search=await Promise.all(this.instances.map((i2)=>i2.search(term,options)));const filters=this.mergeFilters(search.map((s)=>s.filters));const totalFilters=this.mergeFilters(search.map((s)=>s.totalFilters));const results=search.map((s)=>s.results).flat().sort((a,b)=>b.score-a.score);const timings=search.map((s)=>s.timings);const unfilteredResultCount=search.reduce((sum,s)=>sum+s.unfilteredResultCount,0);let response={results,unfilteredResultCount,filters,totalFilters,timings};if(search[0].search_keywords){response.search_keywords=search[0].search_keywords;}if(search[0].query_term_idfs){response.query_term_idfs=search[0].query_term_idfs;}return response;}};var dataCallbacks=new Map();var instanceDataIds=new Map();var instances=new Map();var DEFAULT_INSTANCE="default";var getInstance=(instanceId)=>{const instance=instances.get(instanceId);if(!instance){throw new Error(`Pagefind instance "${instanceId}" not initialized`);}return instance;};var registerDataCallback=(instanceId,dataId,dataFn)=>{dataCallbacks.set(dataId,{getData:dataFn});if(!instanceDataIds.has(instanceId)){instanceDataIds.set(instanceId,new Set());}instanceDataIds.get(instanceId).add(dataId);};var handleMessage=async(message)=>{const{id,method,args}=message;const instanceId=message.instanceId??DEFAULT_INSTANCE;try{switch(method){case"init":{const[options]=args;instances.set(instanceId,new Pagefind(options));return{id,result:true};}case"options":{const pagefindInstance=getInstance(instanceId);const[options]=args;await pagefindInstance.options(options);return{id,result:true};}case"enterPlaygroundMode":{const pagefindInstance=getInstance(instanceId);await pagefindInstance.enterPlaygroundMode();return{id,result:true};}case"mergeIndex":{const pagefindInstance=getInstance(instanceId);const[indexPath,options]=args;await pagefindInstance.mergeIndex(indexPath,options);return{id,result:true};}case"search":{const pagefindInstance=getInstance(instanceId);const[term,options]=args;const results=await pagefindInstance.search(term,options);if(results&&results.results){for(let i2=0;i2{const message=event.data;const response=await handleMessage(message);self.postMessage(response);});})(); \ No newline at end of file diff --git a/pagefind/pagefind.en_bca57b166f.pf_meta b/pagefind/pagefind.en_bca57b166f.pf_meta new file mode 100644 index 0000000..0a17b47 Binary files /dev/null and b/pagefind/pagefind.en_bca57b166f.pf_meta differ diff --git a/pagefind/pagefind.js b/pagefind/pagefind.js new file mode 100644 index 0000000..1e38c36 --- /dev/null +++ b/pagefind/pagefind.js @@ -0,0 +1,6 @@ +const pagefind_version="1.5.2";let wasm_bindgen=(function(exports){let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString();}function add_synthetic_filter(ptr,filter){const ptr0=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.add_synthetic_filter(ptr,ptr0,len0);return ret>>>0;}exports.add_synthetic_filter=add_synthetic_filter;function enter_playground_mode(ptr){const ret=wasm.enter_playground_mode(ptr);return ret>>>0;}exports.enter_playground_mode=enter_playground_mode;function filters(ptr){let deferred1_0;let deferred1_1;try{const ret=wasm.filters(ptr);deferred1_0=ret[0];deferred1_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred1_0,deferred1_1,1);}}exports.filters=filters;function init_pagefind(metadata_bytes){const ptr0=passArray8ToWasm0(metadata_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.init_pagefind(ptr0,len0);return ret>>>0;}exports.init_pagefind=init_pagefind;function load_filter_chunk(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_filter_chunk(ptr,ptr0,len0);return ret>>>0;}exports.load_filter_chunk=load_filter_chunk;function load_index_chunk(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_index_chunk(ptr,ptr0,len0);return ret>>>0;}exports.load_index_chunk=load_index_chunk;function request_all_filter_indexes(ptr){let deferred1_0;let deferred1_1;try{const ret=wasm.request_all_filter_indexes(ptr);deferred1_0=ret[0];deferred1_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred1_0,deferred1_1,1);}}exports.request_all_filter_indexes=request_all_filter_indexes;function request_filter_indexes(ptr,filters){let deferred2_0;let deferred2_1;try{const ptr0=passStringToWasm0(filters,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.request_filter_indexes(ptr,ptr0,len0);deferred2_0=ret[0];deferred2_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred2_0,deferred2_1,1);}}exports.request_filter_indexes=request_filter_indexes;function request_indexes(ptr,query){let deferred2_0;let deferred2_1;try{const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.request_indexes(ptr,ptr0,len0);deferred2_0=ret[0];deferred2_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred2_0,deferred2_1,1);}}exports.request_indexes=request_indexes;function search(ptr,query,original_query,filter,sort,exact,exact_diacritics){let deferred5_0;let deferred5_1;try{const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ptr1=passStringToWasm0(original_query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len1=WASM_VECTOR_LEN;const ptr2=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len2=WASM_VECTOR_LEN;const ptr3=passStringToWasm0(sort,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len3=WASM_VECTOR_LEN;const ret=wasm.search(ptr,ptr0,len0,ptr1,len1,ptr2,len2,ptr3,len3,exact,exact_diacritics);deferred5_0=ret[0];deferred5_1=ret[1];return getStringFromWasm0(ret[0],ret[1]);}finally{wasm.__wbindgen_free(deferred5_0,deferred5_1,1);}}exports.search=search;function set_ranking_weights(ptr,weights){const ptr0=passStringToWasm0(weights,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.set_ranking_weights(ptr,ptr0,len0);return ret>>>0;}exports.set_ranking_weights=set_ranking_weights;function __wbg_get_imports(){const import0={__proto__:null,__wbindgen_init_externref_table:function(){const table=wasm.__wbindgen_externrefs;const offset=table.grow(4);table.set(0,undefined);table.set(offset+0,undefined);table.set(offset+1,null);table.set(offset+2,true);table.set(offset+3,false);},};return{__proto__:null,"./pagefind_web_bg.js":import0,};}function getStringFromWasm0(ptr,len){ptr=ptr>>>0;return decodeText(ptr,len);}let cachedUint8ArrayMemory0=null;function getUint8ArrayMemory0(){if(cachedUint8ArrayMemory0===null||cachedUint8ArrayMemory0.byteLength===0){cachedUint8ArrayMemory0=new Uint8Array(wasm.memory.buffer);}return cachedUint8ArrayMemory0;}function passArray8ToWasm0(arg,malloc){const ptr=malloc(arg.length*1,1)>>>0;getUint8ArrayMemory0().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr;}function passStringToWasm0(arg,malloc,realloc){if(realloc===undefined){const buf=cachedTextEncoder.encode(arg);const ptr=malloc(buf.length,1)>>>0;getUint8ArrayMemory0().subarray(ptr,ptr+buf.length).set(buf);WASM_VECTOR_LEN=buf.length;return ptr;}let len=arg.length;let ptr=malloc(len,1)>>>0;const mem=getUint8ArrayMemory0();let offset=0;for(;offset0x7F)break;mem[ptr+offset]=code;}if(offset!==len){if(offset!==0){arg=arg.slice(offset);}ptr=realloc(ptr,len,len=offset+arg.length*3,1)>>>0;const view=getUint8ArrayMemory0().subarray(ptr+offset,ptr+len);const ret=cachedTextEncoder.encodeInto(arg,view);offset+=ret.written;ptr=realloc(ptr,len,offset,1)>>>0;}WASM_VECTOR_LEN=offset;return ptr;}let cachedTextDecoder=new TextDecoder('utf-8',{ignoreBOM:true,fatal:true});cachedTextDecoder.decode();function decodeText(ptr,len){return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr,ptr+len));}const cachedTextEncoder=new TextEncoder();if(!('encodeInto'in cachedTextEncoder)){cachedTextEncoder.encodeInto=function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length};};}let WASM_VECTOR_LEN=0;let wasmModule,wasm;function __wbg_finalize_init(instance,module){wasm=instance.exports;wasmModule=module;cachedUint8ArrayMemory0=null;wasm.__wbindgen_start();return wasm;}async function __wbg_load(module,imports){if(typeof Response==='function'&&module instanceof Response){if(typeof WebAssembly.instantiateStreaming==='function'){try{return await WebAssembly.instantiateStreaming(module,imports);}catch(e){const validResponse=module.ok&&expectedResponseType(module.type);if(validResponse&&module.headers.get('Content-Type')!=='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e);}else{throw e;}}}const bytes=await module.arrayBuffer();return await WebAssembly.instantiate(bytes,imports);}else{const instance=await WebAssembly.instantiate(module,imports);if(instance instanceof WebAssembly.Instance){return{instance,module};}else{return instance;}}function expectedResponseType(type){switch(type){case'basic':case'cors':case'default':return true;}return false;}}function initSync(module){if(wasm!==undefined)return wasm;if(module!==undefined){if(Object.getPrototypeOf(module)===Object.prototype){({module}=module)}else{console.warn('using deprecated parameters for `initSync()`; pass a single object instead')}}const imports=__wbg_get_imports();if(!(module instanceof WebAssembly.Module)){module=new WebAssembly.Module(module);}const instance=new WebAssembly.Instance(module,imports);return __wbg_finalize_init(instance,module);}async function __wbg_init(module_or_path){if(wasm!==undefined)return wasm;if(module_or_path!==undefined){if(Object.getPrototypeOf(module_or_path)===Object.prototype){({module_or_path}=module_or_path)}else{console.warn('using deprecated parameters for the initialization function; pass a single object instead')}}if(module_or_path===undefined&&script_src!==undefined){module_or_path=script_src.replace(/\.js$/,"_bg.wasm");}const imports=__wbg_get_imports();if(typeof module_or_path==='string'||(typeof Request==='function'&&module_or_path instanceof Request)||(typeof URL==='function'&&module_or_path instanceof URL)){module_or_path=fetch(module_or_path);}const{instance,module}=await __wbg_load(await module_or_path,imports);return __wbg_finalize_init(instance,module);}return Object.assign(__wbg_init,{initSync},exports);})({__proto__:null});var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:true,configurable:true,writable:true,value}):obj[key]=value;var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!=="symbol"?key+"":key,value);var u8=Uint8Array;var u16=Uint16Array;var u32=Uint32Array;var fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);var fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);var clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var freb=function(eb,start){var b=new u16(31);for(var i2=0;i2<31;++i2){b[i2]=start+=1<>>1|(i&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2;x=(x&61680)>>>4|(x&3855)<<4;rev[i]=((x&65280)>>>8|(x&255)<<8)>>>1;}var x;var i;var hMap=function(cd,mb,r){var s=cd.length;var i2=0;var l=new u16(mb);for(;i2>>rvb]=sv;}}}}else{co=new u16(s);for(i2=0;i2>>15-cd[i2];}}}return co;};var flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;var i;for(i=144;i<256;++i)flt[i]=9;var i;for(i=256;i<280;++i)flt[i]=7;var i;for(i=280;i<288;++i)flt[i]=8;var i;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var i;var flrm=hMap(flt,9,1);var fdrm=hMap(fdt,5,1);var max=function(a){var m=a[0];for(var i2=1;i2m)m=a[i2];}return m;};var bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m;};var bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7);};var shft=function(p){return(p+7)/8|0;};var slc=function(v,s,e){if(s==null||s<0)s=0;if(e==null||e>v.length)e=v.length;var n=new(v.BYTES_PER_ELEMENT==2?u16:v.BYTES_PER_ELEMENT==4?u32:u8)(e-s);n.set(v.subarray(s,e));return n;};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];var err=function(ind,msg,nt){var e=new Error(msg||ec[ind]);e.code=ind;if(Error.captureStackTrace)Error.captureStackTrace(e,err);if(!nt)throw e;return e;};var inflt=function(dat,buf,st){var sl=dat.length;if(!sl||st&&st.f&&!st.l)return buf||new u8(0);var noBuf=!buf||st;var noSt=!st||st.i;if(!st)st={};if(!buf)buf=new u8(sl*3);var cbuf=function(l2){var bl=buf.length;if(l2>bl){var nbuf=new u8(Math.max(bl*2,l2));nbuf.set(buf);buf=nbuf;}};var final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;var tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);pos+=3;if(!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){if(noSt)err(0);break;}if(noBuf)cbuf(bt+l);buf.set(dat.subarray(s,t),bt);st.b=bt+=l,st.p=pos=t*8,st.f=final;continue;}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;var tl=hLit+bits(dat,pos+5,31)+1;pos+=14;var ldt=new u8(tl);var clt=new u8(19);for(var i2=0;i2>>4;if(s<16){ldt[i2++]=s;}else{var c=0,n=0;if(s==16)n=3+bits(dat,pos,3),pos+=2,c=ldt[i2-1];else if(s==17)n=3+bits(dat,pos,7),pos+=3;else if(s==18)n=11+bits(dat,pos,127),pos+=7;while(n--)ldt[i2++]=c;}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1);}else err(1);if(pos>tbts){if(noSt)err(0);break;}}if(noBuf)cbuf(bt+131072);var lms=(1<>>4;pos+=c&15;if(pos>tbts){if(noSt)err(0);break;}if(!c)err(2);if(sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break;}else{var add=sym-254;if(sym>264){var i2=sym-257,b=fleb[i2];add=bits(dat,pos,(1<>>4;if(!d)err(3);pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){if(noSt)err(0);break;}if(noBuf)cbuf(bt+131072);var end=bt+add;for(;bt>3&1)+(flg>>4&1);zs>0;zs-=!d[st++]);return st+(flg&2);};var gzl=function(d){var l=d.length;return(d[l-4]|d[l-3]<<8|d[l-2]<<16|d[l-1]<<24)>>>0;};function gunzipSync(data,out){return inflt(data.subarray(gzs(data),-8),out||new u8(gzl(data)));}var td=typeof TextDecoder!="undefined"&&new TextDecoder();var tds=0;try{td.decode(et,{stream:true});tds=1;}catch(e){}var gz_default=gunzipSync;var calculate_excerpt_region=(word_positions,excerpt_length)=>{if(word_positions.length===0){return 0;}let words=[];for(const word of word_positions){words[word.location]=words[word.location]||0;words[word.location]+=word.balanced_score;}if(words.length<=excerpt_length){return 0;}let densest=words.slice(0,excerpt_length).reduce((partialSum,a)=>partialSum+a,0);let working_sum=densest;let densest_at=[0];for(let i2=0;i2densest){densest=working_sum;densest_at=[i2];}else if(working_sum===densest&&densest_at[densest_at.length-1]===i2-1){densest_at.push(i2);}}let midpoint=densest_at[Math.floor(densest_at.length/2)];return midpoint;};var build_excerpt=(content,start,length,locations,not_before,not_from)=>{let is_zws_delimited=content.includes("\u200B");let fragment_words=[];if(is_zws_delimited){fragment_words=content.split("\u200B");}else{fragment_words=content.split(/[\r\n\s]+/g);}let endcap=not_from??fragment_words.length;let startcap=not_before??0;if(endcap-startcapendcap){start=endcap-length;}if(start`)){continue;}fragment_words[word]=`${fragment_words[word]}`;}const excerpt=fragment_words.slice(start,start+length).join(joiner).trim();return{excerpt,plain_excerpt};};var calculate_sub_results=(fragment,desired_excerpt_length)=>{const effective_url=fragment.meta?.url||fragment.url;const anchors=fragment.anchors.filter((a)=>/h\d/i.test(a.element)&&a.text?.length&&/\S/.test(a.text)).sort((a,b)=>a.location-b.location);const results=[];let current_anchor_position=0;let current_anchor={title:fragment.meta["title"],url:effective_url,weighted_locations:[],locations:[],excerpt:"",plain_excerpt:""};const add_result=(end_range)=>{if(current_anchor.locations.length){const relative_weighted_locations=current_anchor.weighted_locations.map((l)=>{return{weight:l.weight,balanced_score:l.balanced_score,location:l.location-current_anchor_position};});const excerpt_start=calculate_excerpt_region(relative_weighted_locations,desired_excerpt_length)+current_anchor_position;const excerpt_length=end_range?Math.min(end_range-excerpt_start,desired_excerpt_length):desired_excerpt_length;const excerpts=build_excerpt(fragment.raw_content??"",excerpt_start,excerpt_length,current_anchor.locations,current_anchor_position,end_range);current_anchor.excerpt=excerpts.excerpt;current_anchor.plain_excerpt=excerpts.plain_excerpt;results.push(current_anchor);}};for(let word of fragment.weighted_locations){if(!anchors.length||word.location=anchors[0].location){next_anchor=anchors.shift();}let anchored_url=effective_url;try{const url_is_fq=/^((https?:)?\/\/)/.test(anchored_url);if(url_is_fq){let fq_url=new URL(anchored_url);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString();}else{if(!/^\//.test(anchored_url)){anchored_url=`/${anchored_url}`;}let fq_url=new URL(`https://example.com${anchored_url}`);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString().replace(/^https:\/\/example.com/,"");}}catch(e){console.error(`Pagefind: Couldn't process ${anchored_url} for a search result`);}current_anchor_position=next_anchor.location;current_anchor={title:next_anchor.text,url:anchored_url,anchor:next_anchor,weighted_locations:[word],locations:[word.location],excerpt:"",plain_excerpt:""};}}add_result(anchors[0]?.location);return results;};var asyncSleep=async(ms=100)=>{return new Promise((r)=>setTimeout(r,ms));};var normalizeDiacritics=(str)=>{return str.normalize("NFD").replace(/\p{M}/gu,"");};var isBrowser=()=>typeof window!=="undefined"&&typeof document!=="undefined";var needsWordSegmentation=(lang)=>{if(!lang)return false;const primaryLang=lang.split("-")[0].toLowerCase();return["zh","ja","th"].includes(primaryLang);};var PagefindInstance=class{constructor(opts={}){__publicField(this,"backend");__publicField(this,"decoder");__publicField(this,"wasm");__publicField(this,"basePath");__publicField(this,"baseUrl");__publicField(this,"primary");__publicField(this,"indexWeight");__publicField(this,"excerptLength");__publicField(this,"mergeFilter");__publicField(this,"ranking");__publicField(this,"highlightParam");__publicField(this,"exactDiacritics");__publicField(this,"metaCacheTag");__publicField(this,"loaded_chunks");__publicField(this,"loaded_filters");__publicField(this,"loaded_fragments");__publicField(this,"fetchQueue",[]);__publicField(this,"activeFetches",0);__publicField(this,"maxConcurrentFetches",100);__publicField(this,"raw_ptr");__publicField(this,"initError");__publicField(this,"searchMeta");__publicField(this,"languages");__publicField(this,"loadedLanguage");__publicField(this,"includeCharacters");__publicField(this,"version");__publicField(this,"loadedVersion");this.version=pagefind_version;this.backend=wasm_bindgen;this.decoder=new TextDecoder("utf-8");this.wasm=null;let basePath=opts.basePath||"/pagefind/";let primary=opts.primary||false;if(primary&&!opts.basePath&&isBrowser()){basePath=this.initPrimaryBasePath(basePath);}if(/[^\/]$/.test(basePath)){basePath=`${basePath}/`;}if(isBrowser()&&window?.location?.origin&&basePath.startsWith(window.location.origin)){basePath=basePath.replace(window.location.origin,"");}this.basePath=basePath;this.baseUrl=opts.baseUrl||this.getDefaultBaseUrl(basePath);if(!/^(\/|https?:\/\/)/.test(this.baseUrl)){this.baseUrl=`/${this.baseUrl}`;}this.primary=primary;this.indexWeight=opts.indexWeight??1;this.excerptLength=opts.excerptLength??30;this.mergeFilter=opts.mergeFilter??{};this.ranking=opts.ranking;this.highlightParam=opts.highlightParam??null;this.exactDiacritics=opts.exactDiacritics??false;this.metaCacheTag=opts.metaCacheTag??null;this.loaded_chunks={};this.loaded_filters={};this.loaded_fragments={};this.raw_ptr=null;this.initError=null;this.searchMeta=null;this.languages=null;}throttledFetch(input){return new Promise((resolve,reject)=>{this.fetchQueue.push({resolve,reject,input});this.dequeueNextFetch();});}dequeueNextFetch(){while(this.fetchQueue.length>0&&this.activeFetchesb.page_count-a.page_count);if(topLang[0])return topLang[0];}throw new Error("Pagefind Error: No language indexes found.");}async loadMeta(index){try{let compressed_resp=await this.throttledFetch(`${this.basePath}pagefind.${index}.pf_meta`);let compressed_meta=await compressed_resp.arrayBuffer();this.searchMeta=this.decompress(new Uint8Array(compressed_meta),"Pagefind metadata");}catch(e){console.error(`Failed to load the meta index: +${e?.toString()}`);}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await this.throttledFetch(wasm_url);let compressed_wasm=await compressed_resp.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression");}this.wasm=await this.backend({module_or_path:final_wasm});}catch(e){console.error(`Failed to load the Pagefind WASM: +${e?.toString()}`);throw new Error(`Failed to load the Pagefind WASM: +${e?.toString()}`);}}async _loadGenericChunk(url,method){try{let compressed_resp=await this.throttledFetch(url);let compressed_chunk=await compressed_resp.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk);}catch(e){console.error(`Failed to load the index chunk ${url}: +${e?.toString()}`);}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk");}return await this.loaded_chunks[hash];}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk");}return await this.loaded_filters[hash];}async _loadFragment(hash){let compressed_resp=await this.throttledFetch(`${this.basePath}fragment/${hash}.pf_fragment`);let compressed_fragment=await compressed_resp.arrayBuffer();let fragment=this.decompress(new Uint8Array(compressed_fragment),`Fragment ${hash}`);return JSON.parse(new TextDecoder().decode(fragment));}async loadFragment(hash,weighted_locations=[],search_term){if(!this.loaded_fragments[hash]){this.loaded_fragments[hash]=this._loadFragment(hash);}let fragment=await this.loaded_fragments[hash];fragment.weighted_locations=weighted_locations;fragment.locations=weighted_locations.map((l)=>l.location);if(!fragment.raw_content){fragment.raw_content=fragment.content.replace(//g,">");fragment.content=fragment.content.replace(/\u200B/g,"");}if(!fragment.raw_url){fragment.raw_url=fragment.url;}fragment.url=this.processedUrl(fragment.raw_url,search_term);const excerpt_start=calculate_excerpt_region(weighted_locations,this.excerptLength);const excerpts=build_excerpt(fragment.raw_content,excerpt_start,this.excerptLength,fragment.locations);fragment.excerpt=excerpts.excerpt;fragment.plain_excerpt=excerpts.plain_excerpt;fragment.sub_results=calculate_sub_results(fragment,this.excerptLength);return fragment;}fullUrl(raw){if(/^(https?:)?\/\//.test(raw)){return raw;}return`${this.baseUrl}/${raw}`.replace(/\/+/g,"/").replace(/^(https?:\/)/,"$1/");}processedUrl(url,search_term){const normalized=this.fullUrl(url);if(this.highlightParam===null){return normalized;}let individual_terms=search_term.split(/\s+/);try{let processed=new URL(normalized);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term);}return processed.toString();}catch(e){try{let processed=new URL(`https://example.com${normalized}`);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term);}return processed.toString().replace(/^https:\/\/example\.com/,"");}catch(e2){return normalized;}}}async getPtr(){while(this.raw_ptr===null){if(this.initError){throw this.initError;}await asyncSleep(50);}if(!this.raw_ptr){console.error("Pagefind: WASM Error (No pointer)");throw new Error("Pagefind: WASM Error (No pointer)");}return this.raw_ptr;}stringifyFilters(obj={}){return JSON.stringify(obj);}stringifySorts(obj={}){let sorts=Object.entries(obj);for(let[sort,direction]of sorts){if(sorts.length>1){console.warn(`Pagefind was provided multiple sort options in this search, but can only operate on one. Using the ${sort} sort.`);}if(direction!=="asc"&&direction!=="desc"){console.warn(`Pagefind was provided a sort with unknown direction ${direction}. Supported: [asc, desc]`);}return`${sort}:${direction}`;}return``;}async filters(){let ptr=await this.getPtr();let filters2=this.backend.request_all_filter_indexes(ptr);let filter_array=JSON.parse(filters2);if(Array.isArray(filter_array)){let filter_chunks=filter_array.filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...filter_chunks]);}ptr=await this.getPtr();let results=this.backend.filters(ptr);return JSON.parse(results);}async preload(term,options2={}){await this.search(term,{...options2,preload:true});}async search(term,options2={}){options2={verbose:false,filters:{},sort:{},...options2};const log=(str)=>{if(options2.verbose)console.log(str);};log(`Starting search on ${this.basePath}`);let start=Date.now();let ptr=await this.getPtr();let filter_only=term===null;term=term??"";let exact_search=/^\s*".+"\s*$/.test(term);if(exact_search){log(`Running an exact search`);}let trueLanguage=null;try{trueLanguage=Intl.getCanonicalLocales(this.loadedLanguage)[0];}catch(err2){}const term_chunks=[];if(trueLanguage&&typeof Intl.Segmenter!=="undefined"){const graphemeSegmenter=new Intl.Segmenter(trueLanguage,{granularity:"grapheme"});if(needsWordSegmentation(trueLanguage)){const wordSegmenter=new Intl.Segmenter(trueLanguage,{granularity:"word"});for(const{segment:word}of wordSegmenter.segment(term)){const wordChunks=[];for(const{segment:grapheme}of graphemeSegmenter.segment(word)){if(this.includeCharacters?.includes(grapheme)){wordChunks.push(grapheme);}else if(!/^\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}$/u.test(grapheme)){wordChunks.push(grapheme.toLocaleLowerCase());}}if(wordChunks.length>0){term_chunks.push(wordChunks.join(""));}}term=term_chunks.join(" ").replace(/\s{2,}/g," ").trim();}else{for(const{segment:grapheme}of graphemeSegmenter.segment(term)){if(this.includeCharacters?.includes(grapheme)){term_chunks.push(grapheme);}else if(!/^\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}$/u.test(grapheme)){term_chunks.push(grapheme.toLocaleLowerCase());}}term=term_chunks.join("").replace(/\s{2,}/g," ").trim();}}else{for(const char of term){if(this.includeCharacters?.includes(char)){term_chunks.push(char);}else if(!/^\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}$/u.test(char)){term_chunks.push(char.toLocaleLowerCase());}}term=term_chunks.join("").replace(/\s{2,}/g," ").trim();}const originalTerm=term;term=normalizeDiacritics(term);log(`Normalized search term to ${term}`);if(!term?.length&&!filter_only){return{results:[],unfilteredResultCount:0,filters:{},totalFilters:{},timings:{preload:Date.now()-start,search:Date.now()-start,total:Date.now()-start}};}let sort_list=this.stringifySorts(options2.sort);log(`Stringified sort to ${sort_list}`);const filter_list=this.stringifyFilters(options2.filters);log(`Stringified filters to ${filter_list}`);let index_resp=this.backend.request_indexes(ptr,term);let index_array=JSON.parse(index_resp);let filter_resp=this.backend.request_filter_indexes(ptr,filter_list);let filter_array=JSON.parse(filter_resp);let chunks=index_array.filter((v)=>v).map((chunk)=>this.loadChunk(chunk));let filter_chunks=filter_array.filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...chunks,...filter_chunks]);log(`Loaded necessary chunks to run search`);if(options2.preload){log(`Preload \u2014 bailing out of search operation now.`);return null;}ptr=await this.getPtr();let searchStart=Date.now();let result=this.backend.search(ptr,term,originalTerm,filter_list,sort_list,exact_search,this.exactDiacritics);log(`Got the raw search result: ${result}`);let{filtered_counts,total_counts,results,unfiltered_total,search_keywords,query_term_idfs}=JSON.parse(result);let resultsInterface=results.map((result2)=>{let weighted_locations=result2.l.map((l)=>{let loc={weight:l.w/24,balanced_score:l.s,location:l.l};if(l.v){loc.verbose={word_string:l.v.ws,length_bonus:l.v.lb};}return loc;});let locations=weighted_locations.map((l)=>l.location);let res={id:result2.p,score:result2.s*this.indexWeight,words:locations,data:async()=>await this.loadFragment(result2.p,weighted_locations,term)};if(result2.params){res.params={document_length:result2.params.dl,average_page_length:result2.params.apl,total_pages:result2.params.tp};}if(result2.scores){res.scores=result2.scores.map((r)=>{return{search_term:r.w,idf:r.idf,saturating_tf:r.b_tf,raw_tf:r.r_tf,pagefind_tf:r.p_tf,score:r.s,params:{weighted_term_frequency:r.params.w_tf,pages_containing_term:r.params.pct,length_bonus:r.params.lb}};});}if(result2.mf&&result2.mf.length>0){res.matchedMetaFields=result2.mf;}if(result2.vms&&result2.vms.length>0){res.verbose_meta_scores=result2.vms.map((s)=>({field_name:s.fn,field_weight:s.fw,matched_terms:s.mt,matched_idf:s.mi,query_total_idf:s.ti,coverage:s.cv,coverage_boost:s.cb}));}return res;});const searchTime=Date.now()-searchStart;const realTime=Date.now()-start;log(`Found ${results.length} result${results.length == 1 ? "" : "s"} for "${term}" in ${Date.now() - searchStart}ms (${Date.now() - start}ms realtime)`);let response={results:resultsInterface,unfilteredResultCount:unfiltered_total,filters:filtered_counts,totalFilters:total_counts,timings:{preload:realTime-searchTime,search:searchTime,total:realTime}};if(search_keywords){response.search_keywords=search_keywords;}if(query_term_idfs){response.query_term_idfs=query_term_idfs.map((q)=>({term:q.t,idf:q.i}));}return response;}};var Pagefind=class{constructor(options2={}){__publicField(this,"primaryLanguage");__publicField(this,"searchID");__publicField(this,"primary");__publicField(this,"instances");this.primaryLanguage="unknown";this.searchID=0;this.primary=new PagefindInstance({...options2,primary:true});this.instances=[this.primary];this.init(options2?.language);}async options(options2){await this.primary.options(options2);}async enterPlaygroundMode(){await this.primary.enterPlaygroundMode();}async init(overrideLanguage){if(isBrowser()&&document?.querySelector){const langCode=document.querySelector("html")?.getAttribute("lang")||"unknown";this.primaryLanguage=langCode.toLocaleLowerCase();}if(overrideLanguage){this.primaryLanguage=overrideLanguage;}await this.primary.init(overrideLanguage?overrideLanguage:this.primaryLanguage,{load_wasm:true});}async mergeIndex(indexPath,options2={}){if(this.primary.basePath.startsWith(indexPath)){console.warn(`Skipping mergeIndex ${indexPath} that appears to be the same as the primary index (${this.primary.basePath})`);return;}let newInstance=new PagefindInstance({primary:false,basePath:indexPath,...options2});this.instances.push(newInstance);while(this.primary.wasm===null){await asyncSleep(50);}await newInstance.init(options2.language||this.primaryLanguage,{load_wasm:false});const{language,...remainingOptions}=options2;await newInstance.options(remainingOptions);}mergeFilters(filters2){const merged={};for(const searchFilter of filters2){for(const[filterKey,values]of Object.entries(searchFilter)){if(!merged[filterKey]){merged[filterKey]=values;continue;}else{const filter=merged[filterKey];for(const[valueKey,count]of Object.entries(values)){filter[valueKey]=(filter[valueKey]||0)+count;}}}}return merged;}async filters(){let filters2=await Promise.all(this.instances.map((i2)=>i2.filters()));return this.mergeFilters(filters2);}async preload(term,options2={}){await Promise.all(this.instances.map((i2)=>i2.preload(term,options2)));}async debouncedSearch(term,options2,debounceTimeoutMs){const thisSearchID=++this.searchID;this.preload(term,options2);await asyncSleep(debounceTimeoutMs);if(thisSearchID!==this.searchID){return null;}const searchResult=await this.search(term,options2);if(thisSearchID!==this.searchID){return null;}return searchResult;}async search(term,options2={}){let search2=await Promise.all(this.instances.map((i2)=>i2.search(term,options2)));const filters2=this.mergeFilters(search2.map((s)=>s.filters));const totalFilters=this.mergeFilters(search2.map((s)=>s.totalFilters));const results=search2.map((s)=>s.results).flat().sort((a,b)=>b.score-a.score);const timings=search2.map((s)=>s.timings);const unfilteredResultCount=search2.reduce((sum,s)=>sum+s.unfilteredResultCount,0);let response={results,unfilteredResultCount,filters:filters2,totalFilters,timings};if(search2[0].search_keywords){response.search_keywords=search2[0].search_keywords;}if(search2[0].query_term_idfs){response.query_term_idfs=search2[0].query_term_idfs;}return response;}};var hasWorkerSupport=typeof window!=="undefined"&&typeof document!=="undefined"&&typeof Worker!=="undefined";var sharedWorker=null;var sharedWorkerRefCount=0;var sharedMessageHandlers=new Map();var nextInstanceId=0;var generateInstanceId=()=>`pf_${nextInstanceId++}`;function initSharedWorker(basePath){if(sharedWorker)return true;try{const workerUrl=`${basePath}pagefind-worker.js`;sharedWorker=new Worker(workerUrl);sharedWorker.addEventListener("error",(error)=>{console.warn("The Pagefind web worker encountered an error, falling back to main thread:",error);sharedWorker=null;const pending=Array.from(sharedMessageHandlers.values());sharedMessageHandlers.clear();for(const{reject}of pending){reject(new Error("Worker failed, falling back to main thread"));}});sharedWorker.addEventListener("message",(event)=>{const{id,result,error}=event.data;const pending=sharedMessageHandlers.get(id);if(pending){sharedMessageHandlers.delete(id);if(error){pending.reject(new Error(error));}else{pending.resolve(result);}}});return true;}catch(e){return false;}}function releaseSharedWorker(){sharedWorkerRefCount--;if(sharedWorkerRefCount<=0&&sharedWorker){sharedWorker.terminate();sharedWorker=null;sharedWorkerRefCount=0;const pending=Array.from(sharedMessageHandlers.values());sharedMessageHandlers.clear();for(const{reject}of pending){reject(new Error("Pagefind worker terminated"));}}}var globalMessageId=0;function sendWorkerMessage(instanceId,method,args){if(!sharedWorker){return Promise.reject(new Error("Worker not available"));}return new Promise((resolve,reject)=>{const id=`msg_${globalMessageId++}`;sharedMessageHandlers.set(id,{resolve,reject});sharedWorker.postMessage({id,instanceId,method,args});});}var PagefindWrapper=class{constructor(options2={}){__publicField(this,"instanceId");__publicField(this,"fallback",null);__publicField(this,"basePath");__publicField(this,"initOptions");__publicField(this,"cleanup");__publicField(this,"initPromise",null);__publicField(this,"initialized",false);__publicField(this,"useWorker",false);this.instanceId=generateInstanceId();this.basePath=options2.basePath||"/pagefind/";this.initOptions=options2;if(/[^\/]$/.test(this.basePath)){this.basePath=`${this.basePath}/`;}if(hasWorkerSupport&&window?.location?.origin&&this.basePath.startsWith(window.location.origin)){this.basePath=this.basePath.replace(window.location.origin,"");}this.initOptions={...this.initOptions,basePath:this.basePath};this.initCleanup();this.initPromise=this.init();}initCleanup(){if(typeof FinalizationRegistry!=="undefined"){this.cleanup=new FinalizationRegistry((dataId)=>{if(this.useWorker&&sharedWorker){try{sendWorkerMessage(this.instanceId,"releaseData",[dataId]).catch(()=>{});}catch(e){}}});}}async init(){if(hasWorkerSupport&&!this.initOptions.noWorker){const workerAvailable=initSharedWorker(this.basePath);if(workerAvailable){try{sharedWorkerRefCount++;this.useWorker=true;await Promise.race([sendWorkerMessage(this.instanceId,"init",[this.initOptions]),new Promise((_,reject)=>setTimeout(()=>reject(new Error("Worker initialization timeout")),5e3))]);this.initialized=true;}catch(error){console.warn("Failed to initialize Pagefind in the web worker, falling back to main thread:",error);sendWorkerMessage(this.instanceId,"destroy",[]).catch(()=>{});this.useWorker=false;sharedWorkerRefCount--;this.initFallback();this.initialized=true;}}else{this.initFallback();this.initialized=true;}}else{this.initFallback();this.initialized=true;}}waitForInit(){return this.initPromise??Promise.resolve();}initFallback(){if(!this.fallback){this.fallback=new Pagefind(this.initOptions);}}async sendMessage(method,args){if(!this.initialized&&method!=="init"){if(this.initPromise){await this.initPromise;}}if(this.fallback){const fn=this.fallback[method];if(typeof fn==="function"){const result=await fn.apply(this.fallback,args);if((method==="search"||method==="debouncedSearch")&&result&&args[1]&&args[1].verbose){result.search_environment="mainthread";}return result;}throw new Error(`Method ${method} not found on fallback`);}if(!this.useWorker||!sharedWorker){throw new Error("Worker not initialized");}return sendWorkerMessage(this.instanceId,method,args);}async options(options2){return this.sendMessage("options",[options2]);}async enterPlaygroundMode(){return this.sendMessage("enterPlaygroundMode",[]);}async mergeIndex(indexPath,options2={}){return this.sendMessage("mergeIndex",[indexPath,options2]);}async search(term,options2={}){const results=await this.sendMessage("search",[term,options2]);if(results&&results.results){for(const result of results.results){if(typeof result.data==="string"){const dataId=result.data;if(this.cleanup){this.cleanup.register(result,dataId);}result.data=async()=>{return this.sendMessage("getData",[dataId]);};}}}return results;}async debouncedSearch(term,options2,debounceTimeoutMs){const results=await this.sendMessage("debouncedSearch",[term,options2,debounceTimeoutMs]);if(results&&results.results){for(const result of results.results){if(typeof result.data==="string"){const dataId=result.data;if(this.cleanup){this.cleanup.register(result,dataId);}result.data=async()=>{return this.sendMessage("getData",[dataId]);};}}}return results;}async preload(term,options2={}){return this.sendMessage("preload",[term,options2]);}async filters(){return this.sendMessage("filters",[]);}async destroy(){if(this.useWorker){try{await sendWorkerMessage(this.instanceId,"destroy",[]);}catch(e){}this.useWorker=false;releaseSharedWorker();}if(this.fallback){this.fallback=null;}}};var pagefind=void 0;var initial_options=void 0;var deriveBasePath=(explicit)=>{if(explicit)return explicit;if(typeof import.meta.url!=="undefined"){return import.meta.url.match(/^(.*\/)pagefind.js.*$/)?.[1];}};var detectLanguage=()=>{if(typeof document!=="undefined"&&document?.querySelector){return(document.querySelector("html")?.getAttribute("lang")||"unknown").toLowerCase();}return"unknown";};var init_pagefind=()=>{if(!pagefind){pagefind=new PagefindWrapper({...initial_options,basePath:deriveBasePath(initial_options?.basePath),language:detectLanguage(),primary:true});}};var options=async(new_options)=>{if(pagefind){await pagefind.options(new_options);}else{initial_options=new_options;}};var init=async()=>{init_pagefind();};var destroy=async()=>{if(pagefind){await pagefind.destroy();}pagefind=void 0;initial_options=void 0;};var mergeIndex=async(indexPath,options2)=>{init_pagefind();return await pagefind.mergeIndex(indexPath,options2);};var search=async(term,options2)=>{init_pagefind();return await pagefind.search(term,options2);};var debouncedSearch=async(term,options2,debounceTimeoutMs=300)=>{init_pagefind();return await pagefind.debouncedSearch(term,options2,debounceTimeoutMs);};var preload=async(term,options2)=>{init_pagefind();return await pagefind.preload(term,options2);};var filters=async()=>{init_pagefind();return await pagefind.filters();};var createInstance=(instanceOptions)=>{const wrapper=new PagefindWrapper({...instanceOptions,basePath:deriveBasePath(instanceOptions?.basePath),language:detectLanguage(),primary:true});return{options:(opts)=>wrapper.options(opts),init:()=>wrapper.waitForInit(),destroy:()=>wrapper.destroy(),mergeIndex:(indexPath,options2)=>wrapper.mergeIndex(indexPath,options2),search:(term,options2={})=>wrapper.search(term,options2),debouncedSearch:(term,options2,debounceTimeoutMs=300)=>wrapper.debouncedSearch(term,options2,debounceTimeoutMs),preload:(term,options2={})=>wrapper.preload(term,options2),filters:()=>wrapper.filters()};};export{createInstance,debouncedSearch,destroy,filters,init,mergeIndex,options,preload,search}; \ No newline at end of file diff --git a/pagefind/wasm.en.pagefind b/pagefind/wasm.en.pagefind new file mode 100644 index 0000000..92f8022 Binary files /dev/null and b/pagefind/wasm.en.pagefind differ diff --git a/pagefind/wasm.unknown.pagefind b/pagefind/wasm.unknown.pagefind new file mode 100644 index 0000000..76d1c77 Binary files /dev/null and b/pagefind/wasm.unknown.pagefind differ diff --git a/reference/example/index.html b/reference/example/index.html index a21f621..bf415c5 100644 --- a/reference/example/index.html +++ b/reference/example/index.html @@ -1,4 +1,4 @@ - Example Reference | ISPmail Guide - Skip to content
    + Skip to content

    Example Reference

    Reference pages are ideal for outlining how things work in terse and clear terms. Less concerned with telling a story or +

    Example Reference

    Reference pages are ideal for outlining how things work in terse and clear terms. Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what you’re documenting.

    - +
    +
    \ No newline at end of file +
    \ No newline at end of file diff --git a/rsnapshot-and-usb-drives/index.html b/rsnapshot-and-usb-drives/index.html index 58d14a2..56fb961 100644 --- a/rsnapshot-and-usb-drives/index.html +++ b/rsnapshot-and-usb-drives/index.html @@ -1,4 +1,4 @@ - Backups with rsnaphot to external USB drives | ISPmail Guide - Skip to content
    + Skip to content

    Backups with rsnaphot to external USB drives

    How long has it been since you last backed up your Linux system? Let me guess – you tried various backup systems and hate all of them? Let me show you how to use rsnapshot and an external inexpensive USB drive to back up precious data easily.

    - +

    Backups with rsnaphot to external USB drives

    How long has it been since you last backed up your Linux system? Let me guess – you tried various backup systems and hate all of them? Let me show you how to use rsnapshot and an external inexpensive USB drive to back up precious data easily.

    +

    I’m a sysadmin in my day job. How could I not care about half decent backups at home. For years I have been running Bacula which has served me half well. An old AIT drive, a couple of tapes, my trusted Adaptec 2940 card and a PostgreSQL-driven Bacula installation worked moderately well but became increasingly cumbersome and fragile. The server (a retired desktop computer) crashed randomly during backups (some ancient SCSI component started to die). Or I forgot to change one of the three needed tapes (as I lacked a changer) in time so that the backup job timeout killed the running backup. Then I had to declare the tapes as free again because cancelling a backup doesn’t make Bacula free the tapes again.Or I played with PostgreSQL and inadvertently killed the director process. So maybe one backup every two weeks really ran through. And restoring files took minutes until the database finally got me the list of files. Finally one of my tapes got stuck in the drive and the drive refused to eject it. Of course the emergency ejection screw did nothing. Enough was enough. So I thought I could use an external USB drive instead of tapes but Bacula did not actually support that. An ancient shell script (vchanger) should emulate a tape changer with USB disk drives. I was too far off from KISS. What in theory sounded like decent hard- and software failed me.

    - +

    I decided to spend 50€ (the price of one AIT tape) on a 500 GB external USB disk drive and learn about rsnapshot. And in no time I had a simple backup running where I didn’t have to worry about a huge index database and could instantly access any files backed up. What I did:

    - +

    After plugging in the disk for the first time I ran “dmesg” to find out which device the disk was occupying:

    [219991.641225] scsi 12:0:0:0: Direct-Access     Seagate  Portable         0130 PQ: 0 ANSI: 4
    [219991.641765] sd 12:0:0:0: Attached scsi generic sg4 type 0
    [219991.642462] sd 12:0:0:0: [sdc] 976773168 512-byte logical blocks: (500 GB/465 GiB)
    [219991.643080] sd 12:0:0:0: [sdc] Write Protect is off
    [219991.643083] sd 12:0:0:0: [sdc] Mode Sense: 2f 08 00 00
    [219991.643085] sd 12:0:0:0: [sdc] Assuming drive cache: write through
    [219991.644964] sd 12:0:0:0: [sdc] Assuming drive cache: write through
    [219991.646599]  sdc: sdc1
    [219991.694834] sd 12:0:0:0: [sdc] Assuming drive cache: write through
    [219991.695212] sd 12:0:0:0: [sdc] Attached SCSI disk

    So the disk was at /dev/sdc1. I formatted the disk using

    @@ -92,7 +85,7 @@
    tune2fs -l /dev/sdc1 | grep UUID

    which gave me

    Filesystem UUID:          44449456-2b13-47df-bfcf-9c5eedf3b287
    - +

    You will want to have your USB mounted automatically when you plug it in and use it. On a server there is no plug-and-play like that by default. But the “autofs” software does that well. Install it:

    apt-get install autofs

    Edit the /etc/auto.master file and add this line:

    @@ -105,7 +98,7 @@
    cd /var/autofs/removable/usbdrive

    You may notice a short delay while autofs mounts the disk. Then you should find yourself on the mounted USB drive. Type “df .” to see the filesystem. It should look like:

    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sdc1             459G  198M  435G   1% /var/autofs/removable/usbdrive
    - +

    Install the rsnapshot package:

    apt-get install rsnapshot

    The default configuration file is located in /etc/rsnapshot.conf. Edit it. But beware that all elements have to be seperated by actual Tabs. I’m using VIM and in my default settings I used “expandtabs” which automatically turned my Tabs into spaces. You don’t want that.

    @@ -125,23 +118,23 @@

    And I backup the databases:

    backup_script   /usr/bin/mysqldump –opt –databases mailserver mysql | gzip > mysqldump    mysql/

    I have the MySQL root password stored in /root/.my.cnf so I don’t need to mention it here.

    - +

    To make sure your configuration is correct run

    rsnapshot configtest

    Fix any errors until rsnapshot is happy and shows “Syntax OK”.

    You can simulate a daily backup by running:

    rsnapshot -t daily

    It will print out the commands that rsnapshot would run.

    - +

    If you want to access the files that rsnapshot backed up this is as simple as could be. In /var/autofs/removable/usbdrive/… you will find directories for hourly, daily and weekly backups. Since rsnapshot cleverly uses hardlinks unchanged files barely take up any space. You can just browse around in the respective subdirectories and access your files.

    That way you can even buy a second external USB disk drive and put the first disk off-site in case your house burns down, get burglared or your cat pees on the first disk.

    - +

    Of course if you lost the one external disk then all your backups would be ruined. So I suggest you get a second external disk and once a month swap them. Depending on your paranoia you can lock them in your bank’s deposit box or give it to your mother-in-law. As opposed to other backup solutions you can just use the second disk without much configuration. Make sure the autofs knows about it and plug it in.

    - -

    Kudos to Jochen R. who recommended rsnapshot to me.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/squid-acls/index.html b/squid-acls/index.html index 3504b28..98909b4 100644 --- a/squid-acls/index.html +++ b/squid-acls/index.html @@ -1,4 +1,4 @@ - How Squid ACLs work | ISPmail Guide - Skip to content
    + Skip to content

    How Squid ACLs work

    For less experienced Squid administrators the concept of ACLs can be confusing at first. But they offer a great way of controlling who is allowed to access which web pages when.

    - +

    How Squid ACLs work

    For less experienced Squid administrators the concept of ACLs can be confusing at first. But they offer a great way of controlling who is allowed to access which web pages when.

    +

    First you need to define certain criteria like accesses from the marketing department or accesses to google.com or need to authenticate. There are certain types of ACLs for that purpose. The complete list of ACLs can be found at http://www.visolve.com/squid/squid24s1/access_controls.php

    The syntax of an acl is:

    acl name type definition1 definition2 definition3 ...
    @@ -90,27 +83,27 @@

    Then the ACL for that file would look like:

    acl accessess_to_search_engines dstdomain "/etc/squid/search-engines-urls.txt"

    The quotes are important here to tell Squid it needs to look up definitions in that file.

    - +

    Defining the ACLs alone does not actually block anything – it’s just a definition. ACLs can be used in various places of your squid.conf. The most useful feature is the http_access statement. It works similar to the way a firewall would handle rules. For each request that Squid receives it will look through all the http_access statements in order until it finds a line that matches. It then either _accept_s or _deny_s depending on your setting. The remaining rules are ignored.

    The general syntax of an http_access line is:

    http_access (allow|deny) acl1 acl2 acl3 ...

    Example:

    http_access allow accesses_from_admins
    http_access deny accesses_to_porn_urls
    http_access allow accesses_during_lunchtime
    http_access deny all

    This would allow accessing from the admins (whatever that ACL looks like – probably a src ACL pointing to the subnet where the admin workstations are in). For everyone else it will deny accesses to porn URLs. Then it would allow accesses from everyone to every web site during lunch time. And finally all other accesses would be denied.

    - +

    Often you need to combine ACLs. Let’s say you want to allow access to google.com only for the back office. This combines two ACLS with an AND. This would look like this:

    http_access allow accesses_to_google.com accesses_from_back_office

    If you wanted to use an OR and say either accesses from the back office or accesses to google.com are allowed then the line would look like this:

    http_access allow accesses_to_google.com
    http_access allow accesses_from_back_office

    To summarize: AND means putting the conditions in one line. OR means using seperate lines.

    - +

    By default when you deny access the user gets the error page that is stored in the ERR_ACCESS_DENIED file. But luckily you can define your own custom error pages and display them when you deny certain accesses. A simple example:

    acl google dstdomain google.com
    deny_info error-google google
    http_access deny google

    Put an error page into the directory where the HTML files are stored (look for error_directory in your squid.conf) and name it error-google. If the user tries to access www.google.com the access is denied and your error page is shown.

    Careful when you combine ACLs on a http_access line. Example:

    acl google dstdomain google.com
    acl admin src 10.0.5.16
    deny_info google error-google
    http_access deny admin google

    This will deny access only for the user from the IP address 10.0.5.16 when www.google.com is accessed. As you can see I have combined the ACLs admin and google. In such a combination the last ACL in the line is taken into account for lookups of deny_info. So it’s important that you define a deny_info for the google ACL.

    - +

    Usually when a user is authenticated at the proxy you cannot “log out” and re-authenticate. The user has to close and re-open the browser windows to be able to re-login at the proxy. A simple configuration will probably look like this:

    acl my_auth proxy_auth REQUIRED
    http_access allow my_auth
    http_access deny all

    Now there is a tricky change that was introduced in Squid 2.5.10. It allows to control when the user is prompted to authenticate. Now it’s possible to force the user to re-authenticate although the username and password are still correct. Example configuration:

    @@ -122,10 +115,10 @@

    The second http_access line would force the user to re-authenticate time and again if he/she is not member of the PROXY_ALLOWED group. This is perhaps not what you want. You rather wanted to deny access to non-members. So you need to rewrite this http_access line so that an ACL matches that has nothing to do with authentication. This is the correct example:

    acl ldap-auth proxy_auth REQUIRED
    acl ldapgroup-allowed external LDAP_group PROXY_ALLOWED
    acl dummy src 0.0.0.0/0.0.0.0
    http_access deny !ldap-auth
    http_access deny !ldapgroup-allowed dummy
    http_access allow all
    -

    This way the second http_access line still matches. But it’s the dummy ACL which is now last in the line. Since dummy is a static ACL (that always matches) and has nothing to do with authentication you will find that the access is just denied.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/understanding-lvm/index.html b/understanding-lvm/index.html index 36d5976..382cf0b 100644 --- a/understanding-lvm/index.html +++ b/understanding-lvm/index.html @@ -1,4 +1,4 @@ - Understanding the Logical Volume Manager (LVM) | ISPmail Guide - Skip to content
    + Skip to content

    Understanding the Logical Volume Manager (LVM)

    +

    Understanding the Logical Volume Manager (LVM)

    LVM is a neat feature that some system administrators still shy away from. But it’s really not that hard to learn. And these are some awesome features you get:

    • Create a larger (virtual) disk from smaller disk (similar to RAID-0)
    • @@ -89,7 +82,7 @@
    • Replace disks without losing data.

    LVM is just a thin layer of software between the disks on your system and the partitions. On a Debian system you just “apt install lvm2” and you are ready to go.

    - +

    Three terms are commonly used:

    • PV (physical volume). A disk. (Or a partition.) Simple as that. An SSD. A hard drive. An SD card.
    • @@ -97,35 +90,35 @@
    • LV (logical volume). A fraction of such a group. Just take 200 GiB of the volume group and put a file system on it.

    A diagram is worth a thousand words so let’s use an illustration:

    -

    Diagram explaining components of the LVM

    - +

    Diagram explaining components of the LVM

    +

    On the left you see your three hard disks. Your computer has found them and made them accessible as /dev/sda, /dev/sdb and /dev/sdc. Usually you would create partitions on them (e.g. using cfdisk), put a file system on the partitions (mkfs) and mount them into your file system (mount /dev/sda1 /home).

    But this time we create a volume group from it. So first we turn the disks into PVs so that LVM recognizes them:

    pvcreate /dev/sda
    pvcreate /dev/sdb
    pvcreate /dev/sdc

    All this does is write a little meta-data onto each disk.

    You can use the “pvs” command command to list the PVs you have just created.

    When you take a close look at a PV for example (“pvdisplay” command) you will notice terms like “PE size” or “Free PE” or “Allocated PE”. PE is short for physical extent. Such an extent is the smallest data size that LVM handles. By default it’s set to 4 MiB. That means you can grow or shrink a logical volume only by a factor of 4 MiB. Using “lvextend” you can specify the number of extents using “-l …” (lowercase L) instead of the size “-L …” (uppercase L). Further down on this page you will find a tip on replacing a small harddisk by a larger harddisk. That essentially moves the extents from one disk to another.

    - +

    Next we create a new volume group (VG) from these three disks:

    vgcreate vg1 /dev/sda /dev/sdb /dev/sdc

    Now you have VG called “vg1” consisting of the three disks. The “vgs” command shows you an overview:

    VG #PV #LV #SN Attr VSize VFree
    vg1 3 0 0 wz--n- <6t <6t

    So you see that there is one VG called “vg1” which consists of 3 PVs (disks). And so far no LVs are using it. We will get to that in a moment. Its size is roughly 6 TiB and all of that is free to use.

    Using the “vgdisplay” command shows you even more information about it.

    - +

    The final step is to bite chunks out of the VG. Check out the diagram above. We want a partition for “/home” with a size of 100 GiB. So the command to create your LV is:

    lvcreate -n lvhome -L 100G vg1

    Pretty simple. The “-n” parameter sets the name of the new PV. “-L” is the size you want to use. And “vg1” is the name of the VG you want to cut a piece out of.

    The “lvs” command will show you an overview of your LVs.

    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    lvhome vg1 -wi-ao---- 100,00g

    There is also an “lvdisplay” command showing more verbose information about the LV.

    - +

    Finally we have something to put a file system on. You have probably used partitions on devices like /dev/sda1 before. But now you are using LVM. And the device for your “lvhome” is “/dev/vg1/lvhome”. Right, it’s “dev” + VG + LV. You could also use “/dev/mapper/vg1-lvhome”.

    Put an EXT4 file system onto it:

    mkfs.ext4 /dev/vg1/lvhome

    And mount that file system:

    mount /dev/vg1/lvhome /home
    - +

    There are PVs (disks), VGs (groups of disk) and LVs (fractions of a VG).

    To use LVM first turn disks into PVs (pvcreate), then join them to a VG (vgcreate), then take a fraction of that (lvcreate) and finally create a file system on that (/dev/vgfoo/lvbar).

    Every part has a list and a display command. These are:

    @@ -134,14 +127,14 @@
  • VG -> vgs, vgdisplay
  • LV -> lvs, lvdisplay
  • - +

    You may not be impressed yet. LVM just made your life more complicated. Of course there is a reason for it because now begins the fun part. These are some common features:

    - +

    Oh, no. Your /home partition is 99% full? With LVM this is easy to solve. If you have free space on your VG (check with “vgs”) you can just extend the disk. No need to unmount anything. No downtime. Let’s give the partition 20 GiB more space:

    lvextend -L +20G -r /dev/vg1/lvhome

    The “-r” parameter not only extends the LV but also the file system that lives on top. That allows you to enlarge a partition without taking it offline. This is the neatest feature that LVM delivers in my opinion.

    If your volume group is also out of space then you could add another disk (physical volume) and use “pvcreate” and “vgextend” to enlarge it.

    - +

    No problem either. Let’s assume that one of your disks (physical volumes) on /dev/sda was 2 TB and you just bought a shiny new 10 TB disk (found on /dev/sdg). Now you want to move the data over to the new disk. As usual you need to turn /dev/sdg into a PV:

    pvcreate /dev/sdg

    And now you can just move all blocks (aka physical extents – see below) to the new disk:

    @@ -149,7 +142,7 @@

    And finally you can remove the PV from your VG:

    vgreduce vg1 /dev/sda

    By the way: once a disk is a PV it doesn’t matter whether your system finds it on /dev/sdb, /dev/sdc or any other device. As long as all the necessary PVs are found somewhere the VG will work. Just if your boot sector was written on /dev/sda you may need to re-install it if you change that disk.

    - +

    A snapshot is like taking a photo with your camera. You get an image of a situation at a certain point in time. Reality will continue to alter the world but your photo will always show that specific moment. You can still take a pen and draw something on the photo so it’s not read-only. (It used to be on LVM 1.x.) I commonly use this technique to get consistent database snapshots of large MySQL/MariaDB databases.

    Let’s just say that you have a huge 1 TiB-sized LV called “lvmysql” that is mounted to /var/lib/mysql. Running a backup of those files takes an hour. And while you back up one file after another the SQL database is accessing the various files making arbitrary changes. Your backup would contain unusable garbage. Some files were from minute 5 while others might be from minute 30. Such a backup is unusable.

    Now let’s instead use snapshots. Briefly stop the database and take a snapshot:

    @@ -162,13 +155,13 @@

    The answer lies in the way that snapshots work. Once you started MySQL again the data directory was changed. LVM needs to provide you with your snapshot but at the same time allow MySQL to continue doing its work. That works by a mechanism called copy-on-write. If the original LV would not change then it would be identical to the snapshot. If however the files on the LV are changed then LVM needs to keep a copy of the snapshotted state. The more changes you do the more space for those copies you will need. And that’s what is meant by “-L 20 G”. It gives your snapshot a 20 GiB storage area to track the changes.

    The size depends on how much change you expect while you want to use the snapshot. If the backup takes an hour and the database typically changes 100 GiB during that period then you should give the snapshot at least that space. The “lvs” command shows you much much of that space has been used already. So you should keep the snapshot no longer than needed for a backup. Should you hit the 100% mark then your snapshot becomes unusable and all you can do it remove it. That won’t affect the original LV fortunately. So you won’t break your database.

    Another use case of snapshots would be to try out things on the snapshot. And if you like what you did then merge the changes to the original LV. That can be done using “lvconvert –merge /dev/vg1/mysnap”. But I suggest you consult the man page of “lvconvert” before you do that.

    - +

    Using LV for all partitions used to be a problem in the past. Debian created an ext2 partition for /boot to make sure the system boots. This has become obsolete for quite a while. You can use LVs everywhere and Debian will happily boot the system.

    - -

    By default LVM uses RAID-0. That is the RAID level that makes you lose everything if a single disk fails. LVM support RAID levels 1 and 5 though. Besides the LVM man pages I mainly found this web page describing it.

    \ No newline at end of file +
    \ No newline at end of file