From b79b5004a03dad1dcce82b56d20ed699da0bb69a Mon Sep 17 00:00:00 2001 From: Auri Munoz Date: Tue, 27 Feb 2024 13:00:19 +0100 Subject: [PATCH] Deployed 3cb2abcc to 2.6.0 with MkDocs 1.3.1 and mike 1.1.2 --- 2.6.0/404.html | 779 ++ 2.6.0/assets/images/favicon.png | Bin 0 -> 1870 bytes .../assets/javascripts/bundle.48f2be22.min.js | 29 + .../javascripts/bundle.48f2be22.min.js.map | 8 + .../javascripts/lunr/min/lunr.ar.min.js | 1 + .../javascripts/lunr/min/lunr.da.min.js | 18 + .../javascripts/lunr/min/lunr.de.min.js | 18 + .../javascripts/lunr/min/lunr.du.min.js | 18 + .../javascripts/lunr/min/lunr.es.min.js | 18 + .../javascripts/lunr/min/lunr.fi.min.js | 18 + .../javascripts/lunr/min/lunr.fr.min.js | 18 + .../javascripts/lunr/min/lunr.hi.min.js | 1 + .../javascripts/lunr/min/lunr.hu.min.js | 18 + .../javascripts/lunr/min/lunr.it.min.js | 18 + .../javascripts/lunr/min/lunr.ja.min.js | 1 + .../javascripts/lunr/min/lunr.jp.min.js | 1 + .../javascripts/lunr/min/lunr.multi.min.js | 1 + .../javascripts/lunr/min/lunr.nl.min.js | 18 + .../javascripts/lunr/min/lunr.no.min.js | 18 + .../javascripts/lunr/min/lunr.pt.min.js | 18 + .../javascripts/lunr/min/lunr.ro.min.js | 18 + .../javascripts/lunr/min/lunr.ru.min.js | 18 + .../lunr/min/lunr.stemmer.support.min.js | 1 + .../javascripts/lunr/min/lunr.sv.min.js | 18 + .../javascripts/lunr/min/lunr.th.min.js | 1 + .../javascripts/lunr/min/lunr.tr.min.js | 18 + .../javascripts/lunr/min/lunr.vi.min.js | 1 + .../javascripts/lunr/min/lunr.zh.min.js | 1 + 2.6.0/assets/javascripts/lunr/tinyseg.js | 206 + 2.6.0/assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.ecf98df9.min.js | 48 + .../workers/search.ecf98df9.min.js.map | 8 + .../assets/stylesheets/main.2e8b5541.min.css | 1 + .../stylesheets/main.2e8b5541.min.css.map | 1 + .../stylesheets/palette.cbb835fc.min.css | 1 + .../stylesheets/palette.cbb835fc.min.css.map | 1 + 2.6.0/concepts/index.html | 1196 +++ 2.6.0/diagrams/includes/themes/dark.puml | 10 + 2.6.0/diagrams/includes/themes/general.puml | 98 + 2.6.0/diagrams/includes/themes/light.puml | 11 + 2.6.0/diagrams/observability_sequence.puml | 24 + 2.6.0/diagrams/observation_sequence.puml | 37 + 2.6.0/diagrams/sequence.puml | 35 + 2.6.0/diagrams/srv_sequence.puml | 19 + 2.6.0/diagrams/stork.puml | 24 + 2.6.0/extra.css | 10 + 2.6.0/images/problem-dark.png | Bin 0 -> 401154 bytes 2.6.0/images/problem-light.png | Bin 0 -> 358257 bytes 2.6.0/images/redhat_reversed.svg | 1 + 2.6.0/images/solution-dark.png | Bin 0 -> 381256 bytes 2.6.0/images/solution-light.png | Bin 0 -> 343937 bytes 2.6.0/images/stork-white.png | Bin 0 -> 48466 bytes 2.6.0/index.html | 937 +++ .../custom-load-balancer/index.html | 1147 +++ 2.6.0/load-balancer/least-requests/index.html | 939 +++ .../power-of-two-choices/index.html | 961 +++ 2.6.0/load-balancer/random/index.html | 953 +++ 2.6.0/load-balancer/response-time/index.html | 1008 +++ 2.6.0/load-balancer/round-robin/index.html | 917 +++ 2.6.0/load-balancer/sticky/index.html | 944 +++ 2.6.0/microprofile-config/index.html | 955 +++ 2.6.0/observability/index.html | 1147 +++ 2.6.0/programmatic-api/index.html | 1186 +++ 2.6.0/quarkus/index.html | 1039 +++ 2.6.0/search/search_index.json | 1 + 2.6.0/service-discovery/composite/index.html | 959 +++ 2.6.0/service-discovery/consul/index.html | 1078 +++ .../custom-service-discovery/index.html | 1448 ++++ 2.6.0/service-discovery/dns/index.html | 1035 +++ 2.6.0/service-discovery/eureka/index.html | 1126 +++ 2.6.0/service-discovery/knative/index.html | 1098 +++ 2.6.0/service-discovery/kubernetes/index.html | 1104 +++ .../service-discovery/static-list/index.html | 1023 +++ 2.6.0/sitemap.xml | 113 + 2.6.0/sitemap.xml.gz | Bin 0 -> 213 bytes 2.6.0/springboot-config/index.html | 998 +++ 2.6.0/target/includes/themes/dark.svg | 1 + 2.6.0/target/includes/themes/dark_dark.svg | 1 + 2.6.0/target/includes/themes/general.svg | 1 + 2.6.0/target/includes/themes/general_dark.svg | 1 + 2.6.0/target/includes/themes/light.svg | 1 + 2.6.0/target/includes/themes/light_dark.svg | 1 + 2.6.0/target/observability_sequence.svg | 1 + 2.6.0/target/observability_sequence_dark.svg | 1 + 2.6.0/target/observation_sequence.svg | 1 + 2.6.0/target/observation_sequence_dark.svg | 1 + 2.6.0/target/sequence.svg | 1 + 2.6.0/target/sequence_dark.svg | 1 + 2.6.0/target/srv_sequence.svg | 1 + 2.6.0/target/srv_sequence_dark.svg | 1 + 2.6.0/target/stork.svg | 1 + 2.6.0/target/stork_dark.svg | 1 + latest/404.html | 6 +- latest/concepts/index.html | 6 +- latest/index.html | 6 +- .../custom-load-balancer/index.html | 6 +- .../load-balancer/least-requests/index.html | 6 +- .../power-of-two-choices/index.html | 6 +- latest/load-balancer/random/index.html | 6 +- latest/load-balancer/response-time/index.html | 6 +- latest/load-balancer/round-robin/index.html | 6 +- latest/load-balancer/sticky/index.html | 6 +- latest/microprofile-config/index.html | 16 + latest/observability/index.html | 6 +- latest/programmatic-api/index.html | 6 +- latest/quarkus/index.html | 6 +- latest/service-discovery/composite/index.html | 6 +- latest/service-discovery/consul/index.html | 6 +- .../custom-service-discovery/index.html | 6 +- latest/service-discovery/dns/index.html | 6 +- latest/service-discovery/eureka/index.html | 6 +- latest/service-discovery/knative/index.html | 6 +- .../service-discovery/kubernetes/index.html | 6 +- .../service-discovery/static-list/index.html | 6 +- latest/springboot-config/index.html | 16 + versions.json | 2 +- 116 files changed, 31762 insertions(+), 64 deletions(-) create mode 100644 2.6.0/404.html create mode 100644 2.6.0/assets/images/favicon.png create mode 100644 2.6.0/assets/javascripts/bundle.48f2be22.min.js create mode 100644 2.6.0/assets/javascripts/bundle.48f2be22.min.js.map create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 2.6.0/assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 2.6.0/assets/javascripts/lunr/tinyseg.js create mode 100644 2.6.0/assets/javascripts/lunr/wordcut.js create mode 100644 2.6.0/assets/javascripts/workers/search.ecf98df9.min.js create mode 100644 2.6.0/assets/javascripts/workers/search.ecf98df9.min.js.map create mode 100644 2.6.0/assets/stylesheets/main.2e8b5541.min.css create mode 100644 2.6.0/assets/stylesheets/main.2e8b5541.min.css.map create mode 100644 2.6.0/assets/stylesheets/palette.cbb835fc.min.css create mode 100644 2.6.0/assets/stylesheets/palette.cbb835fc.min.css.map create mode 100644 2.6.0/concepts/index.html create mode 100644 2.6.0/diagrams/includes/themes/dark.puml create mode 100644 2.6.0/diagrams/includes/themes/general.puml create mode 100644 2.6.0/diagrams/includes/themes/light.puml create mode 100644 2.6.0/diagrams/observability_sequence.puml create mode 100644 2.6.0/diagrams/observation_sequence.puml create mode 100644 2.6.0/diagrams/sequence.puml create mode 100644 2.6.0/diagrams/srv_sequence.puml create mode 100644 2.6.0/diagrams/stork.puml create mode 100644 2.6.0/extra.css create mode 100644 2.6.0/images/problem-dark.png create mode 100644 2.6.0/images/problem-light.png create mode 100644 2.6.0/images/redhat_reversed.svg create mode 100644 2.6.0/images/solution-dark.png create mode 100644 2.6.0/images/solution-light.png create mode 100644 2.6.0/images/stork-white.png create mode 100644 2.6.0/index.html create mode 100644 2.6.0/load-balancer/custom-load-balancer/index.html create mode 100644 2.6.0/load-balancer/least-requests/index.html create mode 100644 2.6.0/load-balancer/power-of-two-choices/index.html create mode 100644 2.6.0/load-balancer/random/index.html create mode 100644 2.6.0/load-balancer/response-time/index.html create mode 100644 2.6.0/load-balancer/round-robin/index.html create mode 100644 2.6.0/load-balancer/sticky/index.html create mode 100644 2.6.0/microprofile-config/index.html create mode 100644 2.6.0/observability/index.html create mode 100644 2.6.0/programmatic-api/index.html create mode 100644 2.6.0/quarkus/index.html create mode 100644 2.6.0/search/search_index.json create mode 100644 2.6.0/service-discovery/composite/index.html create mode 100644 2.6.0/service-discovery/consul/index.html create mode 100644 2.6.0/service-discovery/custom-service-discovery/index.html create mode 100644 2.6.0/service-discovery/dns/index.html create mode 100644 2.6.0/service-discovery/eureka/index.html create mode 100644 2.6.0/service-discovery/knative/index.html create mode 100644 2.6.0/service-discovery/kubernetes/index.html create mode 100644 2.6.0/service-discovery/static-list/index.html create mode 100644 2.6.0/sitemap.xml create mode 100644 2.6.0/sitemap.xml.gz create mode 100644 2.6.0/springboot-config/index.html create mode 100644 2.6.0/target/includes/themes/dark.svg create mode 100644 2.6.0/target/includes/themes/dark_dark.svg create mode 100644 2.6.0/target/includes/themes/general.svg create mode 100644 2.6.0/target/includes/themes/general_dark.svg create mode 100644 2.6.0/target/includes/themes/light.svg create mode 100644 2.6.0/target/includes/themes/light_dark.svg create mode 100644 2.6.0/target/observability_sequence.svg create mode 100644 2.6.0/target/observability_sequence_dark.svg create mode 100644 2.6.0/target/observation_sequence.svg create mode 100644 2.6.0/target/observation_sequence_dark.svg create mode 100644 2.6.0/target/sequence.svg create mode 100644 2.6.0/target/sequence_dark.svg create mode 100644 2.6.0/target/srv_sequence.svg create mode 100644 2.6.0/target/srv_sequence_dark.svg create mode 100644 2.6.0/target/stork.svg create mode 100644 2.6.0/target/stork_dark.svg create mode 100644 latest/microprofile-config/index.html create mode 100644 latest/springboot-config/index.html diff --git a/2.6.0/404.html b/2.6.0/404.html new file mode 100644 index 00000000..c54af065 --- /dev/null +++ b/2.6.0/404.html @@ -0,0 +1,779 @@ + + + + + + + + + + + + + + + + Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + + + +
+ + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/assets/images/favicon.png b/2.6.0/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c GIT binary patch literal 1870 zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0 zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7 z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9 zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K z^bTyO6>Gar#P_W2gEMwq)ot3; zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8 zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq! zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d; ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV** z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo IM6N<$f(jP3KmY&$ literal 0 HcmV?d00001 diff --git a/2.6.0/assets/javascripts/bundle.48f2be22.min.js b/2.6.0/assets/javascripts/bundle.48f2be22.min.js new file mode 100644 index 00000000..29d2a8fd --- /dev/null +++ b/2.6.0/assets/javascripts/bundle.48f2be22.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var aa=Object.create;var Er=Object.defineProperty;var sa=Object.getOwnPropertyDescriptor;var ca=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,fa=Object.getPrototypeOf,Sr=Object.prototype.hasOwnProperty,fn=Object.prototype.propertyIsEnumerable;var cn=(e,t,r)=>t in e?Er(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k=(e,t)=>{for(var r in t||(t={}))Sr.call(t,r)&&cn(e,r,t[r]);if(kt)for(var r of kt(t))fn.call(t,r)&&cn(e,r,t[r]);return e};var un=(e,t)=>{var r={};for(var n in e)Sr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&fn.call(e,n)&&(r[n]=e[n]);return r};var yt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ua=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ca(t))!Sr.call(e,o)&&o!==r&&Er(e,o,{get:()=>t[o],enumerable:!(n=sa(t,o))||n.enumerable});return e};var Ye=(e,t,r)=>(r=e!=null?aa(fa(e)):{},ua(t||!e||!e.__esModule?Er(r,"default",{value:e,enumerable:!0}):r,e));var ln=yt((wr,pn)=>{(function(e,t){typeof wr=="object"&&typeof pn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(wr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(_){return!!(_&&_!==document&&_.nodeName!=="HTML"&&_.nodeName!=="BODY"&&"classList"in _&&"contains"in _.classList)}function c(_){var We=_.type,Fe=_.tagName;return!!(Fe==="INPUT"&&a[We]&&!_.readOnly||Fe==="TEXTAREA"&&!_.readOnly||_.isContentEditable)}function f(_){_.classList.contains("focus-visible")||(_.classList.add("focus-visible"),_.setAttribute("data-focus-visible-added",""))}function u(_){!_.hasAttribute("data-focus-visible-added")||(_.classList.remove("focus-visible"),_.removeAttribute("data-focus-visible-added"))}function p(_){_.metaKey||_.altKey||_.ctrlKey||(s(r.activeElement)&&f(r.activeElement),n=!0)}function l(_){n=!1}function d(_){!s(_.target)||(n||c(_.target))&&f(_.target)}function h(_){!s(_.target)||(_.target.classList.contains("focus-visible")||_.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(_.target))}function b(_){document.visibilityState==="hidden"&&(o&&(n=!0),U())}function U(){document.addEventListener("mousemove",W),document.addEventListener("mousedown",W),document.addEventListener("mouseup",W),document.addEventListener("pointermove",W),document.addEventListener("pointerdown",W),document.addEventListener("pointerup",W),document.addEventListener("touchmove",W),document.addEventListener("touchstart",W),document.addEventListener("touchend",W)}function G(){document.removeEventListener("mousemove",W),document.removeEventListener("mousedown",W),document.removeEventListener("mouseup",W),document.removeEventListener("pointermove",W),document.removeEventListener("pointerdown",W),document.removeEventListener("pointerup",W),document.removeEventListener("touchmove",W),document.removeEventListener("touchstart",W),document.removeEventListener("touchend",W)}function W(_){_.target.nodeName&&_.target.nodeName.toLowerCase()==="html"||(n=!1,G())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",l,!0),document.addEventListener("pointerdown",l,!0),document.addEventListener("touchstart",l,!0),document.addEventListener("visibilitychange",b,!0),U(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var mn=yt(Or=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var p=f.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},a=function(){var f=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var l=typeof p;if(l!=="undefined")if(l==="string")p!==""&&this._fromString(p);else if(p instanceof f){var d=this;p.forEach(function(G,W){d.append(W,G)})}else if(p!==null&&l==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),f._entries&&(f._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(c,f){typeof c!="string"&&(c=String(c)),f&&typeof f!="string"&&(f=String(f));var u=document,p;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=f,u.head.appendChild(p);try{if(p.href.indexOf(f)!==0)throw new Error(p.href)}catch(_){throw new Error("URL unable to set base "+f+" due to "+_)}}var l=u.createElement("a");l.href=c,p&&(u.body.appendChild(l),l.href=l.href);var d=u.createElement("input");if(d.type="url",d.value=c,l.protocol===":"||!/:/.test(l.href)||!d.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:l});var h=new e.URLSearchParams(this.search),b=!0,U=!0,G=this;["append","delete","set"].forEach(function(_){var We=h[_];h[_]=function(){We.apply(h,arguments),b&&(U=!1,G.search=h.toString(),U=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var W=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==W&&(W=this.search,U&&(b=!1,this.searchParams._fromString(this.search),b=!0))}})},a=i.prototype,s=function(c){Object.defineProperty(a,c,{get:function(){return this._anchorElement[c]},set:function(f){this._anchorElement[c]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(c){s(c)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(c){this._anchorElement.search=c,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var c=this;return function(){return c.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(c){this._anchorElement.href=c,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(c){this._anchorElement.pathname=c},enumerable:!0},origin:{get:function(){var c={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=c&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(c){},enumerable:!0},username:{get:function(){return""},set:function(c){},enumerable:!0}}),i.createObjectURL=function(c){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(c){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or)});var Pn=yt((Ks,It)=>{/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */var dn,hn,bn,vn,gn,yn,xn,En,Sn,Ht,_r,wn,On,_n,rt,Tn,Mn,Ln,An,Cn,Rn,kn,Hn,Pt;(function(e){var t=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){e(r(t,r(n)))}):typeof It=="object"&&typeof It.exports=="object"?e(r(t,r(It.exports))):e(r(t));function r(n,o){return n!==t&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,a){return n[i]=o?o(i,a):a}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])};dn=function(n,o){if(typeof o!="function"&&o!==null)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");t(n,o);function i(){this.constructor=n}n.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)},hn=Object.assign||function(n){for(var o,i=1,a=arguments.length;i=0;u--)(f=n[u])&&(c=(s<3?f(c):s>3?f(o,i,c):f(o,i))||c);return s>3&&c&&Object.defineProperty(o,i,c),c},gn=function(n,o){return function(i,a){o(i,a,n)}},yn=function(n,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,o)},xn=function(n,o,i,a){function s(c){return c instanceof i?c:new i(function(f){f(c)})}return new(i||(i=Promise))(function(c,f){function u(d){try{l(a.next(d))}catch(h){f(h)}}function p(d){try{l(a.throw(d))}catch(h){f(h)}}function l(d){d.done?c(d.value):s(d.value).then(u,p)}l((a=a.apply(n,o||[])).next())})},En=function(n,o){var i={label:0,sent:function(){if(c[0]&1)throw c[1];return c[1]},trys:[],ops:[]},a,s,c,f;return f={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(f[Symbol.iterator]=function(){return this}),f;function u(l){return function(d){return p([l,d])}}function p(l){if(a)throw new TypeError("Generator is already executing.");for(;i;)try{if(a=1,s&&(c=l[0]&2?s.return:l[0]?s.throw||((c=s.return)&&c.call(s),0):s.next)&&!(c=c.call(s,l[1])).done)return c;switch(s=0,c&&(l=[l[0]&2,c.value]),l[0]){case 0:case 1:c=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,s=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(c=i.trys,!(c=c.length>0&&c[c.length-1])&&(l[0]===6||l[0]===2)){i=0;continue}if(l[0]===3&&(!c||l[1]>c[0]&&l[1]=n.length&&(n=void 0),{value:n&&n[a++],done:!n}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")},_r=function(n,o){var i=typeof Symbol=="function"&&n[Symbol.iterator];if(!i)return n;var a=i.call(n),s,c=[],f;try{for(;(o===void 0||o-- >0)&&!(s=a.next()).done;)c.push(s.value)}catch(u){f={error:u}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(f)throw f.error}}return c},wn=function(){for(var n=[],o=0;o1||u(b,U)})})}function u(b,U){try{p(a[b](U))}catch(G){h(c[0][3],G)}}function p(b){b.value instanceof rt?Promise.resolve(b.value.v).then(l,d):h(c[0][2],b)}function l(b){u("next",b)}function d(b){u("throw",b)}function h(b,U){b(U),c.shift(),c.length&&u(c[0][0],c[0][1])}},Mn=function(n){var o,i;return o={},a("next"),a("throw",function(s){throw s}),a("return"),o[Symbol.iterator]=function(){return this},o;function a(s,c){o[s]=n[s]?function(f){return(i=!i)?{value:rt(n[s](f)),done:s==="return"}:c?c(f):f}:c}},Ln=function(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=n[Symbol.asyncIterator],i;return o?o.call(n):(n=typeof Ht=="function"?Ht(n):n[Symbol.iterator](),i={},a("next"),a("throw"),a("return"),i[Symbol.asyncIterator]=function(){return this},i);function a(c){i[c]=n[c]&&function(f){return new Promise(function(u,p){f=n[c](f),s(u,p,f.done,f.value)})}}function s(c,f,u,p){Promise.resolve(p).then(function(l){c({value:l,done:u})},f)}},An=function(n,o){return Object.defineProperty?Object.defineProperty(n,"raw",{value:o}):n.raw=o,n};var r=Object.create?function(n,o){Object.defineProperty(n,"default",{enumerable:!0,value:o})}:function(n,o){n.default=o};Cn=function(n){if(n&&n.__esModule)return n;var o={};if(n!=null)for(var i in n)i!=="default"&&Object.prototype.hasOwnProperty.call(n,i)&&Pt(o,n,i);return r(o,n),o},Rn=function(n){return n&&n.__esModule?n:{default:n}},kn=function(n,o,i,a){if(i==="a"&&!a)throw new TypeError("Private accessor was defined without a getter");if(typeof o=="function"?n!==o||!a:!o.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?a:i==="a"?a.call(n):a?a.value:o.get(n)},Hn=function(n,o,i,a,s){if(a==="m")throw new TypeError("Private method is not writable");if(a==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof o=="function"?n!==o||!s:!o.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return a==="a"?s.call(n,i):s?s.value=i:o.set(n,i),i},e("__extends",dn),e("__assign",hn),e("__rest",bn),e("__decorate",vn),e("__param",gn),e("__metadata",yn),e("__awaiter",xn),e("__generator",En),e("__exportStar",Sn),e("__createBinding",Pt),e("__values",Ht),e("__read",_r),e("__spread",wn),e("__spreadArrays",On),e("__spreadArray",_n),e("__await",rt),e("__asyncGenerator",Tn),e("__asyncDelegator",Mn),e("__asyncValues",Ln),e("__makeTemplateObject",An),e("__importStar",Cn),e("__importDefault",Rn),e("__classPrivateFieldGet",kn),e("__classPrivateFieldSet",Hn)})});var Br=yt((At,Yr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof At=="object"&&typeof Yr=="object"?Yr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof At=="object"?At.ClipboardJS=r():t.ClipboardJS=r()})(At,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ia}});var a=i(279),s=i.n(a),c=i(370),f=i.n(c),u=i(817),p=i.n(u);function l(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var O=p()(T);return l("cut"),O},h=d;function b(j){var T=document.documentElement.getAttribute("dir")==="rtl",O=document.createElement("textarea");O.style.fontSize="12pt",O.style.border="0",O.style.padding="0",O.style.margin="0",O.style.position="absolute",O.style[T?"right":"left"]="-9999px";var R=window.pageYOffset||document.documentElement.scrollTop;return O.style.top="".concat(R,"px"),O.setAttribute("readonly",""),O.value=j,O}var U=function(T,O){var R=b(T);O.container.appendChild(R);var I=p()(R);return l("copy"),R.remove(),I},G=function(T){var O=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},R="";return typeof T=="string"?R=U(T,O):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?R=U(T.value,O):(R=p()(T),l("copy")),R},W=G;function _(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_=function(O){return typeof O}:_=function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},_(j)}var We=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=T.action,R=O===void 0?"copy":O,I=T.container,q=T.target,Te=T.text;if(R!=="copy"&&R!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&_(q)==="object"&&q.nodeType===1){if(R==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(R==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Te)return W(Te,{container:I});if(q)return R==="cut"?h(q):W(q,{container:I})},Fe=We;function Pe(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Pe=function(O){return typeof O}:Pe=function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},Pe(j)}function Ji(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function sn(j,T){for(var O=0;O0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=Pe(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=f()(I,"click",function(Te){return q.onClick(Te)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Te=this.action(q)||"copy",Rt=Fe({action:Te,container:this.container,target:this.target(q),text:this.text(q)});this.emit(Rt?"success":"error",{action:Te,text:Rt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return xr("action",I)}},{key:"defaultTarget",value:function(I){var q=xr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return xr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return W(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Te=!!document.queryCommandSupported;return q.forEach(function(Rt){Te=Te&&!!document.queryCommandSupported(Rt)}),Te}}]),O}(s()),ia=oa},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,c){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(c))return s;s=s.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function s(u,p,l,d,h){var b=f.apply(this,arguments);return u.addEventListener(l,b,h),{destroy:function(){u.removeEventListener(l,b,h)}}}function c(u,p,l,d,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof l=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(b){return s(b,p,l,d,h)}))}function f(u,p,l,d){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=c},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),s=i(438);function c(l,d,h){if(!l&&!d&&!h)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(l))return f(l,d,h);if(a.nodeList(l))return u(l,d,h);if(a.string(l))return p(l,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(l,d,h){return l.addEventListener(d,h),{destroy:function(){l.removeEventListener(d,h)}}}function u(l,d,h){return Array.prototype.forEach.call(l,function(b){b.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(l,function(b){b.removeEventListener(d,h)})}}}function p(l,d,h){return s(document.body,l,d,h)}n.exports=c},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),f=document.createRange();f.selectNodeContents(i),c.removeAllRanges(),c.addRange(f),a=c.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,s){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var c=this;function f(){c.off(i,f),a.apply(s,arguments)}return f._=a,this.on(i,f,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),c=0,f=s.length;for(c;c{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var Ms=/["'&<>]/;wi.exports=Ls;function Ls(e){var t=""+e,r=Ms.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?Tr:(this.currentObservers=null,s.push(r),new Ie(function(){n.currentObservers=null,Ue(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new Qn(r,n)},t}(F);var Qn=function(e){re(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Tr},t}(S);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var St=function(e){re(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,c=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=at.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){if(o===void 0&&(o=0),o!=null&&o>0||o==null&&this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);r.actions.some(function(i){return i.id===n})||(at.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Nt);var Gn=function(e){re(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(zt);var xe=new Gn(Bn);var H=new F(function(e){return e.complete()});function qt(e){return e&&L(e.schedule)}function Hr(e){return e[e.length-1]}function Ve(e){return L(Hr(e))?e.pop():void 0}function Ee(e){return qt(Hr(e))?e.pop():void 0}function Kt(e,t){return typeof Hr(e)=="number"?e.pop():t}var st=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Qt(e){return L(e==null?void 0:e.then)}function Yt(e){return L(e[it])}function Bt(e){return Symbol.asyncIterator&&L(e==null?void 0:e[Symbol.asyncIterator])}function Gt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function ya(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Jt=ya();function Xt(e){return L(e==null?void 0:e[Jt])}function Zt(e){return jn(this,arguments,function(){var r,n,o,i;return $t(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,jt(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,jt(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,jt(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function er(e){return L(e==null?void 0:e.getReader)}function N(e){if(e instanceof F)return e;if(e!=null){if(Yt(e))return xa(e);if(st(e))return Ea(e);if(Qt(e))return Sa(e);if(Bt(e))return Jn(e);if(Xt(e))return wa(e);if(er(e))return Oa(e)}throw Gt(e)}function xa(e){return new F(function(t){var r=e[it]();if(L(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ea(e){return new F(function(t){for(var r=0;r=2,!0))}function ie(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new S}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,c=s===void 0?!0:s;return function(f){var u,p,l,d=0,h=!1,b=!1,U=function(){p==null||p.unsubscribe(),p=void 0},G=function(){U(),u=l=void 0,h=b=!1},W=function(){var _=u;G(),_==null||_.unsubscribe()};return g(function(_,We){d++,!b&&!h&&U();var Fe=l=l!=null?l:r();We.add(function(){d--,d===0&&!b&&!h&&(p=Dr(W,c))}),Fe.subscribe(We),!u&&d>0&&(u=new Ge({next:function(Pe){return Fe.next(Pe)},error:function(Pe){b=!0,U(),p=Dr(G,o,Pe),Fe.error(Pe)},complete:function(){h=!0,U(),p=Dr(G,a),Fe.complete()}}),N(_).subscribe(u))})(f)}}function Dr(e,t){for(var r=[],n=2;ne.next(document)),e}function Q(e,t=document){return Array.from(t.querySelectorAll(e))}function K(e,t=document){let r=pe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function pe(e,t=document){return t.querySelector(e)||void 0}function $e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function nr(e){return A(v(document.body,"focusin"),v(document.body,"focusout")).pipe(Re(1),m(()=>{let t=$e();return typeof t!="undefined"?e.contains(t):!1}),z(e===$e()),B())}function qe(e){return{x:e.offsetLeft,y:e.offsetTop}}function yo(e){return A(v(window,"load"),v(window,"resize")).pipe(Ae(0,xe),m(()=>qe(e)),z(qe(e)))}function or(e){return{x:e.scrollLeft,y:e.scrollTop}}function pt(e){return A(v(e,"scroll"),v(window,"resize")).pipe(Ae(0,xe),m(()=>or(e)),z(or(e)))}var Eo=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!qr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Ka?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!qr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=qa.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),So=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Oo=typeof WeakMap!="undefined"?new WeakMap:new Eo,_o=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Qa.getInstance(),n=new ns(t,r,this);Oo.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){_o.prototype[e]=function(){var t;return(t=Oo.get(this))[e].apply(t,arguments)}});var os=function(){return typeof ir.ResizeObserver!="undefined"?ir.ResizeObserver:_o}(),To=os;var Mo=new S,is=P(()=>$(new To(e=>{for(let t of e)Mo.next(t)}))).pipe(w(e=>A(Se,$(e)).pipe(C(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ve(e){return is.pipe(E(t=>t.observe(e)),w(t=>Mo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(()=>he(e)))),z(he(e)))}function mt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Lo=new S,as=P(()=>$(new IntersectionObserver(e=>{for(let t of e)Lo.next(t)},{threshold:0}))).pipe(w(e=>A(Se,$(e)).pipe(C(()=>e.disconnect()))),X(1));function fr(e){return as.pipe(E(t=>t.observe(e)),w(t=>Lo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function Ao(e,t=16){return pt(e).pipe(m(({y:r})=>{let n=he(e),o=mt(e);return r>=o.height-n.height-t}),B())}var ur={drawer:K("[data-md-toggle=drawer]"),search:K("[data-md-toggle=search]")};function Co(e){return ur[e].checked}function Ke(e,t){ur[e].checked!==t&&ur[e].click()}function dt(e){let t=ur[e];return v(t,"change").pipe(m(()=>t.checked),z(t.checked))}function ss(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ro(){return v(window,"keydown").pipe(x(e=>!(e.metaKey||e.ctrlKey)),m(e=>({mode:Co("search")?"search":"global",type:e.key,claim(){e.preventDefault(),e.stopPropagation()}})),x(({mode:e,type:t})=>{if(e==="global"){let r=$e();if(typeof r!="undefined")return!ss(r,t)}return!0}),ie())}function we(){return new URL(location.href)}function pr(e){location.href=e.href}function ko(){return new S}function Ho(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Ho(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Ho(n,o);return n}function Po(e,t){let r=t;if(e.length>r){for(;e[r]!==" "&&--r>0;);return`${e.substring(0,r)}...`}return e}function lr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function Io(){return location.hash.substring(1)}function $o(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function cs(){return v(window,"hashchange").pipe(m(Io),z(Io()),x(e=>e.length>0),X(1))}function jo(){return cs().pipe(m(e=>pe(`[id="${e}"]`)),x(e=>typeof e!="undefined"))}function Kr(e){let t=matchMedia(e);return rr(r=>t.addListener(()=>r(t.matches))).pipe(z(t.matches))}function Fo(){let e=matchMedia("print");return A(v(window,"beforeprint").pipe(m(()=>!0)),v(window,"afterprint").pipe(m(()=>!1))).pipe(z(e.matches))}function Qr(e,t){return e.pipe(w(r=>r?t():H))}function mr(e,t={credentials:"same-origin"}){return fe(fetch(`${e}`,t)).pipe(se(()=>H),w(r=>r.status!==200?Ot(()=>new Error(r.statusText)):$(r)))}function je(e,t){return mr(e,t).pipe(w(r=>r.json()),X(1))}function Uo(e,t){let r=new DOMParser;return mr(e,t).pipe(w(n=>n.text()),m(n=>r.parseFromString(n,"text/xml")),X(1))}function Do(e){let t=M("script",{src:e});return P(()=>(document.head.appendChild(t),A(v(t,"load"),v(t,"error").pipe(w(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),C(()=>document.head.removeChild(t)),oe(1))))}function Wo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Vo(){return A(v(window,"scroll",{passive:!0}),v(window,"resize",{passive:!0})).pipe(m(Wo),z(Wo()))}function No(){return{width:innerWidth,height:innerHeight}}function zo(){return v(window,"resize",{passive:!0}).pipe(m(No),z(No()))}function qo(){return Y([Vo(),zo()]).pipe(m(([e,t])=>({offset:e,size:t})),X(1))}function dr(e,{viewport$:t,header$:r}){let n=t.pipe(J("size")),o=Y([n,r]).pipe(m(()=>qe(e)));return Y([r,t,o]).pipe(m(([{height:i},{offset:a,size:s},{x:c,y:f}])=>({offset:{x:a.x-c,y:a.y-f+i},size:s})))}function Ko(e,{tx$:t}){let r=v(e,"message").pipe(m(({data:n})=>n));return t.pipe(Lt(()=>r,{leading:!0,trailing:!0}),E(n=>e.postMessage(n)),w(()=>r),ie())}var fs=K("#__config"),ht=JSON.parse(fs.textContent);ht.base=`${new URL(ht.base,we())}`;function le(){return ht}function Z(e){return ht.features.includes(e)}function te(e,t){return typeof t!="undefined"?ht.translations[e].replace("#",t.toString()):ht.translations[e]}function Oe(e,t=document){return K(`[data-md-component=${e}]`,t)}function ne(e,t=document){return Q(`[data-md-component=${e}]`,t)}function us(e){let t=K(".md-typeset > :first-child",e);return v(t,"click",{once:!0}).pipe(m(()=>K(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function Qo(e){return!Z("announce.dismiss")||!e.childElementCount?H:P(()=>{let t=new S;return t.pipe(z({hash:__md_get("__announce")})).subscribe(({hash:r})=>{var n;r&&r===((n=__md_get("__announce"))!=null?n:r)&&(e.hidden=!0,__md_set("__announce",r))}),us(e).pipe(E(r=>t.next(r)),C(()=>t.complete()),m(r=>k({ref:e},r)))})}function ps(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function Yo(e,t){let r=new S;return r.subscribe(({hidden:n})=>{e.hidden=n}),ps(e,t).pipe(E(n=>r.next(n)),C(()=>r.complete()),m(n=>k({ref:e},n)))}var ii=Ye(Br());function Gr(e){return M("div",{class:"md-tooltip",id:e},M("div",{class:"md-tooltip__inner md-typeset"}))}function Bo(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("a",{href:r,class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}else return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("span",{class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}function Go(e){return M("button",{class:"md-clipboard md-icon",title:te("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Jr(e,t){let r=t&2,n=t&1,o=Object.keys(e.terms).filter(s=>!e.terms[s]).reduce((s,c)=>[...s,M("del",null,c)," "],[]).slice(0,-1),i=new URL(e.location);Z("search.highlight")&&i.searchParams.set("h",Object.entries(e.terms).filter(([,s])=>s).reduce((s,[c])=>`${s} ${c}`.trim(),""));let{tags:a}=le();return M("a",{href:`${i}`,class:"md-search-result__link",tabIndex:-1},M("article",{class:["md-search-result__article","md-typeset",...r?["md-search-result__article--document"]:[]].join(" "),"data-md-score":e.score.toFixed(2)},r>0&&M("div",{class:"md-search-result__icon md-icon"}),M("h1",{class:"md-search-result__title"},e.title),n>0&&e.text.length>0&&M("p",{class:"md-search-result__teaser"},Po(e.text,320)),e.tags&&e.tags.map(s=>{let c=s.replace(/<[^>]+>/g,""),f=a?c in a?`md-tag-icon md-tag-icon--${a[c]}`:"md-tag-icon":"";return M("span",{class:`md-tag ${f}`},s)}),n>0&&o.length>0&&M("p",{class:"md-search-result__terms"},te("search.result.term.missing"),": ",...o)))}function Jo(e){let t=e[0].score,r=[...e],n=r.findIndex(f=>!f.location.includes("#")),[o]=r.splice(n,1),i=r.findIndex(f=>f.scoreJr(f,1)),...s.length?[M("details",{class:"md-search-result__more"},M("summary",{tabIndex:-1},s.length>0&&s.length===1?te("search.result.more.one"):te("search.result.more.other",s.length)),...s.map(f=>Jr(f,1)))]:[]];return M("li",{class:"md-search-result__item"},c)}function Xo(e){return M("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>M("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?lr(r):r)))}function Xr(e){let t=`tabbed-control tabbed-control--${e}`;return M("div",{class:t,hidden:!0},M("button",{class:"tabbed-button",tabIndex:-1}))}function Zo(e){return M("div",{class:"md-typeset__scrollwrap"},M("div",{class:"md-typeset__table"},e))}function ls(e){let t=le(),r=new URL(`../${e.version}/`,t.base);return M("li",{class:"md-version__item"},M("a",{href:`${r}`,class:"md-version__link"},e.title))}function ei(e,t){return M("div",{class:"md-version"},M("button",{class:"md-version__current","aria-label":te("select.version.title")},t.title),M("ul",{class:"md-version__list"},e.map(ls)))}function ms(e,t){let r=P(()=>Y([yo(e),pt(t)])).pipe(m(([{x:n,y:o},i])=>{let{width:a,height:s}=he(e);return{x:n-i.x+a/2,y:o-i.y+s/2}}));return nr(e).pipe(w(n=>r.pipe(m(o=>({active:n,offset:o})),oe(+!n||1/0))))}function ti(e,t,{target$:r}){let[n,o]=Array.from(e.children);return P(()=>{let i=new S,a=i.pipe(de(1));return i.subscribe({next({offset:s}){e.style.setProperty("--md-tooltip-x",`${s.x}px`),e.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),fr(e).pipe(ee(a)).subscribe(s=>{e.toggleAttribute("data-md-visible",s)}),A(i.pipe(x(({active:s})=>s)),i.pipe(Re(250),x(({active:s})=>!s))).subscribe({next({active:s}){s?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Ae(16,xe)).subscribe(({active:s})=>{n.classList.toggle("md-tooltip--active",s)}),i.pipe(Nr(125,xe),x(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?e.style.setProperty("--md-tooltip-0",`${-s}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),v(o,"click").pipe(ee(a),x(s=>!(s.metaKey||s.ctrlKey))).subscribe(s=>s.preventDefault()),v(o,"mousedown").pipe(ee(a),ue(i)).subscribe(([s,{active:c}])=>{var f;if(s.button!==0||s.metaKey||s.ctrlKey)s.preventDefault();else if(c){s.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(f=$e())==null||f.blur()}}),r.pipe(ee(a),x(s=>s===n),ke(125)).subscribe(()=>e.focus()),ms(e,t).pipe(E(s=>i.next(s)),C(()=>i.complete()),m(s=>k({ref:e},s)))})}function ds(e){let t=[];for(let r of Q(".c, .c1, .cm",e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,s,c]=a;if(typeof c=="undefined"){let f=i.splitText(a.index);i=f.splitText(s.length),t.push(f)}else{i.textContent=s,t.push(i);break}}}}return t}function ri(e,t){t.append(...Array.from(e.childNodes))}function ni(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,a=new Map;for(let s of ds(t)){let[,c]=s.textContent.match(/\((\d+)\)/);pe(`li:nth-child(${c})`,e)&&(a.set(c,Bo(c,i)),s.replaceWith(a.get(c)))}return a.size===0?H:P(()=>{let s=new S,c=[];for(let[f,u]of a)c.push([K(".md-typeset",u),K(`li:nth-child(${f})`,e)]);return n.pipe(ee(s.pipe(de(1)))).subscribe(f=>{e.hidden=!f;for(let[u,p]of c)f?ri(u,p):ri(p,u)}),A(...[...a].map(([,f])=>ti(f,t,{target$:r}))).pipe(C(()=>s.complete()),ie())})}var hs=0;function ai(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return ai(t)}}function oi(e){return ve(e).pipe(m(({width:t})=>({scrollable:mt(e).width>t})),J("scrollable"))}function si(e,t){let{matches:r}=matchMedia("(hover)"),n=P(()=>{let o=new S;if(o.subscribe(({scrollable:a})=>{a&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),ii.default.isSupported()){let a=e.closest("pre");a.id=`__code_${++hs}`,a.insertBefore(Go(a.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let a=ai(i);if(typeof a!="undefined"&&(i.classList.contains("annotate")||Z("content.code.annotate"))){let s=ni(a,e,t);return oi(e).pipe(E(c=>o.next(c)),C(()=>o.complete()),m(c=>k({ref:e},c)),et(ve(i).pipe(m(({width:c,height:f})=>c&&f),B(),w(c=>c?s:H))))}}return oi(e).pipe(E(a=>o.next(a)),C(()=>o.complete()),m(a=>k({ref:e},a)))});return Z("content.lazy")?fr(e).pipe(x(o=>o),oe(1),w(()=>n)):n}var ci=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:transparent}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}defs #flowchart-circleEnd,defs #flowchart-circleStart,defs #flowchart-crossEnd,defs #flowchart-crossStart,defs #flowchart-pointEnd,defs #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}.actor,defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{stroke:var(--md-mermaid-node-fg-color)}text.actor>tspan{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-default-fg-color--lighter)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-edge-color)}.loopText>tspan,.messageText{font-family:var(--md-mermaid-font-family)!important}#arrowhead path,.loopText>tspan,.messageText{fill:var(--md-mermaid-edge-color);stroke:none}.loopLine{stroke:var(--md-mermaid-node-fg-color)}.labelBox,.loopLine{fill:var(--md-mermaid-node-bg-color)}.labelBox{stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-node-fg-color);font-family:var(--md-mermaid-font-family)}";var Zr,vs=0;function gs(){return typeof mermaid=="undefined"||mermaid instanceof Element?Do("https://unpkg.com/mermaid@9.0.1/dist/mermaid.min.js"):$(void 0)}function fi(e){return e.classList.remove("mermaid"),Zr||(Zr=gs().pipe(E(()=>mermaid.initialize({startOnLoad:!1,themeCSS:ci})),m(()=>{}),X(1))),Zr.subscribe(()=>{e.classList.add("mermaid");let t=`__mermaid_${vs++}`,r=M("div",{class:"mermaid"});mermaid.mermaidAPI.render(t,e.textContent,n=>{let o=r.attachShadow({mode:"closed"});o.innerHTML=n,e.replaceWith(r)})}),Zr.pipe(m(()=>({ref:e})))}function ys(e,{target$:t,print$:r}){let n=!0;return A(t.pipe(m(o=>o.closest("details:not([open])")),x(o=>e===o),m(()=>({action:"open",reveal:!0}))),r.pipe(x(o=>o||!n),E(()=>n=e.open),m(o=>({action:o?"open":"close"}))))}function ui(e,t){return P(()=>{let r=new S;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),ys(e,t).pipe(E(n=>r.next(n)),C(()=>r.complete()),m(n=>k({ref:e},n)))})}var pi=M("table");function li(e){return e.replaceWith(pi),pi.replaceWith(Zo(e)),$({ref:e})}function xs(e){let t=Q(":scope > input",e),r=t.find(n=>n.checked)||t[0];return A(...t.map(n=>v(n,"change").pipe(m(()=>K(`label[for="${n.id}"]`))))).pipe(z(K(`label[for="${r.id}"]`)),m(n=>({active:n})))}function mi(e){let t=Xr("prev");e.append(t);let r=Xr("next");e.append(r);let n=K(".tabbed-labels",e);return P(()=>{let o=new S,i=o.pipe(de(1));return Y([o,ve(e)]).pipe(Ae(1,xe),ee(i)).subscribe({next([{active:a},s]){let c=qe(a),{width:f}=he(a);e.style.setProperty("--md-indicator-x",`${c.x}px`),e.style.setProperty("--md-indicator-width",`${f}px`);let u=or(n);(c.xu.x+s.width)&&n.scrollTo({left:Math.max(0,c.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),Y([pt(n),ve(n)]).pipe(ee(i)).subscribe(([a,s])=>{let c=mt(n);t.hidden=a.x<16,r.hidden=a.x>c.width-s.width-16}),A(v(t,"click").pipe(m(()=>-1)),v(r,"click").pipe(m(()=>1))).pipe(ee(i)).subscribe(a=>{let{width:s}=he(n);n.scrollBy({left:s*a,behavior:"smooth"})}),Z("content.tabs.link")&&o.pipe(He(1)).subscribe(({active:a})=>{let s=a.innerText.trim();for(let f of Q("[data-tabs]"))for(let u of Q(":scope > input",f))if(K(`label[for="${u.id}"]`).innerText.trim()===s){u.click();break}let c=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([s,...c])])}),xs(e).pipe(E(a=>o.next(a)),C(()=>o.complete()),m(a=>k({ref:e},a)))}).pipe(Je(ce))}function di(e,{target$:t,print$:r}){return A(...Q("pre:not(.mermaid) > code",e).map(n=>si(n,{target$:t,print$:r})),...Q("pre.mermaid",e).map(n=>fi(n)),...Q("table:not([class])",e).map(n=>li(n)),...Q("details",e).map(n=>ui(n,{target$:t,print$:r})),...Q("[data-tabs]",e).map(n=>mi(n)))}function Es(e,{alert$:t}){return t.pipe(w(r=>A($(!0),$(!1).pipe(ke(2e3))).pipe(m(n=>({message:r,active:n})))))}function hi(e,t){let r=K(".md-typeset",e);return P(()=>{let n=new S;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),Es(e,t).pipe(E(o=>n.next(o)),C(()=>n.complete()),m(o=>k({ref:e},o)))})}function Ss({viewport$:e}){if(!Z("header.autohide"))return $(!1);let t=e.pipe(m(({offset:{y:o}})=>o),Ce(2,1),m(([o,i])=>[oMath.abs(i-o.y)>100),m(([,[o]])=>o),B()),n=dt("search");return Y([e,n]).pipe(m(([{offset:o},i])=>o.y>400&&!i),B(),w(o=>o?r:$(!1)),z(!1))}function bi(e,t){return P(()=>Y([ve(e),Ss(t)])).pipe(m(([{height:r},n])=>({height:r,hidden:n})),B((r,n)=>r.height===n.height&&r.hidden===n.hidden),X(1))}function vi(e,{header$:t,main$:r}){return P(()=>{let n=new S,o=n.pipe(de(1));return n.pipe(J("active"),Ze(t)).subscribe(([{active:i},{hidden:a}])=>{e.classList.toggle("md-header--shadow",i&&!a),e.hidden=a}),r.subscribe(n),t.pipe(ee(o),m(i=>k({ref:e},i)))})}function ws(e,{viewport$:t,header$:r}){return dr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:n}})=>{let{height:o}=he(e);return{active:n>=o}}),J("active"))}function gi(e,t){return P(()=>{let r=new S;r.subscribe(({active:o})=>{e.classList.toggle("md-header__title--active",o)});let n=pe("article h1");return typeof n=="undefined"?H:ws(n,t).pipe(E(o=>r.next(o)),C(()=>r.complete()),m(o=>k({ref:e},o)))})}function yi(e,{viewport$:t,header$:r}){let n=r.pipe(m(({height:i})=>i),B()),o=n.pipe(w(()=>ve(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),J("bottom"))));return Y([n,o,t]).pipe(m(([i,{top:a,bottom:s},{offset:{y:c},size:{height:f}}])=>(f=Math.max(0,f-Math.max(0,a-c,i)-Math.max(0,f+c-s)),{offset:a-i,height:f,active:a-i<=c})),B((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function Os(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return $(...e).pipe(ae(r=>v(r,"change").pipe(m(()=>r))),z(e[Math.max(0,t.index)]),m(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),X(1))}function xi(e){return P(()=>{let t=new S;t.subscribe(n=>{document.body.setAttribute("data-md-color-switching","");for(let[o,i]of Object.entries(n.color))document.body.setAttribute(`data-md-color-${o}`,i);for(let o=0;o{document.body.removeAttribute("data-md-color-switching")});let r=Q("input",e);return Os(r).pipe(E(n=>t.next(n)),C(()=>t.complete()),m(n=>k({ref:e},n)))})}var en=Ye(Br());function _s(e){e.setAttribute("data-md-copying","");let t=e.innerText;return e.removeAttribute("data-md-copying"),t}function Ei({alert$:e}){en.default.isSupported()&&new F(t=>{new en.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||_s(K(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(E(t=>{t.trigger.focus()}),m(()=>te("clipboard.copied"))).subscribe(e)}function Ts(e){if(e.length<2)return[""];let[t,r]=[...e].sort((o,i)=>o.length-i.length).map(o=>o.replace(/[^/]+$/,"")),n=0;if(t===r)n=t.length;else for(;t.charCodeAt(n)===r.charCodeAt(n);)n++;return e.map(o=>o.replace(t.slice(0,n),""))}function hr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return $(t);{let r=le();return Uo(new URL("sitemap.xml",e||r.base)).pipe(m(n=>Ts(Q("loc",n).map(o=>o.textContent))),se(()=>H),De([]),E(n=>__md_set("__sitemap",n,sessionStorage,e)))}}function Si({document$:e,location$:t,viewport$:r}){let n=le();if(location.protocol==="file:")return;"scrollRestoration"in history&&(history.scrollRestoration="manual",v(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}));let o=pe("link[rel=icon]");typeof o!="undefined"&&(o.href=o.href);let i=hr().pipe(m(f=>f.map(u=>`${new URL(u,n.base)}`)),w(f=>v(document.body,"click").pipe(x(u=>!u.metaKey&&!u.ctrlKey),w(u=>{if(u.target instanceof Element){let p=u.target.closest("a");if(p&&!p.target){let l=new URL(p.href);if(l.search="",l.hash="",l.pathname!==location.pathname&&f.includes(l.toString()))return u.preventDefault(),$({url:new URL(p.href)})}}return Se}))),ie()),a=v(window,"popstate").pipe(x(f=>f.state!==null),m(f=>({url:new URL(location.href),offset:f.state})),ie());A(i,a).pipe(B((f,u)=>f.url.href===u.url.href),m(({url:f})=>f)).subscribe(t);let s=t.pipe(J("pathname"),w(f=>mr(f.href).pipe(se(()=>(pr(f),Se)))),ie());i.pipe(ut(s)).subscribe(({url:f})=>{history.pushState({},"",`${f}`)});let c=new DOMParser;s.pipe(w(f=>f.text()),m(f=>c.parseFromString(f,"text/html"))).subscribe(e),e.pipe(He(1)).subscribe(f=>{for(let u of["title","link[rel=canonical]","meta[name=author]","meta[name=description]","[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...Z("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let p=pe(u),l=pe(u,f);typeof p!="undefined"&&typeof l!="undefined"&&p.replaceWith(l)}}),e.pipe(He(1),m(()=>Oe("container")),w(f=>Q("script",f)),$r(f=>{let u=M("script");if(f.src){for(let p of f.getAttributeNames())u.setAttribute(p,f.getAttribute(p));return f.replaceWith(u),new F(p=>{u.onload=()=>p.complete()})}else return u.textContent=f.textContent,f.replaceWith(u),H})).subscribe(),A(i,a).pipe(ut(e)).subscribe(({url:f,offset:u})=>{f.hash&&!u?$o(f.hash):window.scrollTo(0,(u==null?void 0:u.y)||0)}),r.pipe(Mt(i),Re(250),J("offset")).subscribe(({offset:f})=>{history.replaceState(f,"")}),A(i,a).pipe(Ce(2,1),x(([f,u])=>f.url.pathname===u.url.pathname),m(([,f])=>f)).subscribe(({offset:f})=>{window.scrollTo(0,(f==null?void 0:f.y)||0)})}var As=Ye(tn());var Oi=Ye(tn());function rn(e,t){let r=new RegExp(e.separator,"img"),n=(o,i,a)=>`${i}${a}`;return o=>{o=o.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator})(${o.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(t?(0,Oi.default)(a):a).replace(i,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function _i(e){return e.split(/"([^"]+)"/g).map((t,r)=>r&1?t.replace(/^\b|^(?![^\x00-\x7F]|$)|\s+/g," +"):t).join("").replace(/"|(?:^|\s+)[*+\-:^~]+(?=\s+|$)/g,"").trim()}function bt(e){return e.type===1}function Ti(e){return e.type===2}function vt(e){return e.type===3}function Rs({config:e,docs:t}){e.lang.length===1&&e.lang[0]==="en"&&(e.lang=[te("search.config.lang")]),e.separator==="[\\s\\-]+"&&(e.separator=te("search.config.separator"));let n={pipeline:te("search.config.pipeline").split(/\s*,\s*/).filter(Boolean),suggestions:Z("search.suggest")};return{config:e,docs:t,options:n}}function Mi(e,t){let r=le(),n=new Worker(e),o=new S,i=Ko(n,{tx$:o}).pipe(m(a=>{if(vt(a))for(let s of a.data.items)for(let c of s)c.location=`${new URL(c.location,r.base)}`;return a}),ie());return fe(t).pipe(m(a=>({type:0,data:Rs(a)}))).subscribe(o.next.bind(o)),{tx$:o,rx$:i}}function Li({document$:e}){let t=le(),r=je(new URL("../versions.json",t.base)).pipe(se(()=>H)),n=r.pipe(m(o=>{let[,i]=t.base.match(/([^/]+)\/?$/);return o.find(({version:a,aliases:s})=>a===i||s.includes(i))||o[0]}));r.pipe(m(o=>new Map(o.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),w(o=>v(document.body,"click").pipe(x(i=>!i.metaKey&&!i.ctrlKey),ue(n),w(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&o.has(s.href)){let c=s.href;return!i.target.closest(".md-version")&&o.get(c)===a?H:(i.preventDefault(),$(c))}}return H}),w(i=>{let{version:a}=o.get(i);return hr(new URL(i)).pipe(m(s=>{let f=we().href.replace(t.base,"");return s.includes(f.split("#")[0])?new URL(`../${a}/${f}`,t.base):new URL(i)}))})))).subscribe(o=>pr(o)),Y([r,n]).subscribe(([o,i])=>{K(".md-header__topic").appendChild(ei(o,i))}),e.pipe(w(()=>n)).subscribe(o=>{var a;let i=__md_get("__outdated",sessionStorage);if(i===null){let s=((a=t.version)==null?void 0:a.default)||"latest";i=!o.aliases.includes(s),__md_set("__outdated",i,sessionStorage)}if(i)for(let s of ne("outdated"))s.hidden=!1})}function ks(e,{rx$:t}){let r=(__search==null?void 0:__search.transform)||_i,{searchParams:n}=we();n.has("q")&&Ke("search",!0);let o=t.pipe(x(bt),oe(1),m(()=>n.get("q")||""));dt("search").pipe(x(s=>!s),oe(1)).subscribe(()=>{let s=new URL(location.href);s.searchParams.delete("q"),history.replaceState({},"",`${s}`)}),o.subscribe(s=>{s&&(e.value=s,e.focus())});let i=nr(e),a=A(v(e,"keyup"),v(e,"focus").pipe(ke(1)),o).pipe(m(()=>r(e.value)),z(""),B());return Y([a,i]).pipe(m(([s,c])=>({value:s,focus:c})),X(1))}function Ai(e,{tx$:t,rx$:r}){let n=new S,o=n.pipe(de(1));return n.pipe(J("value"),m(({value:i})=>({type:2,data:i}))).subscribe(t.next.bind(t)),n.pipe(J("focus")).subscribe(({focus:i})=>{i?(Ke("search",i),e.placeholder=""):e.placeholder=te("search.placeholder")}),v(e.form,"reset").pipe(ee(o)).subscribe(()=>e.focus()),ks(e,{tx$:t,rx$:r}).pipe(E(i=>n.next(i)),C(()=>n.complete()),m(i=>k({ref:e},i)),ie())}function Ci(e,{rx$:t},{query$:r}){let n=new S,o=Ao(e.parentElement).pipe(x(Boolean)),i=K(":scope > :first-child",e),a=K(":scope > :last-child",e),s=t.pipe(x(bt),oe(1));return n.pipe(ue(r),Mt(s)).subscribe(([{items:f},{value:u}])=>{if(u)switch(f.length){case 0:i.textContent=te("search.result.none");break;case 1:i.textContent=te("search.result.one");break;default:i.textContent=te("search.result.other",lr(f.length))}else i.textContent=te("search.result.placeholder")}),n.pipe(E(()=>a.innerHTML=""),w(({items:f})=>A($(...f.slice(0,10)),$(...f.slice(10)).pipe(Ce(4),zr(o),w(([u])=>u))))).subscribe(f=>a.appendChild(Jo(f))),t.pipe(x(vt),m(({data:f})=>f)).pipe(E(f=>n.next(f)),C(()=>n.complete()),m(f=>k({ref:e},f)))}function Hs(e,{query$:t}){return t.pipe(m(({value:r})=>{let n=we();return n.hash="",n.searchParams.delete("h"),n.searchParams.set("q",r),{url:n}}))}function Ri(e,t){let r=new S;return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),v(e,"click").subscribe(n=>n.preventDefault()),Hs(e,t).pipe(E(n=>r.next(n)),C(()=>r.complete()),m(n=>k({ref:e},n)))}function ki(e,{rx$:t},{keyboard$:r}){let n=new S,o=Oe("search-query"),i=A(v(o,"keydown"),v(o,"focus")).pipe(Le(ce),m(()=>o.value),B());return n.pipe(Ze(i),m(([{suggestions:s},c])=>{let f=c.split(/([\s-]+)/);if((s==null?void 0:s.length)&&f[f.length-1]){let u=s[s.length-1];u.startsWith(f[f.length-1])&&(f[f.length-1]=u)}else f.length=0;return f})).subscribe(s=>e.innerHTML=s.join("").replace(/\s/g," ")),r.pipe(x(({mode:s})=>s==="search")).subscribe(s=>{switch(s.type){case"ArrowRight":e.innerText.length&&o.selectionStart===o.value.length&&(o.value=e.innerText);break}}),t.pipe(x(vt),m(({data:s})=>s)).pipe(E(s=>n.next(s)),C(()=>n.complete()),m(()=>({ref:e})))}function Hi(e,{index$:t,keyboard$:r}){let n=le();try{let o=(__search==null?void 0:__search.worker)||n.search,i=Mi(o,t),a=Oe("search-query",e),s=Oe("search-result",e),{tx$:c,rx$:f}=i;c.pipe(x(Ti),ut(f.pipe(x(bt))),oe(1)).subscribe(c.next.bind(c)),r.pipe(x(({mode:l})=>l==="search")).subscribe(l=>{let d=$e();switch(l.type){case"Enter":if(d===a){let h=new Map;for(let b of Q(":first-child [href]",s)){let U=b.firstElementChild;h.set(b,parseFloat(U.getAttribute("data-md-score")))}if(h.size){let[[b]]=[...h].sort(([,U],[,G])=>G-U);b.click()}l.claim()}break;case"Escape":case"Tab":Ke("search",!1),a.blur();break;case"ArrowUp":case"ArrowDown":if(typeof d=="undefined")a.focus();else{let h=[a,...Q(":not(details) > [href], summary, details[open] [href]",s)],b=Math.max(0,(Math.max(0,h.indexOf(d))+h.length+(l.type==="ArrowUp"?-1:1))%h.length);h[b].focus()}l.claim();break;default:a!==$e()&&a.focus()}}),r.pipe(x(({mode:l})=>l==="global")).subscribe(l=>{switch(l.type){case"f":case"s":case"/":a.focus(),a.select(),l.claim();break}});let u=Ai(a,i),p=Ci(s,i,{query$:u});return A(u,p).pipe(et(...ne("search-share",e).map(l=>Ri(l,{query$:u})),...ne("search-suggest",e).map(l=>ki(l,i,{keyboard$:r}))))}catch(o){return e.hidden=!0,Se}}function Pi(e,{index$:t,location$:r}){return Y([t,r.pipe(z(we()),x(n=>!!n.searchParams.get("h")))]).pipe(m(([n,o])=>rn(n.config,!0)(o.searchParams.get("h"))),m(n=>{var a;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let c=s.textContent,f=n(c);f.length>c.length&&o.set(s,f)}for(let[s,c]of o){let{childNodes:f}=M("span",null,c);s.replaceWith(...Array.from(f))}return{ref:e,nodes:o}}))}function Ps(e,{viewport$:t,main$:r}){let n=e.parentElement,o=n.offsetTop-n.parentElement.offsetTop;return Y([r,t]).pipe(m(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(o,Math.max(0,s-i))-o,{height:a,locked:s>=i+o})),B((i,a)=>i.height===a.height&&i.locked===a.locked))}function nn(e,n){var o=n,{header$:t}=o,r=un(o,["header$"]);let i=K(".md-sidebar__scrollwrap",e),{y:a}=qe(i);return P(()=>{let s=new S;return s.pipe(Ae(0,xe),ue(t)).subscribe({next([{height:c},{height:f}]){i.style.height=`${c-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),s.pipe(Le(xe),oe(1)).subscribe(()=>{for(let c of Q(".md-nav__link--active[href]",e)){let f=cr(c);if(typeof f!="undefined"){let u=c.offsetTop-f.offsetTop,{height:p}=he(f);f.scrollTo({top:u-p/2})}}}),Ps(e,r).pipe(E(c=>s.next(c)),C(()=>s.complete()),m(c=>k({ref:e},c)))})}function Ii(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return _t(je(`${r}/releases/latest`).pipe(se(()=>H),m(n=>({version:n.tag_name})),De({})),je(r).pipe(se(()=>H),m(n=>({stars:n.stargazers_count,forks:n.forks_count})),De({}))).pipe(m(([n,o])=>k(k({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return je(r).pipe(m(n=>({repositories:n.public_repos})),De({}))}}function $i(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return je(r).pipe(se(()=>H),m(({star_count:n,forks_count:o})=>({stars:n,forks:o})),De({}))}function ji(e){let[t]=e.match(/(git(?:hub|lab))/i)||[];switch(t.toLowerCase()){case"github":let[,r,n]=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);return Ii(r,n);case"gitlab":let[,o,i]=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i);return $i(o,i);default:return H}}var Is;function $s(e){return Is||(Is=P(()=>{let t=__md_get("__source",sessionStorage);return t?$(t):ji(e.href).pipe(E(r=>__md_set("__source",r,sessionStorage)))}).pipe(se(()=>H),x(t=>Object.keys(t).length>0),m(t=>({facts:t})),X(1)))}function Fi(e){let t=K(":scope > :last-child",e);return P(()=>{let r=new S;return r.subscribe(({facts:n})=>{t.appendChild(Xo(n)),t.classList.add("md-source__repository--active")}),$s(e).pipe(E(n=>r.next(n)),C(()=>r.complete()),m(n=>k({ref:e},n)))})}function js(e,{viewport$:t,header$:r}){return ve(document.body).pipe(w(()=>dr(e,{header$:r,viewport$:t})),m(({offset:{y:n}})=>({hidden:n>=10})),J("hidden"))}function Ui(e,t){return P(()=>{let r=new S;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(Z("navigation.tabs.sticky")?$({hidden:!1}):js(e,t)).pipe(E(n=>r.next(n)),C(()=>r.complete()),m(n=>k({ref:e},n)))})}function Fs(e,{viewport$:t,header$:r}){let n=new Map,o=Q("[href^=\\#]",e);for(let s of o){let c=decodeURIComponent(s.hash.substring(1)),f=pe(`[id="${c}"]`);typeof f!="undefined"&&n.set(s,f)}let i=r.pipe(J("height"),m(({height:s})=>{let c=Oe("main"),f=K(":scope > :first-child",c);return s+.8*(f.offsetTop-c.offsetTop)}),ie());return ve(document.body).pipe(J("height"),w(s=>P(()=>{let c=[];return $([...n].reduce((f,[u,p])=>{for(;c.length&&n.get(c[c.length-1]).tagName>=p.tagName;)c.pop();let l=p.offsetTop;for(;!l&&p.parentElement;)p=p.parentElement,l=p.offsetTop;return f.set([...c=[...c,u]].reverse(),l)},new Map))}).pipe(m(c=>new Map([...c].sort(([,f],[,u])=>f-u))),Ze(i),w(([c,f])=>t.pipe(Ur(([u,p],{offset:{y:l},size:d})=>{let h=l+d.height>=Math.floor(s.height);for(;p.length;){let[,b]=p[0];if(b-f=l&&!h)p=[u.pop(),...p];else break}return[u,p]},[[],[...c]]),B((u,p)=>u[0]===p[0]&&u[1]===p[1])))))).pipe(m(([s,c])=>({prev:s.map(([f])=>f),next:c.map(([f])=>f)})),z({prev:[],next:[]}),Ce(2,1),m(([s,c])=>s.prev.length{let o=new S,i=o.pipe(de(1));if(o.subscribe(({prev:a,next:s})=>{for(let[c]of s)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[f]]of a.entries())f.classList.add("md-nav__link--passed"),f.classList.toggle("md-nav__link--active",c===a.length-1)}),Z("toc.follow")){let a=A(t.pipe(Re(1),m(()=>{})),t.pipe(Re(250),m(()=>"smooth")));o.pipe(x(({prev:s})=>s.length>0),ue(a)).subscribe(([{prev:s},c])=>{let[f]=s[s.length-1];if(f.offsetHeight){let u=cr(f);if(typeof u!="undefined"){let p=f.offsetTop-u.offsetTop,{height:l}=he(u);u.scrollTo({top:p-l/2,behavior:c})}}})}return Z("navigation.tracking")&&t.pipe(ee(i),J("offset"),Re(250),He(1),ee(n.pipe(He(1))),Tt({delay:250}),ue(o)).subscribe(([,{prev:a}])=>{let s=we(),c=a[a.length-1];if(c&&c.length){let[f]=c,{hash:u}=new URL(f.href);s.hash!==u&&(s.hash=u,history.replaceState({},"",`${s}`))}else s.hash="",history.replaceState({},"",`${s}`)}),Fs(e,{viewport$:t,header$:r}).pipe(E(a=>o.next(a)),C(()=>o.complete()),m(a=>k({ref:e},a)))})}function Us(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(m(({offset:{y:a}})=>a),Ce(2,1),m(([a,s])=>a>s&&s>0),B()),i=r.pipe(m(({active:a})=>a));return Y([i,o]).pipe(m(([a,s])=>!(a&&s)),B(),ee(n.pipe(He(1))),Fr(!0),Tt({delay:250}),m(a=>({hidden:a})))}function Wi(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new S,a=i.pipe(de(1));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(ee(a),J("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),Us(e,{viewport$:t,main$:n,target$:o}).pipe(E(s=>i.next(s)),C(()=>i.complete()),m(s=>k({ref:e},s)))}function Vi({document$:e,tablet$:t}){e.pipe(w(()=>Q(".md-toggle--indeterminate, [data-md-state=indeterminate]")),E(r=>{r.indeterminate=!0,r.checked=!1}),ae(r=>v(r,"change").pipe(Wr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ue(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Ds(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Ni({document$:e}){e.pipe(w(()=>Q("[data-md-scrollfix]")),E(t=>t.removeAttribute("data-md-scrollfix")),x(Ds),ae(t=>v(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function zi({viewport$:e,tablet$:t}){Y([dt("search"),t]).pipe(m(([r,n])=>r&&!n),w(r=>$(r).pipe(ke(r?400:100))),ue(e)).subscribe(([r,{offset:{y:n}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${n}px`;else{let o=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",o&&window.scrollTo(0,o)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var tt=go(),vr=ko(),gt=jo(),on=Ro(),_e=qo(),gr=Kr("(min-width: 960px)"),Ki=Kr("(min-width: 1220px)"),Qi=Fo(),Yi=le(),Bi=document.forms.namedItem("search")?(__search==null?void 0:__search.index)||je(new URL("search/search_index.json",Yi.base)):Se,an=new S;Ei({alert$:an});Z("navigation.instant")&&Si({document$:tt,location$:vr,viewport$:_e});var qi;((qi=Yi.version)==null?void 0:qi.provider)==="mike"&&Li({document$:tt});A(vr,gt).pipe(ke(125)).subscribe(()=>{Ke("drawer",!1),Ke("search",!1)});on.pipe(x(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=pe("[href][rel=prev]");typeof t!="undefined"&&t.click();break;case"n":case".":let r=pe("[href][rel=next]");typeof r!="undefined"&&r.click();break}});Vi({document$:tt,tablet$:gr});Ni({document$:tt});zi({viewport$:_e,tablet$:gr});var Qe=bi(Oe("header"),{viewport$:_e}),br=tt.pipe(m(()=>Oe("main")),w(e=>yi(e,{viewport$:_e,header$:Qe})),X(1)),Ws=A(...ne("consent").map(e=>Yo(e,{target$:gt})),...ne("dialog").map(e=>hi(e,{alert$:an})),...ne("header").map(e=>vi(e,{viewport$:_e,header$:Qe,main$:br})),...ne("palette").map(e=>xi(e)),...ne("search").map(e=>Hi(e,{index$:Bi,keyboard$:on})),...ne("source").map(e=>Fi(e))),Vs=P(()=>A(...ne("announce").map(e=>Qo(e)),...ne("content").map(e=>di(e,{target$:gt,print$:Qi})),...ne("content").map(e=>Z("search.highlight")?Pi(e,{index$:Bi,location$:vr}):H),...ne("header-title").map(e=>gi(e,{viewport$:_e,header$:Qe})),...ne("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Qr(Ki,()=>nn(e,{viewport$:_e,header$:Qe,main$:br})):Qr(gr,()=>nn(e,{viewport$:_e,header$:Qe,main$:br}))),...ne("tabs").map(e=>Ui(e,{viewport$:_e,header$:Qe})),...ne("toc").map(e=>Di(e,{viewport$:_e,header$:Qe,target$:gt})),...ne("top").map(e=>Wi(e,{viewport$:_e,header$:Qe,main$:br,target$:gt})))),Gi=tt.pipe(w(()=>Vs),et(Ws),X(1));Gi.subscribe();window.document$=tt;window.location$=vr;window.target$=gt;window.keyboard$=on;window.viewport$=_e;window.tablet$=gr;window.screen$=Ki;window.print$=Qi;window.alert$=an;window.component$=Gi;})(); +//# sourceMappingURL=bundle.48f2be22.min.js.map + diff --git a/2.6.0/assets/javascripts/bundle.48f2be22.min.js.map b/2.6.0/assets/javascripts/bundle.48f2be22.min.js.map new file mode 100644 index 00000000..2a1b6c5b --- /dev/null +++ b/2.6.0/assets/javascripts/bundle.48f2be22.min.js.map @@ -0,0 +1,8 @@ +{ + "version": 3, + "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/url-polyfill/url-polyfill.js", "node_modules/rxjs/node_modules/tslib/tslib.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "node_modules/array-flat-polyfill/index.mjs", "src/assets/javascripts/bundle.ts", "node_modules/unfetch/polyfill/index.js", "node_modules/rxjs/node_modules/tslib/modules/index.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/concatMap.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/sample.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/assets/javascripts/browser/document/index.ts", "src/assets/javascripts/browser/element/_/index.ts", "src/assets/javascripts/browser/element/focus/index.ts", "src/assets/javascripts/browser/element/offset/_/index.ts", "src/assets/javascripts/browser/element/offset/content/index.ts", "node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js", "src/assets/javascripts/browser/element/size/_/index.ts", "src/assets/javascripts/browser/element/size/content/index.ts", "src/assets/javascripts/browser/element/visibility/index.ts", "src/assets/javascripts/browser/toggle/index.ts", "src/assets/javascripts/browser/keyboard/index.ts", "src/assets/javascripts/browser/location/_/index.ts", "src/assets/javascripts/utilities/h/index.ts", "src/assets/javascripts/utilities/string/index.ts", "src/assets/javascripts/browser/location/hash/index.ts", "src/assets/javascripts/browser/media/index.ts", "src/assets/javascripts/browser/request/index.ts", "src/assets/javascripts/browser/script/index.ts", "src/assets/javascripts/browser/viewport/offset/index.ts", "src/assets/javascripts/browser/viewport/size/index.ts", "src/assets/javascripts/browser/viewport/_/index.ts", "src/assets/javascripts/browser/viewport/at/index.ts", "src/assets/javascripts/browser/worker/index.ts", "src/assets/javascripts/_/index.ts", "src/assets/javascripts/components/_/index.ts", "src/assets/javascripts/components/announce/index.ts", "src/assets/javascripts/components/consent/index.ts", "src/assets/javascripts/components/content/code/_/index.ts", "src/assets/javascripts/templates/tooltip/index.tsx", "src/assets/javascripts/templates/annotation/index.tsx", "src/assets/javascripts/templates/clipboard/index.tsx", "src/assets/javascripts/templates/search/index.tsx", "src/assets/javascripts/templates/source/index.tsx", "src/assets/javascripts/templates/tabbed/index.tsx", "src/assets/javascripts/templates/table/index.tsx", "src/assets/javascripts/templates/version/index.tsx", "src/assets/javascripts/components/content/annotation/_/index.ts", "src/assets/javascripts/components/content/annotation/list/index.ts", "src/assets/javascripts/components/content/code/mermaid/index.ts", "src/assets/javascripts/components/content/details/index.ts", "src/assets/javascripts/components/content/table/index.ts", "src/assets/javascripts/components/content/tabs/index.ts", "src/assets/javascripts/components/content/_/index.ts", "src/assets/javascripts/components/dialog/index.ts", "src/assets/javascripts/components/header/_/index.ts", "src/assets/javascripts/components/header/title/index.ts", "src/assets/javascripts/components/main/index.ts", "src/assets/javascripts/components/palette/index.ts", "src/assets/javascripts/integrations/clipboard/index.ts", "src/assets/javascripts/integrations/sitemap/index.ts", "src/assets/javascripts/integrations/instant/index.ts", "src/assets/javascripts/integrations/search/document/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/search/query/transform/index.ts", "src/assets/javascripts/integrations/search/worker/message/index.ts", "src/assets/javascripts/integrations/search/worker/_/index.ts", "src/assets/javascripts/integrations/version/index.ts", "src/assets/javascripts/components/search/query/index.ts", "src/assets/javascripts/components/search/result/index.ts", "src/assets/javascripts/components/search/share/index.ts", "src/assets/javascripts/components/search/suggest/index.ts", "src/assets/javascripts/components/search/_/index.ts", "src/assets/javascripts/components/search/highlight/index.ts", "src/assets/javascripts/components/sidebar/index.ts", "src/assets/javascripts/components/source/facts/github/index.ts", "src/assets/javascripts/components/source/facts/gitlab/index.ts", "src/assets/javascripts/components/source/facts/_/index.ts", "src/assets/javascripts/components/source/_/index.ts", "src/assets/javascripts/components/tabs/index.ts", "src/assets/javascripts/components/toc/index.ts", "src/assets/javascripts/components/top/index.ts", "src/assets/javascripts/patches/indeterminate/index.ts", "src/assets/javascripts/patches/scrollfix/index.ts", "src/assets/javascripts/patches/scrolllock/index.ts", "src/assets/javascripts/polyfills/index.ts"], + "sourceRoot": "../../../..", + "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(String(value).replace(/\\+/g, ' '));\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n var typeofSearchString = typeof searchString;\r\n\r\n if (typeofSearchString === 'undefined') {\r\n // do nothing\r\n } else if (typeofSearchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n } else if ((searchString !== null) && (typeofSearchString === 'object')) {\r\n if (Object.prototype.toString.call(searchString) === '[object Array]') {\r\n for (var i = 0; i < searchString.length; i++) {\r\n var entry = searchString[i];\r\n if ((Object.prototype.toString.call(entry) === '[object Array]') || (entry.length !== 2)) {\r\n this.append(entry[0], entry[1]);\r\n } else {\r\n throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\\'s input');\r\n }\r\n }\r\n } else {\r\n for (var key in searchString) {\r\n if (searchString.hasOwnProperty(key)) {\r\n this.append(key, searchString[key]);\r\n }\r\n }\r\n }\r\n } else {\r\n throw new TypeError('Unsupported input\\'s type for URLSearchParams');\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(String(value));\r\n } else {\r\n this._entries[name] = [String(value)];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [String(value)];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n var checkIfURLSearchParamsSupported = function() {\r\n try {\r\n var URLSearchParams = global.URLSearchParams;\r\n\r\n return (\r\n (new URLSearchParams('?a=1').toString() === 'a=1') &&\r\n (typeof URLSearchParams.prototype.set === 'function') &&\r\n (typeof URLSearchParams.prototype.entries === 'function')\r\n );\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n if (!checkIfURLSearchParamsSupported()) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n var proto = global.URLSearchParams.prototype;\r\n\r\n if (typeof proto.sort !== 'function') {\r\n proto.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n if (typeof proto._fromString !== 'function') {\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n if (this._entries) {\r\n this._entries = {};\r\n } else {\r\n var keys = [];\r\n this.forEach(function(value, name) {\r\n keys.push(name);\r\n });\r\n for (var i = 0; i < keys.length; i++) {\r\n this.delete(keys[i]);\r\n }\r\n }\r\n\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new global.URL('b', 'http://a');\r\n u.pathname = 'c d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n if (base && typeof base !== 'string') base = String(base);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n base = base.toLowerCase();\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n var inputElement = doc.createElement('input');\r\n inputElement.type = 'url';\r\n inputElement.value = url;\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href) || (!inputElement.checkValidity() && !base)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new global.URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"array-flat-polyfill\"\nimport \"focus-visible\"\nimport \"unfetch/polyfill\"\nimport \"url-polyfill\"\n\nimport {\n EMPTY,\n NEVER,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getOptionalElement,\n requestJSON,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantLoading,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget()\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? __search?.index || requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up instant loading, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantLoading({ document$, location$, viewport$ })\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n/* Set up patches */\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, { viewport$, header$, target$ })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.component$ = component$ /* Component observable */\n", "self.fetch||(self.fetch=function(e,n){return n=n||{},new Promise(function(t,s){var r=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var c in r.open(n.method||\"get\",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},r.onerror=s,r.withCredentials=\"include\"==n.credentials,n.headers)r.setRequestHeader(c,n.headers[c]);r.send(n.body||null)})});\n", "import tslib from '../tslib.js';\r\nconst {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n} = tslib;\r\nexport {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n};\r\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ReplaySubject,\n Subject,\n fromEvent\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * Documents are implemented as subjects, so all downstream observables are\n * automatically updated when a new document is emitted.\n *\n * @returns Document subject\n */\nexport function watchDocument(): Subject {\n const document$ = new ReplaySubject(1)\n fromEvent(document, \"DOMContentLoaded\", { once: true })\n .subscribe(() => document$.next(document))\n\n /* Return document */\n return document$\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getElements(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T][]\n\nexport function getElements(\n selector: string, node?: ParentNode\n): T[]\n\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * Note that this function assumes that the element is present. If unsure if an\n * element is existent, use the `getOptionalElement` function instead.\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T]\n\nexport function getElement(\n selector: string, node?: ParentNode\n): T\n\nexport function getElement(\n selector: string, node: ParentNode = document\n): T {\n const el = getOptionalElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n\n /* Return element */\n return el\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an optional element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element or nothing\n */\nexport function getOptionalElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T] | undefined\n\nexport function getOptionalElement(\n selector: string, node?: ParentNode\n): T | undefined\n\nexport function getOptionalElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve the currently active element\n *\n * @returns Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement || undefined\n : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n debounceTime,\n distinctUntilChanged,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * Previously, this function used `focus` and `blur` events to determine whether\n * an element is focused, but this doesn't work if there are focusable elements\n * within the elements itself. A better solutions are `focusin` and `focusout`\n * events, which bubble up the tree and allow for more fine-grained control.\n *\n * `debounceTime` is necessary, because when a focus change happens inside an\n * element, the observable would first emit `false` and then `true` again.\n *\n * @param el - Element\n *\n * @returns Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(document.body, \"focusin\"),\n fromEvent(document.body, \"focusout\")\n )\n .pipe(\n debounceTime(1),\n map(() => {\n const active = getActiveElement()\n return typeof active !== \"undefined\"\n ? el.contains(active)\n : false\n }),\n startWith(el === getActiveElement()),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @returns Element offset\n */\nexport function getElementOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.offsetLeft,\n y: el.offsetTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @returns Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(window, \"load\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { ElementOffset } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content offset (= scroll offset)\n *\n * @param el - Element\n *\n * @returns Element content offset\n */\nexport function getElementContentOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element content offset\n *\n * @param el - Element\n *\n * @returns Element content offset observable\n */\nexport function watchElementContentOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementContentOffset(el)),\n startWith(getElementContentOffset(el))\n )\n}\n", "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n startWith,\n switchMap,\n tap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementSize {\n width: number /* Element width */\n height: number /* Element height */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Resize observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Resize observer observable\n *\n * This observable will create a `ResizeObserver` on the first subscription\n * and will automatically terminate it when there are no more subscribers.\n * It's quite important to centralize observation in a single `ResizeObserver`,\n * as the performance difference can be quite dramatic, as the link shows.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new ResizeObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element size\n *\n * @param el - Element\n *\n * @returns Element size\n */\nexport function getElementSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.offsetWidth,\n height: el.offsetHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element size\n *\n * This function returns an observable that subscribes to a single internal\n * instance of `ResizeObserver` upon subscription, and emit resize events until\n * termination. Note that this function should not be called with the same\n * element twice, as the first unsubscription will terminate observation.\n *\n * Sadly, we can't use the `DOMRect` objects returned by the observer, because\n * we need the emitted values to be consistent with `getElementSize`, which will\n * return the used values (rounded) and not actual values (unrounded). Thus, we\n * use the `offset*` properties. See the linked GitHub issue.\n *\n * @see https://bit.ly/3m0k3he - GitHub issue\n *\n * @param el - Element\n *\n * @returns Element size observable\n */\nexport function watchElementSize(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(() => getElementSize(el))\n )\n ),\n startWith(getElementSize(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ElementSize } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content size (= scroll width and height)\n *\n * @param el - Element\n *\n * @returns Element content size\n */\nexport function getElementContentSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.scrollWidth,\n height: el.scrollHeight\n }\n}\n\n/**\n * Retrieve the overflowing container of an element, if any\n *\n * @param el - Element\n *\n * @returns Overflowing container or nothing\n */\nexport function getElementContainer(\n el: HTMLElement\n): HTMLElement | undefined {\n let parent = el.parentElement\n while (parent)\n if (\n el.scrollWidth <= parent.scrollWidth &&\n el.scrollHeight <= parent.scrollHeight\n )\n parent = (el = parent).parentElement\n else\n break\n\n /* Return overflowing container */\n return parent ? el : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport {\n getElementContentSize,\n getElementSize,\n watchElementContentOffset\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Intersection observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Intersection observer observable\n *\n * This observable will create an `IntersectionObserver` on first subscription\n * and will automatically terminate it when there are no more subscribers.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new IntersectionObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n }, {\n threshold: 0\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element visibility\n *\n * @param el - Element\n *\n * @returns Element visibility observable\n */\nexport function watchElementVisibility(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(({ isIntersecting }) => isIntersecting)\n )\n )\n )\n}\n\n/**\n * Watch element boundary\n *\n * This function returns an observable which emits whether the bottom content\n * boundary (= scroll offset) of an element is within a certain threshold.\n *\n * @param el - Element\n * @param threshold - Threshold\n *\n * @returns Element boundary observable\n */\nexport function watchElementBoundary(\n el: HTMLElement, threshold = 16\n): Observable {\n return watchElementContentOffset(el)\n .pipe(\n map(({ y }) => {\n const visible = getElementSize(el)\n const content = getElementContentSize(el)\n return y >= (\n content.height - visible.height - threshold\n )\n }),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getElement } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElement(\"[data-md-toggle=drawer]\"),\n search: getElement(\"[data-md-toggle=search]\")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n share\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../element\"\nimport { getToggle } from \"../toggle\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard {\n mode: KeyboardMode /* Keyboard mode */\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n * @param type - Key type\n *\n * @returns Test result\n */\nfunction isSusceptibleToKeyboard(\n el: HTMLElement, type: string\n): boolean {\n switch (el.constructor) {\n\n /* Input elements */\n case HTMLInputElement:\n /* @ts-expect-error - omit unnecessary type cast */\n if (el.type === \"radio\")\n return /^Arrow/.test(type)\n else\n return true\n\n /* Select element and textarea */\n case HTMLSelectElement:\n case HTMLTextAreaElement:\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @returns Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n } as Keyboard)),\n filter(({ mode, type }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active, type)\n }\n return true\n }),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function returns a `URL` object (and not `Location`) to normalize the\n * typings across the application. Furthermore, locations need to be tracked\n * without setting them and `Location` is a singleton which represents the\n * current location.\n *\n * @returns URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @returns Location subject\n */\nexport function watchLocation(): Subject {\n return new Subject()\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { JSX as JSXInternal } from \"preact\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(el: HTMLElement, child: Child | Child[]): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @template T - Element type\n *\n * @param tag - HTML tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @returns Element\n */\nexport function h(\n tag: T, attributes?: Attributes | null, ...children: Child[]\n): HTMLElementTagNameMap[T]\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T {\n const el = document.createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of Object.keys(attributes)) {\n if (typeof attributes[attr] === \"undefined\")\n continue\n\n /* Set default attribute or boolean */\n if (typeof attributes[attr] !== \"boolean\")\n el.setAttribute(attr, attributes[attr])\n else\n el.setAttribute(attr, \"\")\n }\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el as T\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @returns Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0) { /* keep eating */ }\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with repository facts\n *\n * This is a reverse-engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @returns Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 0.000001) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n shareReplay,\n startWith\n} from \"rxjs\"\n\nimport { getOptionalElement } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @returns Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. When a new fragment identifier is set, we want\n * the browser to target the respective element at all times, which is why we\n * use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = h(\"a\", { href: hash })\n el.addEventListener(\"click\", ev => ev.stopPropagation())\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @returns Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n shareReplay(1)\n )\n}\n\n/**\n * Watch location target\n *\n * @returns Location target observable\n */\nexport function watchLocationTarget(): Observable {\n return watchLocationHash()\n .pipe(\n map(id => getOptionalElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\")\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n fromEvent,\n fromEventPattern,\n map,\n merge,\n startWith,\n switchMap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * Note that although `MediaQueryList.addListener` is deprecated we have to\n * use it, because it's the only way to ensure proper downward compatibility.\n *\n * @see https://bit.ly/3dUBH2m - GitHub issue\n *\n * @param query - Media query\n *\n * @returns Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next => (\n media.addListener(() => next(media.matches))\n ))\n .pipe(\n startWith(media.matches)\n )\n}\n\n/**\n * Watch print mode\n *\n * @returns Print observable\n */\nexport function watchPrint(): Observable {\n const media = matchMedia(\"print\")\n return merge(\n fromEvent(window, \"beforeprint\").pipe(map(() => true)),\n fromEvent(window, \"afterprint\").pipe(map(() => false))\n )\n .pipe(\n startWith(media.matches)\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Toggle an observable with a media observable\n *\n * @template T - Data type\n *\n * @param query$ - Media observable\n * @param factory - Observable factory\n *\n * @returns Toggled observable\n */\nexport function at(\n query$: Observable, factory: () => Observable\n): Observable {\n return query$\n .pipe(\n switchMap(active => active ? factory() : EMPTY)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n from,\n map,\n of,\n shareReplay,\n switchMap,\n throwError\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the given URL\n *\n * If the request fails (e.g. when dispatched from `file://` locations), the\n * observable will complete without emitting a value.\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Response observable\n */\nexport function request(\n url: URL | string, options: RequestInit = { credentials: \"same-origin\" }\n): Observable {\n return from(fetch(`${url}`, options))\n .pipe(\n catchError(() => EMPTY),\n switchMap(res => res.status !== 200\n ? throwError(() => new Error(res.statusText))\n : of(res)\n )\n )\n}\n\n/**\n * Fetch JSON from the given URL\n *\n * @template T - Data type\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestJSON(\n url: URL | string, options?: RequestInit\n): Observable {\n return request(url, options)\n .pipe(\n switchMap(res => res.json()),\n shareReplay(1)\n )\n}\n\n/**\n * Fetch XML from the given URL\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestXML(\n url: URL | string, options?: RequestInit\n): Observable {\n const dom = new DOMParser()\n return request(url, options)\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/xml\")),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n throwError\n} from \"rxjs\"\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create and load a `script` element\n *\n * This function returns an observable that will emit when the script was\n * successfully loaded, or throw an error if it didn't.\n *\n * @param src - Script URL\n *\n * @returns Script observable\n */\nexport function watchScript(src: string): Observable {\n const script = h(\"script\", { src })\n return defer(() => {\n document.head.appendChild(script)\n return merge(\n fromEvent(script, \"load\"),\n fromEvent(script, \"error\")\n .pipe(\n switchMap(() => (\n throwError(() => new ReferenceError(`Invalid script: ${src}`))\n ))\n )\n )\n .pipe(\n map(() => undefined),\n finalize(() => document.head.removeChild(script)),\n take(1)\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @returns Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, scrollX),\n y: Math.max(0, scrollY)\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @returns Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\", { passive: true }),\n fromEvent(window, \"resize\", { passive: true })\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @returns Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @returns Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\", { passive: true })\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n map,\n shareReplay\n} from \"rxjs\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @returns Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilKeyChanged,\n map\n} from \"rxjs\"\n\nimport { Header } from \"~/components\"\n\nimport { getElementOffset } from \"../../element\"\nimport { Viewport } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
/* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @returns Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const size$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\")\n )\n\n /* Compute element offset */\n const offset$ = combineLatest([size$, header$])\n .pipe(\n map(() => getElementOffset(el))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n fromEvent,\n map,\n share,\n switchMap,\n tap,\n throttle\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data?: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that sends all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @returns Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEvent(worker, \"message\")\n .pipe(\n map(({ data }) => data as T)\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMap(() => rx$),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getLocation } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flag\n */\nexport type Flag =\n | \"announce.dismiss\" /* Dismissable announcement bar */\n | \"content.code.annotate\" /* Code annotations */\n | \"content.lazy\" /* Lazy content elements */\n | \"content.tabs.link\" /* Link content tabs */\n | \"header.autohide\" /* Hide header */\n | \"navigation.expand\" /* Automatic expansion */\n | \"navigation.indexes\" /* Section pages */\n | \"navigation.instant\" /* Instant loading */\n | \"navigation.sections\" /* Section navigation */\n | \"navigation.tabs\" /* Tabs navigation */\n | \"navigation.tabs.sticky\" /* Tabs navigation (sticky) */\n | \"navigation.top\" /* Back-to-top button */\n | \"navigation.tracking\" /* Anchor tracking */\n | \"search.highlight\" /* Search highlighting */\n | \"search.share\" /* Search sharing */\n | \"search.suggest\" /* Search suggestions */\n | \"toc.follow\" /* Following table of contents */\n | \"toc.integrate\" /* Integrated table of contents */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Translation\n */\nexport type Translation =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.placeholder\" /* Search */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n | \"search.result.more.one\" /* 1 more on this page */\n | \"search.result.more.other\" /* # more on this page */\n | \"search.result.term.missing\" /* Missing */\n | \"select.version.title\" /* Version selector */\n\n/**\n * Translations\n */\nexport type Translations = Record\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Versioning\n */\nexport interface Versioning {\n provider: \"mike\" /* Version provider */\n default?: string /* Default version */\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n features: Flag[] /* Feature flags */\n translations: Translations /* Translations */\n search: string /* Search worker URL */\n tags?: Record /* Tags mapping */\n version?: Versioning /* Versioning */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration and make base URL absolute\n */\nconst script = getElement(\"#__config\")\nconst config: Config = JSON.parse(script.textContent!)\nconfig.base = `${new URL(config.base, getLocation())}`\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration\n *\n * @returns Global configuration\n */\nexport function configuration(): Config {\n return config\n}\n\n/**\n * Check whether a feature flag is enabled\n *\n * @param flag - Feature flag\n *\n * @returns Test result\n */\nexport function feature(flag: Flag): boolean {\n return config.features.includes(flag)\n}\n\n/**\n * Retrieve the translation for the given key\n *\n * @param key - Key to be translated\n * @param value - Positional value, if any\n *\n * @returns Translation\n */\nexport function translation(\n key: Translation, value?: string | number\n): string {\n return typeof value !== \"undefined\"\n ? config.translations[key].replace(\"#\", value.toString())\n : config.translations[key]\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type\n */\nexport type ComponentType =\n | \"announce\" /* Announcement bar */\n | \"container\" /* Container */\n | \"consent\" /* Consent */\n | \"content\" /* Content */\n | \"dialog\" /* Dialog */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"header-topic\" /* Header topic */\n | \"main\" /* Main area */\n | \"outdated\" /* Version warning */\n | \"palette\" /* Color palette */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-result\" /* Search results */\n | \"search-share\" /* Search sharing */\n | \"search-suggest\" /* Search suggestions */\n | \"sidebar\" /* Sidebar */\n | \"skip\" /* Skip link */\n | \"source\" /* Repository information */\n | \"tabs\" /* Navigation tabs */\n | \"toc\" /* Table of contents */\n | \"top\" /* Back-to-top button */\n\n/**\n * Component\n *\n * @template T - Component type\n * @template U - Reference type\n */\nexport type Component<\n T extends {} = {},\n U extends HTMLElement = HTMLElement\n> =\n T & {\n ref: U /* Component reference */\n }\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type map\n */\ninterface ComponentTypeMap {\n \"announce\": HTMLElement /* Announcement bar */\n \"container\": HTMLElement /* Container */\n \"consent\": HTMLElement /* Consent */\n \"content\": HTMLElement /* Content */\n \"dialog\": HTMLElement /* Dialog */\n \"header\": HTMLElement /* Header */\n \"header-title\": HTMLElement /* Header title */\n \"header-topic\": HTMLElement /* Header topic */\n \"main\": HTMLElement /* Main area */\n \"outdated\": HTMLElement /* Version warning */\n \"palette\": HTMLElement /* Color palette */\n \"search\": HTMLElement /* Search */\n \"search-query\": HTMLInputElement /* Search input */\n \"search-result\": HTMLElement /* Search results */\n \"search-share\": HTMLAnchorElement /* Search sharing */\n \"search-suggest\": HTMLElement /* Search suggestions */\n \"sidebar\": HTMLElement /* Sidebar */\n \"skip\": HTMLAnchorElement /* Skip link */\n \"source\": HTMLAnchorElement /* Repository information */\n \"tabs\": HTMLElement /* Navigation tabs */\n \"toc\": HTMLElement /* Table of contents */\n \"top\": HTMLAnchorElement /* Back-to-top button */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the element for a given component or throw a reference error\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getComponentElement(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T] {\n return getElement(`[data-md-component=${type}]`, node)\n}\n\n/**\n * Retrieve all elements for a given component\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getComponentElements(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T][] {\n return getElements(`[data-md-component=${type}]`, node)\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n fromEvent,\n map,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Announcement bar\n */\nexport interface Announce {\n hash: number /* Content hash */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar observable\n */\nexport function watchAnnounce(\n el: HTMLElement\n): Observable {\n const button = getElement(\".md-typeset > :first-child\", el)\n return fromEvent(button, \"click\", { once: true })\n .pipe(\n map(() => getElement(\".md-typeset\", el)),\n map(content => ({ hash: __md_hash(content.innerHTML) }))\n )\n}\n\n/**\n * Mount announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar component observable\n */\nexport function mountAnnounce(\n el: HTMLElement\n): Observable> {\n if (!feature(\"announce.dismiss\") || !el.childElementCount)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n startWith({ hash: __md_get(\"__announce\") })\n )\n .subscribe(({ hash }) => {\n if (hash && hash === (__md_get(\"__announce\") ?? hash)) {\n el.hidden = true\n\n /* Persist preference in local storage */\n __md_set(\"__announce\", hash)\n }\n })\n\n /* Create and return component */\n return watchAnnounce(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Consent\n */\nexport interface Consent {\n hidden: boolean /* Consent is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent observable\n */\nexport function watchConsent(\n el: HTMLElement, { target$ }: WatchOptions\n): Observable {\n return target$\n .pipe(\n map(target => ({ hidden: target !== el }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent component observable\n */\nexport function mountConsent(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const internal$ = new Subject()\n internal$.subscribe(({ hidden }) => {\n el.hidden = hidden\n })\n\n /* Create and return component */\n return watchConsent(el, options)\n .pipe(\n tap(state => internal$.next(state)),\n finalize(() => internal$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n mergeWith,\n switchMap,\n take,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElementContentSize,\n watchElementSize,\n watchElementVisibility\n} from \"~/browser\"\nimport { renderClipboardButton } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotationList\n} from \"../../annotation\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Code block\n */\nexport interface CodeBlock {\n scrollable: boolean /* Code block overflows */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Global sequence number for code blocks\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find candidate list element directly following a code block\n *\n * @param el - Code block element\n *\n * @returns List element or nothing\n */\nfunction findCandidateList(el: HTMLElement): HTMLElement | undefined {\n if (el.nextElementSibling) {\n const sibling = el.nextElementSibling as HTMLElement\n if (sibling.tagName === \"OL\")\n return sibling\n\n /* Skip empty paragraphs - see https://bit.ly/3r4ZJ2O */\n else if (sibling.tagName === \"P\" && !sibling.children.length)\n return findCandidateList(sibling)\n }\n\n /* Everything else */\n return undefined\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch code block\n *\n * This function monitors size changes of the viewport, as well as switches of\n * content tabs with embedded code blocks, as both may trigger overflow.\n *\n * @param el - Code block element\n *\n * @returns Code block observable\n */\nexport function watchCodeBlock(\n el: HTMLElement\n): Observable {\n return watchElementSize(el)\n .pipe(\n map(({ width }) => {\n const content = getElementContentSize(el)\n return {\n scrollable: content.width > width\n }\n }),\n distinctUntilKeyChanged(\"scrollable\")\n )\n}\n\n/**\n * Mount code block\n *\n * This function ensures that an overflowing code block is focusable through\n * keyboard, so it can be scrolled without a mouse to improve on accessibility.\n * Furthermore, if code annotations are enabled, they are mounted if and only\n * if the code block is currently visible, e.g., not in a hidden content tab.\n *\n * Note that code blocks may be mounted eagerly or lazily. If they're mounted\n * lazily (on first visibility), code annotation anchor links will not work,\n * as they are evaluated on initial page load, and code annotations in general\n * might feel a little bumpier.\n *\n * @param el - Code block element\n * @param options - Options\n *\n * @returns Code block and annotation component observable\n */\nexport function mountCodeBlock(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const { matches: hover } = matchMedia(\"(hover)\")\n\n /* Defer mounting of code block - see https://bit.ly/3vHVoVD */\n const factory$ = defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ scrollable }) => {\n if (scrollable && hover)\n el.setAttribute(\"tabindex\", \"0\")\n else\n el.removeAttribute(\"tabindex\")\n })\n\n /* Render button for Clipboard.js integration */\n if (ClipboardJS.isSupported()) {\n const parent = el.closest(\"pre\")!\n parent.id = `__code_${++sequence}`\n parent.insertBefore(\n renderClipboardButton(parent.id),\n el\n )\n }\n\n /* Handle code annotations */\n const container = el.closest(\".highlight\")\n if (container instanceof HTMLElement) {\n const list = findCandidateList(container)\n\n /* Mount code annotations, if enabled */\n if (typeof list !== \"undefined\" && (\n container.classList.contains(\"annotate\") ||\n feature(\"content.code.annotate\")\n )) {\n const annotations$ = mountAnnotationList(list, el, options)\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n mergeWith(\n watchElementSize(container)\n .pipe(\n map(({ width, height }) => width && height),\n distinctUntilChanged(),\n switchMap(active => active ? annotations$ : EMPTY)\n )\n )\n )\n }\n }\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n\n /* Mount code block lazily */\n if (feature(\"content.lazy\"))\n return watchElementVisibility(el)\n .pipe(\n filter(visible => visible),\n take(1),\n switchMap(() => factory$)\n )\n\n /* Mount code block */\n return factory$\n}\n", "/*\n * Copyright (c) 2016-2021 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a tooltip\n *\n * @param id - Tooltip identifier\n *\n * @returns Element\n */\nexport function renderTooltip(id?: string): HTMLElement {\n return (\n
\n
\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\nimport { renderTooltip } from \"../tooltip\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render an annotation\n *\n * @param id - Annotation identifier\n * @param prefix - Tooltip identifier prefix\n *\n * @returns Element\n */\nexport function renderAnnotation(\n id: string | number, prefix?: string\n): HTMLElement {\n prefix = prefix ? `${prefix}_annotation_${id}` : undefined\n\n /* Render tooltip with anchor, if given */\n if (prefix) {\n const anchor = prefix ? `#${prefix}` : undefined\n return (\n \n )\n } else {\n return (\n \n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @returns Element\n */\nexport function renderClipboardButton(id: string): HTMLElement {\n return (\n code`}\n >\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ComponentChild } from \"preact\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport {\n SearchDocument,\n SearchMetadata,\n SearchResultItem\n} from \"~/integrations/search\"\nimport { h, truncate } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Render flag\n */\nconst enum Flag {\n TEASER = 1, /* Render teaser */\n PARENT = 2 /* Render as parent */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper function\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search document\n *\n * @param document - Search document\n * @param flag - Render flags\n *\n * @returns Element\n */\nfunction renderSearchDocument(\n document: SearchDocument & SearchMetadata, flag: Flag\n): HTMLElement {\n const parent = flag & Flag.PARENT\n const teaser = flag & Flag.TEASER\n\n /* Render missing query terms */\n const missing = Object.keys(document.terms)\n .filter(key => !document.terms[key])\n .reduce((list, key) => [\n ...list, {key}, \" \"\n ], [])\n .slice(0, -1)\n\n /* Assemble query string for highlighting */\n const url = new URL(document.location)\n if (feature(\"search.highlight\"))\n url.searchParams.set(\"h\", Object.entries(document.terms)\n .filter(([, match]) => match)\n .reduce((highlight, [value]) => `${highlight} ${value}`.trim(), \"\")\n )\n\n /* Render article or section, depending on flags */\n const { tags } = configuration()\n return (\n \n \n {parent > 0 &&
}\n

{document.title}

\n {teaser > 0 && document.text.length > 0 &&\n

\n {truncate(document.text, 320)}\n

\n }\n {document.tags && document.tags.map(tag => {\n const id = tag.replace(/<[^>]+>/g, \"\")\n const type = tags\n ? id in tags\n ? `md-tag-icon md-tag-icon--${tags[id]}`\n : \"md-tag-icon\"\n : \"\"\n return (\n {tag}\n )\n })}\n {teaser > 0 && missing.length > 0 &&\n

\n {translation(\"search.result.term.missing\")}: {...missing}\n

\n }\n \n
\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @returns Element\n */\nexport function renderSearchResultItem(\n result: SearchResultItem\n): HTMLElement {\n const threshold = result[0].score\n const docs = [...result]\n\n /* Find and extract parent article */\n const parent = docs.findIndex(doc => !doc.location.includes(\"#\"))\n const [article] = docs.splice(parent, 1)\n\n /* Determine last index above threshold */\n let index = docs.findIndex(doc => doc.score < threshold)\n if (index === -1)\n index = docs.length\n\n /* Partition sections */\n const best = docs.slice(0, index)\n const more = docs.slice(index)\n\n /* Render children */\n const children = [\n renderSearchDocument(article, Flag.PARENT | +(!parent && index === 0)),\n ...best.map(section => renderSearchDocument(section, Flag.TEASER)),\n ...more.length ? [\n
\n \n {more.length > 0 && more.length === 1\n ? translation(\"search.result.more.one\")\n : translation(\"search.result.more.other\", more.length)\n }\n \n {...more.map(section => renderSearchDocument(section, Flag.TEASER))}\n
\n ] : []\n ]\n\n /* Render search result */\n return (\n
  • \n {children}\n
  • \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"~/components\"\nimport { h, round } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render repository facts\n *\n * @param facts - Repository facts\n *\n * @returns Element\n */\nexport function renderSourceFacts(facts: SourceFacts): HTMLElement {\n return (\n
      \n {Object.entries(facts).map(([key, value]) => (\n
    • \n {typeof value === \"number\" ? round(value) : value}\n
    • \n ))}\n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabbed control type\n */\ntype TabbedControlType =\n | \"prev\"\n | \"next\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render control for content tabs\n *\n * @param type - Control type\n *\n * @returns Element\n */\nexport function renderTabbedControl(\n type: TabbedControlType\n): HTMLElement {\n const classes = `tabbed-control tabbed-control--${type}`\n return (\n \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @returns Element\n */\nexport function renderTable(table: HTMLElement): HTMLElement {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { configuration, translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Version\n */\nexport interface Version {\n version: string /* Version identifier */\n title: string /* Version title */\n aliases: string[] /* Version aliases */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version\n *\n * @param version - Version\n *\n * @returns Element\n */\nfunction renderVersion(version: Version): HTMLElement {\n const config = configuration()\n\n /* Ensure trailing slash - see https://bit.ly/3rL5u3f */\n const url = new URL(`../${version.version}/`, config.base)\n return (\n
  • \n \n {version.title}\n \n
  • \n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version selector\n *\n * @param versions - Versions\n * @param active - Active version\n *\n * @returns Element\n */\nexport function renderVersionSelector(\n versions: Version[], active: Version\n): HTMLElement {\n return (\n
    \n \n {active.title}\n \n
      \n {versions.map(renderVersion)}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n debounceTime,\n defer,\n delay,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n takeLast,\n takeUntil,\n tap,\n throttleTime,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n ElementOffset,\n getActiveElement,\n getElementSize,\n watchElementContentOffset,\n watchElementFocus,\n watchElementOffset,\n watchElementVisibility\n} from \"~/browser\"\n\nimport { Component } from \"../../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Annotation\n */\nexport interface Annotation {\n active: boolean /* Annotation is active */\n offset: ElementOffset /* Annotation offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation observable\n */\nexport function watchAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable {\n const offset$ = defer(() => combineLatest([\n watchElementOffset(el),\n watchElementContentOffset(container)\n ]))\n .pipe(\n map(([{ x, y }, scroll]): ElementOffset => {\n const { width, height } = getElementSize(el)\n return ({\n x: x - scroll.x + width / 2,\n y: y - scroll.y + height / 2\n })\n })\n )\n\n /* Actively watch annotation on focus */\n return watchElementFocus(el)\n .pipe(\n switchMap(active => offset$\n .pipe(\n map(offset => ({ active, offset })),\n take(+!active || Infinity)\n )\n )\n )\n}\n\n/**\n * Mount annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotation(\n el: HTMLElement, container: HTMLElement, { target$ }: MountOptions\n): Observable> {\n const [tooltip, index] = Array.from(el.children)\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ offset }) {\n el.style.setProperty(\"--md-tooltip-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-tooltip-y\", `${offset.y}px`)\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-x\")\n el.style.removeProperty(\"--md-tooltip-y\")\n }\n })\n\n /* Start animation only when annotation is visible */\n watchElementVisibility(el)\n .pipe(\n takeUntil(done$)\n )\n .subscribe(visible => {\n el.toggleAttribute(\"data-md-visible\", visible)\n })\n\n /* Toggle tooltip presence to mitigate empty lines when copying */\n merge(\n push$.pipe(filter(({ active }) => active)),\n push$.pipe(debounceTime(250), filter(({ active }) => !active))\n )\n .subscribe({\n\n /* Handle emission */\n next({ active }) {\n if (active)\n el.prepend(tooltip)\n else\n tooltip.remove()\n },\n\n /* Handle complete */\n complete() {\n el.prepend(tooltip)\n }\n })\n\n /* Toggle tooltip visibility */\n push$\n .pipe(\n auditTime(16, animationFrameScheduler)\n )\n .subscribe(({ active }) => {\n tooltip.classList.toggle(\"md-tooltip--active\", active)\n })\n\n /* Track relative origin of tooltip */\n push$\n .pipe(\n throttleTime(125, animationFrameScheduler),\n filter(() => !!el.offsetParent),\n map(() => el.offsetParent!.getBoundingClientRect()),\n map(({ x }) => x)\n )\n .subscribe({\n\n /* Handle emission */\n next(origin) {\n if (origin)\n el.style.setProperty(\"--md-tooltip-0\", `${-origin}px`)\n else\n el.style.removeProperty(\"--md-tooltip-0\")\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-0\")\n }\n })\n\n /* Allow to copy link without scrolling to anchor */\n fromEvent(index, \"click\")\n .pipe(\n takeUntil(done$),\n filter(ev => !(ev.metaKey || ev.ctrlKey))\n )\n .subscribe(ev => ev.preventDefault())\n\n /* Allow to open link in new tab or blur on close */\n fromEvent(index, \"mousedown\")\n .pipe(\n takeUntil(done$),\n withLatestFrom(push$)\n )\n .subscribe(([ev, { active }]) => {\n\n /* Open in new tab */\n if (ev.button !== 0 || ev.metaKey || ev.ctrlKey) {\n ev.preventDefault()\n\n /* Close annotation */\n } else if (active) {\n ev.preventDefault()\n\n /* Focus parent annotation, if any */\n const parent = el.parentElement!.closest(\".md-annotation\")\n if (parent instanceof HTMLElement)\n parent.focus()\n else\n getActiveElement()?.blur()\n }\n })\n\n /* Open and focus annotation on location target */\n target$\n .pipe(\n takeUntil(done$),\n filter(target => target === tooltip),\n delay(125)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchAnnotation(el, container)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n merge,\n share,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport {\n getElement,\n getElements,\n getOptionalElement\n} from \"~/browser\"\nimport { renderAnnotation } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotation\n} from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find all annotation markers in the given code block\n *\n * @param container - Containing element\n *\n * @returns Annotation markers\n */\nfunction findAnnotationMarkers(container: HTMLElement): Text[] {\n const markers: Text[] = []\n for (const el of getElements(\".c, .c1, .cm\", container)) {\n const nodes: Text[] = []\n\n /* Find all text nodes in current element */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode())\n nodes.push(node as Text)\n\n /* Find all markers in each text node */\n for (let text of nodes) {\n let match: RegExpExecArray | null\n\n /* Split text at marker and add to list */\n while ((match = /(\\(\\d+\\))(!)?/.exec(text.textContent!))) {\n const [, id, force] = match\n if (typeof force === \"undefined\") {\n const marker = text.splitText(match.index)\n text = marker.splitText(id.length)\n markers.push(marker)\n\n /* Replace entire text with marker */\n } else {\n text.textContent = id\n markers.push(text)\n break\n }\n }\n }\n }\n return markers\n}\n\n/**\n * Swap the child nodes of two elements\n *\n * @param source - Source element\n * @param target - Target element\n */\nfunction swap(source: HTMLElement, target: HTMLElement): void {\n target.append(...Array.from(source.childNodes))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount annotation list\n *\n * This function analyzes the containing code block and checks for markers\n * referring to elements in the given annotation list. If no markers are found,\n * the list is left untouched. Otherwise, list elements are rendered as\n * annotations inside the code block.\n *\n * @param el - Annotation list element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotationList(\n el: HTMLElement, container: HTMLElement, { target$, print$ }: MountOptions\n): Observable> {\n\n /* Compute prefix for tooltip anchors */\n const parent = container.closest(\"[id]\")\n const prefix = parent?.id\n\n /* Find and replace all markers with empty annotations */\n const annotations = new Map()\n for (const marker of findAnnotationMarkers(container)) {\n const [, id] = marker.textContent!.match(/\\((\\d+)\\)/)!\n if (getOptionalElement(`li:nth-child(${id})`, el)) {\n annotations.set(id, renderAnnotation(id, prefix))\n marker.replaceWith(annotations.get(id)!)\n }\n }\n\n /* Keep list if there are no annotations to render */\n if (annotations.size === 0)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const done$ = new Subject()\n\n /* Retrieve container pairs for swapping */\n const pairs: [HTMLElement, HTMLElement][] = []\n for (const [id, annotation] of annotations)\n pairs.push([\n getElement(\".md-typeset\", annotation),\n getElement(`li:nth-child(${id})`, el)\n ])\n\n /* Handle print mode - see https://bit.ly/3rgPdpt */\n print$\n .pipe(\n takeUntil(done$.pipe(takeLast(1)))\n )\n .subscribe(active => {\n el.hidden = !active\n\n /* Show annotations in code block or list (print) */\n for (const [inner, child] of pairs)\n if (!active)\n swap(child, inner)\n else\n swap(inner, child)\n })\n\n /* Create and return component */\n return merge(...[...annotations]\n .map(([, annotation]) => (\n mountAnnotation(annotation, container, { target$ })\n ))\n )\n .pipe(\n finalize(() => done$.complete()),\n share()\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { watchScript } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../../_\"\n\nimport themeCSS from \"./index.css\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid diagram\n */\nexport interface Mermaid {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid instance observable\n */\nlet mermaid$: Observable\n\n/**\n * Global sequence number for diagrams\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch Mermaid script\n *\n * @returns Mermaid scripts observable\n */\nfunction fetchScripts(): Observable {\n return typeof mermaid === \"undefined\" || mermaid instanceof Element\n ? watchScript(\"https://unpkg.com/mermaid@9.0.1/dist/mermaid.min.js\")\n : of(undefined)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount Mermaid diagram\n *\n * @param el - Code block element\n *\n * @returns Mermaid diagram component observable\n */\nexport function mountMermaid(\n el: HTMLElement\n): Observable> {\n el.classList.remove(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n mermaid$ ||= fetchScripts()\n .pipe(\n tap(() => mermaid.initialize({\n startOnLoad: false,\n themeCSS\n })),\n map(() => undefined),\n shareReplay(1)\n )\n\n /* Render diagram */\n mermaid$.subscribe(() => {\n el.classList.add(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n const id = `__mermaid_${sequence++}`\n const host = h(\"div\", { class: \"mermaid\" })\n mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => {\n\n /* Create a shadow root and inject diagram */\n const shadow = host.attachShadow({ mode: \"closed\" })\n shadow.innerHTML = svg\n\n /* Replace code block with diagram */\n el.replaceWith(host)\n })\n })\n\n /* Create and return component */\n return mermaid$\n .pipe(\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Details\n */\nexport interface Details {\n action: \"open\" | \"close\" /* Details state */\n reveal?: boolean /* Details is revealed */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch details\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details observable\n */\nexport function watchDetails(\n el: HTMLDetailsElement, { target$, print$ }: WatchOptions\n): Observable
    {\n let open = true\n return merge(\n\n /* Open and focus details on location target */\n target$\n .pipe(\n map(target => target.closest(\"details:not([open])\")!),\n filter(details => el === details),\n map(() => ({\n action: \"open\", reveal: true\n }) as Details)\n ),\n\n /* Open details on print and close afterwards */\n print$\n .pipe(\n filter(active => active || !open),\n tap(() => open = el.open),\n map(active => ({\n action: active ? \"open\" : \"close\"\n }) as Details)\n )\n )\n}\n\n/**\n * Mount details\n *\n * This function ensures that `details` tags are opened on anchor jumps and\n * prior to printing, so the whole content of the page is visible.\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details component observable\n */\nexport function mountDetails(\n el: HTMLDetailsElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n push$.subscribe(({ action, reveal }) => {\n el.toggleAttribute(\"open\", action === \"open\")\n if (reveal)\n el.scrollIntoView()\n })\n\n /* Create and return component */\n return watchDetails(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\n\nimport { renderTable } from \"~/templates\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Data table\n */\nexport interface DataTable {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Sentinel for replacement\n */\nconst sentinel = h(\"table\")\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount data table\n *\n * This function wraps a data table in another scrollable container, so it can\n * be smoothly scrolled on smaller screen sizes and won't break the layout.\n *\n * @param el - Data table element\n *\n * @returns Data table component observable\n */\nexport function mountDataTable(\n el: HTMLElement\n): Observable> {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n\n /* Create and return component */\n return of({ ref: el })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n asyncScheduler,\n auditTime,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n skip,\n startWith,\n subscribeOn,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElement,\n getElementContentOffset,\n getElementContentSize,\n getElementOffset,\n getElementSize,\n getElements,\n watchElementContentOffset,\n watchElementSize\n} from \"~/browser\"\nimport { renderTabbedControl } from \"~/templates\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content tabs\n */\nexport interface ContentTabs {\n active: HTMLLabelElement /* Active tab label */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch content tabs\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs observable\n */\nexport function watchContentTabs(\n el: HTMLElement\n): Observable {\n const inputs = getElements(\":scope > input\", el)\n const initial = inputs.find(input => input.checked) || inputs[0]\n return merge(...inputs.map(input => fromEvent(input, \"change\")\n .pipe(\n map(() => getElement(`label[for=\"${input.id}\"]`))\n )\n ))\n .pipe(\n startWith(getElement(`label[for=\"${initial.id}\"]`)),\n map(active => ({ active }))\n )\n}\n\n/**\n * Mount content tabs\n *\n * This function scrolls the active tab into view. While this functionality is\n * provided by browsers as part of `scrollInfoView`, browsers will always also\n * scroll the vertical axis, which we do not want. Thus, we decided to provide\n * this functionality ourselves.\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs component observable\n */\nexport function mountContentTabs(\n el: HTMLElement\n): Observable> {\n\n /* Render content tab previous button for pagination */\n const prev = renderTabbedControl(\"prev\")\n el.append(prev)\n\n /* Render content tab next button for pagination */\n const next = renderTabbedControl(\"next\")\n el.append(next)\n\n /* Mount component on subscription */\n const container = getElement(\".tabbed-labels\", el)\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n combineLatest([push$, watchElementSize(el)])\n .pipe(\n auditTime(1, animationFrameScheduler),\n takeUntil(done$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ active }, size]) {\n const offset = getElementOffset(active)\n const { width } = getElementSize(active)\n\n /* Set tab indicator offset and width */\n el.style.setProperty(\"--md-indicator-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-indicator-width\", `${width}px`)\n\n /* Scroll container to active content tab */\n const content = getElementContentOffset(container)\n if (\n offset.x < content.x ||\n offset.x + width > content.x + size.width\n )\n container.scrollTo({\n left: Math.max(0, offset.x - 16),\n behavior: \"smooth\"\n })\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-indicator-x\")\n el.style.removeProperty(\"--md-indicator-width\")\n }\n })\n\n /* Hide content tab buttons on borders */\n combineLatest([\n watchElementContentOffset(container),\n watchElementSize(container)\n ])\n .pipe(\n takeUntil(done$)\n )\n .subscribe(([offset, size]) => {\n const content = getElementContentSize(container)\n prev.hidden = offset.x < 16\n next.hidden = offset.x > content.width - size.width - 16\n })\n\n /* Paginate content tab container on click */\n merge(\n fromEvent(prev, \"click\").pipe(map(() => -1)),\n fromEvent(next, \"click\").pipe(map(() => +1))\n )\n .pipe(\n takeUntil(done$)\n )\n .subscribe(direction => {\n const { width } = getElementSize(container)\n container.scrollBy({\n left: width * direction,\n behavior: \"smooth\"\n })\n })\n\n /* Set up linking of content tabs, if enabled */\n if (feature(\"content.tabs.link\"))\n push$.pipe(skip(1))\n .subscribe(({ active }) => {\n const tab = active.innerText.trim()\n for (const set of getElements(\"[data-tabs]\"))\n for (const input of getElements(\n \":scope > input\", set\n )) {\n const label = getElement(`label[for=\"${input.id}\"]`)\n if (label.innerText.trim() === tab) {\n input.click()\n break\n }\n }\n\n /* Persist active tabs in local storage */\n const tabs = __md_get(\"__tabs\") || []\n __md_set(\"__tabs\", [...new Set([tab, ...tabs])])\n })\n\n /* Create and return component */\n return watchContentTabs(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n .pipe(\n subscribeOn(asyncScheduler)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, merge } from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Annotation } from \"../annotation\"\nimport {\n CodeBlock,\n Mermaid,\n mountCodeBlock,\n mountMermaid\n} from \"../code\"\nimport {\n Details,\n mountDetails\n} from \"../details\"\nimport {\n DataTable,\n mountDataTable\n} from \"../table\"\nimport {\n ContentTabs,\n mountContentTabs\n} from \"../tabs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content\n */\nexport type Content =\n | Annotation\n | ContentTabs\n | CodeBlock\n | Mermaid\n | DataTable\n | Details\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount content\n *\n * This function mounts all components that are found in the content of the\n * actual article, including code blocks, data tables and details.\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Content component observable\n */\nexport function mountContent(\n el: HTMLElement, { target$, print$ }: MountOptions\n): Observable> {\n return merge(\n\n /* Code blocks */\n ...getElements(\"pre:not(.mermaid) > code\", el)\n .map(child => mountCodeBlock(child, { target$, print$ })),\n\n /* Mermaid diagrams */\n ...getElements(\"pre.mermaid\", el)\n .map(child => mountMermaid(child)),\n\n /* Data tables */\n ...getElements(\"table:not([class])\", el)\n .map(child => mountDataTable(child)),\n\n /* Details */\n ...getElements(\"details\", el)\n .map(child => mountDetails(child, { target$, print$ })),\n\n /* Content tabs */\n ...getElements(\"[data-tabs]\", el)\n .map(child => mountContentTabs(child))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n delay,\n finalize,\n map,\n merge,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Dialog\n */\nexport interface Dialog {\n message: string /* Dialog message */\n active: boolean /* Dialog is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n alert$: Subject /* Alert subject */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch dialog\n *\n * @param _el - Dialog element\n * @param options - Options\n *\n * @returns Dialog observable\n */\nexport function watchDialog(\n _el: HTMLElement, { alert$ }: WatchOptions\n): Observable {\n return alert$\n .pipe(\n switchMap(message => merge(\n of(true),\n of(false).pipe(delay(2000))\n )\n .pipe(\n map(active => ({ message, active }))\n )\n )\n )\n}\n\n/**\n * Mount dialog\n *\n * This function reveals the dialog in the right corner when a new alert is\n * emitted through the subject that is passed as part of the options.\n *\n * @param el - Dialog element\n * @param options - Options\n *\n * @returns Dialog component observable\n */\nexport function mountDialog(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const inner = getElement(\".md-typeset\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ message, active }) => {\n el.classList.toggle(\"md-dialog--active\", active)\n inner.textContent = message\n })\n\n /* Create and return component */\n return watchDialog(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n combineLatestWith,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchToggle\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Main } from \"../../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n height: number /* Header visible height */\n hidden: boolean /* Header is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute whether the header is hidden\n *\n * If the user scrolls past a certain threshold, the header can be hidden when\n * scrolling down, and shown when scrolling up.\n *\n * @param options - Options\n *\n * @returns Toggle observable\n */\nfunction isHidden({ viewport$ }: WatchOptions): Observable {\n if (!feature(\"header.autohide\"))\n return of(false)\n\n /* Compute direction and turning point */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => [a < b, b] as const),\n distinctUntilKeyChanged(0)\n )\n\n /* Compute whether header should be hidden */\n const hidden$ = combineLatest([viewport$, direction$])\n .pipe(\n filter(([{ offset }, [, y]]) => Math.abs(y - offset.y) > 100),\n map(([, [direction]]) => direction),\n distinctUntilChanged()\n )\n\n /* Compute threshold for hiding */\n const search$ = watchToggle(\"search\")\n return combineLatest([viewport$, search$])\n .pipe(\n map(([{ offset }, search]) => offset.y > 400 && !search),\n distinctUntilChanged(),\n switchMap(active => active ? hidden$ : of(false)),\n startWith(false)\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header observable\n */\nexport function watchHeader(\n el: HTMLElement, options: WatchOptions\n): Observable
    {\n return defer(() => combineLatest([\n watchElementSize(el),\n isHidden(options)\n ]))\n .pipe(\n map(([{ height }, hidden]) => ({\n height,\n hidden\n })),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.hidden === b.hidden\n )),\n shareReplay(1)\n )\n}\n\n/**\n * Mount header\n *\n * This function manages the different states of the header, i.e. whether it's\n * hidden or rendered with a shadow. This depends heavily on the main area.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header component observable\n */\nexport function mountHeader(\n el: HTMLElement, { header$, main$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n const done$ = push$.pipe(takeLast(1))\n push$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n combineLatestWith(header$)\n )\n .subscribe(([{ active }, { hidden }]) => {\n el.classList.toggle(\"md-header--shadow\", active && !hidden)\n el.hidden = hidden\n })\n\n /* Link to main area */\n main$.subscribe(push$)\n\n /* Create and return component */\n return header$\n .pipe(\n takeUntil(done$),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElementSize,\n getOptionalElement,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Header } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface HeaderTitle {\n active: boolean /* Header title is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header title\n *\n * @param el - Heading element\n * @param options - Options\n *\n * @returns Header title observable\n */\nexport function watchHeaderTitle(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchViewportAt(el, { viewport$, header$ })\n .pipe(\n map(({ offset: { y } }) => {\n const { height } = getElementSize(el)\n return {\n active: y >= height\n }\n }),\n distinctUntilKeyChanged(\"active\")\n )\n}\n\n/**\n * Mount header title\n *\n * This function swaps the header title from the site title to the title of the\n * current page when the user scrolls past the first headline.\n *\n * @param el - Header title element\n * @param options - Options\n *\n * @returns Header title component observable\n */\nexport function mountHeaderTitle(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ active }) => {\n el.classList.toggle(\"md-header__title--active\", active)\n })\n\n /* Obtain headline, if any */\n const heading = getOptionalElement(\"article h1\")\n if (typeof heading === \"undefined\")\n return EMPTY\n\n /* Create and return component */\n return watchHeaderTitle(heading, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchElementSize\n} from \"~/browser\"\n\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Main area is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @returns Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(({ height }) => height),\n distinctUntilChanged()\n )\n\n /* Compute the main area's top and bottom borders */\n const border$ = adjust$\n .pipe(\n switchMap(() => watchElementSize(el)\n .pipe(\n map(({ height }) => ({\n top: el.offsetTop,\n bottom: el.offsetTop + height\n })),\n distinctUntilKeyChanged(\"bottom\")\n )\n )\n )\n\n /* Compute the main area's offset, visible height and if we scrolled past */\n return combineLatest([adjust$, border$, viewport$])\n .pipe(\n map(([header, { top, bottom }, { offset: { y }, size: { height } }]) => {\n height = Math.max(0, height\n - Math.max(0, top - y, header)\n - Math.max(0, height + y - bottom)\n )\n return {\n offset: top - header,\n height,\n active: top - header <= y\n }\n }),\n distinctUntilChanged((a, b) => (\n a.offset === b.offset &&\n a.height === b.height &&\n a.active === b.active\n ))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n defer,\n finalize,\n fromEvent,\n map,\n mergeMap,\n observeOn,\n of,\n shareReplay,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Palette colors\n */\nexport interface PaletteColor {\n scheme?: string /* Color scheme */\n primary?: string /* Primary color */\n accent?: string /* Accent color */\n}\n\n/**\n * Palette\n */\nexport interface Palette {\n index: number /* Palette index */\n color: PaletteColor /* Palette colors */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch color palette\n *\n * @param inputs - Color palette element\n *\n * @returns Color palette observable\n */\nexport function watchPalette(\n inputs: HTMLInputElement[]\n): Observable {\n const current = __md_get(\"__palette\") || {\n index: inputs.findIndex(input => matchMedia(\n input.getAttribute(\"data-md-color-media\")!\n ).matches)\n }\n\n /* Emit changes in color palette */\n return of(...inputs)\n .pipe(\n mergeMap(input => fromEvent(input, \"change\")\n .pipe(\n map(() => input)\n )\n ),\n startWith(inputs[Math.max(0, current.index)]),\n map(input => ({\n index: inputs.indexOf(input),\n color: {\n scheme: input.getAttribute(\"data-md-color-scheme\"),\n primary: input.getAttribute(\"data-md-color-primary\"),\n accent: input.getAttribute(\"data-md-color-accent\")\n }\n } as Palette)),\n shareReplay(1)\n )\n}\n\n/**\n * Mount color palette\n *\n * @param el - Color palette element\n *\n * @returns Color palette component observable\n */\nexport function mountPalette(\n el: HTMLElement\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(palette => {\n document.body.setAttribute(\"data-md-color-switching\", \"\")\n\n /* Set color palette */\n for (const [key, value] of Object.entries(palette.color))\n document.body.setAttribute(`data-md-color-${key}`, value)\n\n /* Toggle visibility */\n for (let index = 0; index < inputs.length; index++) {\n const label = inputs[index].nextElementSibling\n if (label instanceof HTMLElement)\n label.hidden = palette.index !== index\n }\n\n /* Persist preference in local storage */\n __md_set(\"__palette\", palette)\n })\n\n /* Revert transition durations after color switch */\n push$.pipe(observeOn(asyncScheduler))\n .subscribe(() => {\n document.body.removeAttribute(\"data-md-color-switching\")\n })\n\n /* Create and return component */\n const inputs = getElements(\"input\", el)\n return watchPalette(inputs)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n Observable,\n Subject,\n map,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Extract text to copy\n *\n * @param el - HTML element\n *\n * @returns Extracted text\n */\nfunction extract(el: HTMLElement): string {\n el.setAttribute(\"data-md-copying\", \"\")\n const text = el.innerText\n el.removeAttribute(\"data-md-copying\")\n return text\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up Clipboard.js integration\n *\n * @param options - Options\n */\nexport function setupClipboardJS(\n { alert$ }: SetupOptions\n): void {\n if (ClipboardJS.isSupported()) {\n new Observable(subscriber => {\n new ClipboardJS(\"[data-clipboard-target], [data-clipboard-text]\", {\n text: el => (\n el.getAttribute(\"data-clipboard-text\")! ||\n extract(getElement(\n el.getAttribute(\"data-clipboard-target\")!\n ))\n )\n })\n .on(\"success\", ev => subscriber.next(ev))\n })\n .pipe(\n tap(ev => {\n const trigger = ev.trigger as HTMLElement\n trigger.focus()\n }),\n map(() => translation(\"clipboard.copied\"))\n )\n .subscribe(alert$)\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n of,\n tap\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport { getElements, requestXML } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sitemap, i.e. a list of URLs\n */\nexport type Sitemap = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Preprocess a list of URLs\n *\n * This function replaces the `site_url` in the sitemap with the actual base\n * URL, to allow instant loading to work in occasions like Netlify previews.\n *\n * @param urls - URLs\n *\n * @returns URL path parts\n */\nfunction preprocess(urls: Sitemap): Sitemap {\n if (urls.length < 2)\n return [\"\"]\n\n /* Take the first two URLs and remove everything after the last slash */\n const [root, next] = [...urls]\n .sort((a, b) => a.length - b.length)\n .map(url => url.replace(/[^/]+$/, \"\"))\n\n /* Compute common prefix */\n let index = 0\n if (root === next)\n index = root.length\n else\n while (root.charCodeAt(index) === next.charCodeAt(index))\n index++\n\n /* Remove common prefix and return in original order */\n return urls.map(url => url.replace(root.slice(0, index), \"\"))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the sitemap for the given base URL\n *\n * @param base - Base URL\n *\n * @returns Sitemap observable\n */\nexport function fetchSitemap(base?: URL): Observable {\n const cached = __md_get(\"__sitemap\", sessionStorage, base)\n if (cached) {\n return of(cached)\n } else {\n const config = configuration()\n return requestXML(new URL(\"sitemap.xml\", base || config.base))\n .pipe(\n map(sitemap => preprocess(getElements(\"loc\", sitemap)\n .map(node => node.textContent!)\n )),\n catchError(() => EMPTY), // @todo refactor instant loading\n defaultIfEmpty([]),\n tap(sitemap => __md_set(\"__sitemap\", sitemap, sessionStorage, base))\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n bufferCount,\n catchError,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n fromEvent,\n map,\n merge,\n of,\n sample,\n share,\n skip,\n skipUntil,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"~/_\"\nimport {\n Viewport,\n ViewportOffset,\n getElements,\n getOptionalElement,\n request,\n setLocation,\n setLocationHash\n} from \"~/browser\"\nimport { getComponentElement } from \"~/components\"\nimport { h } from \"~/utilities\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\nexport interface HistoryState {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n location$: Subject /* Location subject */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up instant loading\n *\n * When fetching, theoretically, we could use `responseType: \"document\"`, but\n * since all MkDocs links are relative, we need to make sure that the current\n * location matches the document we just loaded. Otherwise any relative links\n * in the document could use the old location.\n *\n * This is the reason why we need to synchronize history events and the process\n * of fetching the document for navigation changes (except `popstate` events):\n *\n * 1. Fetch document via `XMLHTTPRequest`\n * 2. Set new location via `history.pushState`\n * 3. Parse and emit fetched document\n *\n * For `popstate` events, we must not use `history.pushState`, or the forward\n * history will be irreversibly overwritten. In case the request fails, the\n * location change is dispatched regularly.\n *\n * @param options - Options\n */\nexport function setupInstantLoading(\n { document$, location$, viewport$ }: SetupOptions\n): void {\n const config = configuration()\n if (location.protocol === \"file:\")\n return\n\n /* Disable automatic scroll restoration */\n if (\"scrollRestoration\" in history) {\n history.scrollRestoration = \"manual\"\n\n /* Hack: ensure that reloads restore viewport offset */\n fromEvent(window, \"beforeunload\")\n .subscribe(() => {\n history.scrollRestoration = \"auto\"\n })\n }\n\n /* Hack: ensure absolute favicon link to omit 404s when switching */\n const favicon = getOptionalElement(\"link[rel=icon]\")\n if (typeof favicon !== \"undefined\")\n favicon.href = favicon.href\n\n /* Intercept internal navigation */\n const push$ = fetchSitemap()\n .pipe(\n map(paths => paths.map(path => `${new URL(path, config.base)}`)),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n switchMap(ev => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target) {\n const url = new URL(el.href)\n\n /* Canonicalize URL */\n url.search = \"\"\n url.hash = \"\"\n\n /* Check if URL should be intercepted */\n if (\n url.pathname !== location.pathname &&\n urls.includes(url.toString())\n ) {\n ev.preventDefault()\n return of({\n url: new URL(el.href)\n })\n }\n }\n }\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Intercept history back and forward */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n distinctUntilChanged((a, b) => a.url.href === b.url.href),\n map(({ url }) => url)\n )\n .subscribe(location$)\n\n /* Fetch document via `XMLHTTPRequest` */\n const response$ = location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n switchMap(url => request(url.href)\n .pipe(\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Set new location via `history.pushState` */\n push$\n .pipe(\n sample(response$)\n )\n .subscribe(({ url }) => {\n history.pushState({}, \"\", `${url}`)\n })\n\n /* Parse and emit fetched document */\n const dom = new DOMParser()\n response$\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/html\"))\n )\n .subscribe(document$)\n\n /* Replace meta tags and components */\n document$\n .pipe(\n skip(1)\n )\n .subscribe(replacement => {\n for (const selector of [\n\n /* Meta tags */\n \"title\",\n \"link[rel=canonical]\",\n \"meta[name=author]\",\n \"meta[name=description]\",\n\n /* Components */\n \"[data-md-component=announce]\",\n \"[data-md-component=container]\",\n \"[data-md-component=header-topic]\",\n \"[data-md-component=outdated]\",\n \"[data-md-component=logo]\",\n \"[data-md-component=skip]\",\n ...feature(\"navigation.tabs.sticky\")\n ? [\"[data-md-component=tabs]\"]\n : []\n ]) {\n const source = getOptionalElement(selector)\n const target = getOptionalElement(selector, replacement)\n if (\n typeof source !== \"undefined\" &&\n typeof target !== \"undefined\"\n ) {\n source.replaceWith(target)\n }\n }\n })\n\n /* Re-evaluate scripts */\n document$\n .pipe(\n skip(1),\n map(() => getComponentElement(\"container\")),\n switchMap(el => getElements(\"script\", el)),\n concatMap(el => {\n const script = h(\"script\")\n if (el.src) {\n for (const name of el.getAttributeNames())\n script.setAttribute(name, el.getAttribute(name)!)\n el.replaceWith(script)\n\n /* Complete when script is loaded */\n return new Observable(observer => {\n script.onload = () => observer.complete()\n })\n\n /* Complete immediately */\n } else {\n script.textContent = el.textContent\n el.replaceWith(script)\n return EMPTY\n }\n })\n )\n .subscribe()\n\n /* Emit history state change */\n merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n .subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n setLocationHash(url.hash)\n } else {\n window.scrollTo(0, offset?.y || 0)\n }\n })\n\n /* Debounce update of viewport offset */\n viewport$\n .pipe(\n skipUntil(push$),\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Set viewport offset from history */\n merge(push$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([a, b]) => a.url.pathname === b.url.pathname),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n window.scrollTo(0, offset?.y || 0)\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport interface SearchDocument extends SearchIndexDocument {\n parent?: SearchIndexDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @returns Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n const parents = new Set()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location, title and tags */\n const location = doc.location\n const title = doc.title\n const tags = doc.tags\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path)!\n\n /* Ignore first section, override article */\n if (!parents.has(parent)) {\n parent.title = doc.title\n parent.text = text\n\n /* Remember that we processed the article */\n parents.add(parent)\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n ...tags && { tags }\n })\n }\n }\n return documents\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexConfig } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @param value - Value\n *\n * @returns Highlighted value\n */\nexport type SearchHighlightFn = (value: string) => string\n\n/**\n * Search highlight factory function\n *\n * @param query - Query value\n *\n * @returns Search highlight function\n */\nexport type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n * @param escape - Whether to escape HTML\n *\n * @returns Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig, escape: boolean\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+\\-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\")\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight string value */\n return value => (\n escape\n ? escapeHTML(value)\n : value\n )\n .replace(match, highlight)\n .replace(/<\\/mark>(\\s+)]*>/img, \"$1\")\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search transformation function\n *\n * @param value - Query value\n *\n * @returns Transformed query value\n */\nexport type SearchTransformFn = (value: string) => string\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * 1. Search for terms in quotation marks and prepend a `+` modifier to denote\n * that the resulting document must contain all terms, converting the query\n * to an `AND` query (as opposed to the default `OR` behavior). While users\n * may expect terms enclosed in quotation marks to map to span queries, i.e.\n * for which order is important, Lunr.js doesn't support them, so the best\n * we can do is to convert the terms to an `AND` query.\n *\n * 2. Replace control characters which are not located at the beginning of the\n * query or preceded by white space, or are not followed by a non-whitespace\n * character or are at the end of the query string. Furthermore, filter\n * unmatched quotation marks.\n *\n * 3. Trim excess whitespace from left and right.\n *\n * @param query - Query value\n *\n * @returns Transformed query value\n */\nexport function defaultTransform(query: string): string {\n return query\n .split(/\"([^\"]+)\"/g) /* => 1 */\n .map((terms, index) => index & 1\n ? terms.replace(/^\\b|^(?![^\\x00-\\x7F]|$)|\\s+/g, \" +\")\n : terms\n )\n .join(\"\")\n .replace(/\"|(?:^|\\s+)[*+\\-:^~]+(?=\\s+|$)/g, \"\") /* => 2 */\n .trim() /* => 3 */\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndex, SearchResult } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n READY, /* Search index ready */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndex /* Message data */\n}\n\n/**\n * Message indicating the search index is ready\n */\nexport interface SearchReadyMessage {\n type: SearchMessageType.READY /* Message type */\n}\n\n/**\n * Message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * Message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchReadyMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search ready messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchReadyMessage(\n message: SearchMessage\n): message is SearchReadyMessage {\n return message.type === SearchMessageType.READY\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ObservableInput,\n Subject,\n from,\n map,\n share\n} from \"rxjs\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport { WorkerHandler, watchWorker } from \"~/browser\"\n\nimport { SearchIndex } from \"../../_\"\nimport {\n SearchOptions,\n SearchPipeline\n} from \"../../options\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search worker\n */\nexport type SearchWorker = WorkerHandler\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search index\n *\n * @param data - Search index\n *\n * @returns Search index\n */\nfunction setupSearchIndex({ config, docs }: SearchIndex): SearchIndex {\n\n /* Override default language with value from translation */\n if (config.lang.length === 1 && config.lang[0] === \"en\")\n config.lang = [\n translation(\"search.config.lang\")\n ]\n\n /* Override default separator with value from translation */\n if (config.separator === \"[\\\\s\\\\-]+\")\n config.separator = translation(\"search.config.separator\")\n\n /* Set pipeline from translation */\n const pipeline = translation(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as SearchPipeline\n\n /* Determine search options */\n const options: SearchOptions = {\n pipeline,\n suggestions: feature(\"search.suggest\")\n }\n\n /* Return search index after defaulting */\n return { config, docs, options }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search worker\n *\n * This function creates a web worker to set up and query the search index,\n * which is done using Lunr.js. The index must be passed as an observable to\n * enable hacks like _localsearch_ via search index embedding as JSON.\n *\n * @param url - Worker URL\n * @param index - Search index observable input\n *\n * @returns Search worker\n */\nexport function setupSearchWorker(\n url: string, index: ObservableInput\n): SearchWorker {\n const config = configuration()\n const worker = new Worker(url)\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n map(message => {\n if (isSearchResultMessage(message)) {\n for (const result of message.data.items)\n for (const document of result)\n document.location = `${new URL(document.location, config.base)}`\n }\n return message\n }),\n share()\n )\n\n /* Set up search index */\n from(index)\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data: setupSearchIndex(data)\n } as SearchSetupMessage))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return search worker */\n return { tx$, rx$ }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Subject,\n catchError,\n combineLatest,\n filter,\n fromEvent,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n getElement,\n getLocation,\n requestJSON,\n setLocation\n} from \"~/browser\"\nimport { getComponentElements } from \"~/components\"\nimport {\n Version,\n renderVersionSelector\n} from \"~/templates\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up version selector\n *\n * @param options - Options\n */\nexport function setupVersionSelector(\n { document$ }: SetupOptions\n): void {\n const config = configuration()\n const versions$ = requestJSON(\n new URL(\"../versions.json\", config.base)\n )\n .pipe(\n catchError(() => EMPTY) // @todo refactor instant loading\n )\n\n /* Determine current version */\n const current$ = versions$\n .pipe(\n map(versions => {\n const [, current] = config.base.match(/([^/]+)\\/?$/)!\n return versions.find(({ version, aliases }) => (\n version === current || aliases.includes(current)\n )) || versions[0]\n })\n )\n\n /* Intercept inter-version navigation */\n versions$\n .pipe(\n map(versions => new Map(versions.map(version => [\n `${new URL(`../${version.version}/`, config.base)}`,\n version\n ]))),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n withLatestFrom(current$),\n switchMap(([ev, current]) => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target && urls.has(el.href)) {\n const url = el.href\n // This is a temporary hack to detect if a version inside the\n // version selector or on another part of the site was clicked.\n // If we're inside the version selector, we definitely want to\n // find the same page, as we might have different deployments\n // due to aliases. However, if we're outside the version\n // selector, we must abort here, because we might otherwise\n // interfere with instant loading. We need to refactor this\n // at some point together with instant loading.\n //\n // See https://github.com/squidfunk/mkdocs-material/issues/4012\n if (!ev.target.closest(\".md-version\")) {\n const version = urls.get(url)!\n if (version === current)\n return EMPTY\n }\n ev.preventDefault()\n return of(url)\n }\n }\n return EMPTY\n }),\n switchMap(url => {\n const { version } = urls.get(url)!\n return fetchSitemap(new URL(url))\n .pipe(\n map(sitemap => {\n const location = getLocation()\n const path = location.href.replace(config.base, \"\")\n return sitemap.includes(path.split(\"#\")[0])\n ? new URL(`../${version}/${path}`, config.base)\n : new URL(url)\n })\n )\n })\n )\n )\n )\n .subscribe(url => setLocation(url))\n\n /* Render version selector and warning */\n combineLatest([versions$, current$])\n .subscribe(([versions, current]) => {\n const topic = getElement(\".md-header__topic\")\n topic.appendChild(renderVersionSelector(versions, current))\n })\n\n /* Integrate outdated version banner with instant loading */\n document$.pipe(switchMap(() => current$))\n .subscribe(current => {\n\n /* Check if version state was already determined */\n let outdated = __md_get(\"__outdated\", sessionStorage)\n if (outdated === null) {\n const latest = config.version?.default || \"latest\"\n outdated = !current.aliases.includes(latest)\n\n /* Persist version state in session storage */\n __md_set(\"__outdated\", outdated, sessionStorage)\n }\n\n /* Unhide outdated version banner */\n if (outdated)\n for (const warning of getComponentElements(\"outdated\"))\n warning.hidden = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n combineLatest,\n delay,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n share,\n shareReplay,\n startWith,\n take,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getLocation,\n setToggle,\n watchElementFocus,\n watchToggle\n} from \"~/browser\"\nimport {\n SearchMessageType,\n SearchQueryMessage,\n SearchWorker,\n defaultTransform,\n isSearchReadyMessage\n} from \"~/integrations\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { rx$ }: SearchWorker\n): Observable {\n const fn = __search?.transform || defaultTransform\n\n /* Immediately show search dialog */\n const { searchParams } = getLocation()\n if (searchParams.has(\"q\"))\n setToggle(\"search\", true)\n\n /* Intercept query parameter (deep link) */\n const param$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1),\n map(() => searchParams.get(\"q\") || \"\")\n )\n\n /* Remove query parameter when search is closed */\n watchToggle(\"search\")\n .pipe(\n filter(active => !active),\n take(1)\n )\n .subscribe(() => {\n const url = new URL(location.href)\n url.searchParams.delete(\"q\")\n history.replaceState({}, \"\", `${url}`)\n })\n\n /* Set query from parameter */\n param$.subscribe(value => { // TODO: not ideal - find a better way\n if (value) {\n el.value = value\n el.focus()\n }\n })\n\n /* Intercept focus and input events */\n const focus$ = watchElementFocus(el)\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1)),\n param$\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(\"\"),\n distinctUntilChanged(),\n )\n\n /* Combine into single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount search query\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query component observable\n */\nexport function mountSearchQuery(\n el: HTMLInputElement, { tx$, rx$ }: SearchWorker\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n\n /* Handle value changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Handle focus changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus) {\n setToggle(\"search\", focus)\n el.placeholder = \"\"\n } else {\n el.placeholder = translation(\"search.placeholder\")\n }\n })\n\n /* Handle reset */\n fromEvent(el.form!, \"reset\")\n .pipe(\n takeUntil(done$)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchSearchQuery(el, { tx$, rx$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n filter,\n finalize,\n map,\n merge,\n of,\n skipUntil,\n switchMap,\n take,\n tap,\n withLatestFrom,\n zipWith\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getElement,\n watchElementBoundary\n} from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchReadyMessage,\n isSearchResultMessage\n} from \"~/integrations\"\nimport { renderSearchResultItem } from \"~/templates\"\nimport { round } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result list\n *\n * This function performs a lazy rendering of the search results, depending on\n * the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchResult(\n el: HTMLElement, { rx$ }: SearchWorker, { query$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const boundary$ = watchElementBoundary(el.parentElement!)\n .pipe(\n filter(Boolean)\n )\n\n /* Retrieve nested components */\n const meta = getElement(\":scope > :first-child\", el)\n const list = getElement(\":scope > :last-child\", el)\n\n /* Wait until search is ready */\n const ready$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1)\n )\n\n /* Update search result metadata */\n push$\n .pipe(\n withLatestFrom(query$),\n skipUntil(ready$)\n )\n .subscribe(([{ items }, { value }]) => {\n if (value) {\n switch (items.length) {\n\n /* No results */\n case 0:\n meta.textContent = translation(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n meta.textContent = translation(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n meta.textContent = translation(\n \"search.result.other\",\n round(items.length)\n )\n }\n } else {\n meta.textContent = translation(\"search.result.placeholder\")\n }\n })\n\n /* Update search result list */\n push$\n .pipe(\n tap(() => list.innerHTML = \"\"),\n switchMap(({ items }) => merge(\n of(...items.slice(0, 10)),\n of(...items.slice(10))\n .pipe(\n bufferCount(4),\n zipWith(boundary$),\n switchMap(([chunk]) => chunk)\n )\n ))\n )\n .subscribe(result => list.appendChild(\n renderSearchResultItem(result)\n ))\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n fromEvent,\n map,\n tap\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search sharing\n */\nexport interface SearchShare {\n url: URL /* Deep link for sharing */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n query$: Observable /* Search query observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search sharing\n *\n * @param _el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing observable\n */\nexport function watchSearchShare(\n _el: HTMLElement, { query$ }: WatchOptions\n): Observable {\n return query$\n .pipe(\n map(({ value }) => {\n const url = getLocation()\n url.hash = \"\"\n url.searchParams.delete(\"h\")\n url.searchParams.set(\"q\", value)\n return { url }\n })\n )\n}\n\n/**\n * Mount search sharing\n *\n * @param el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing component observable\n */\nexport function mountSearchShare(\n el: HTMLAnchorElement, options: MountOptions\n): Observable> {\n const push$ = new Subject()\n push$.subscribe(({ url }) => {\n el.setAttribute(\"data-clipboard-text\", el.href)\n el.href = `${url}`\n })\n\n /* Prevent following of link */\n fromEvent(el, \"click\")\n .subscribe(ev => ev.preventDefault())\n\n /* Create and return component */\n return watchSearchShare(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n observeOn,\n tap\n} from \"rxjs\"\n\nimport { Keyboard } from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchResultMessage\n} from \"~/integrations\"\n\nimport { Component, getComponentElement } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search suggestions\n */\nexport interface SearchSuggest {}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search suggestions\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchSuggest(\n el: HTMLElement, { rx$ }: SearchWorker, { keyboard$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n\n /* Retrieve query component and track all changes */\n const query = getComponentElement(\"search-query\")\n const query$ = merge(\n fromEvent(query, \"keydown\"),\n fromEvent(query, \"focus\")\n )\n .pipe(\n observeOn(asyncScheduler),\n map(() => query.value),\n distinctUntilChanged(),\n )\n\n /* Update search suggestions */\n push$\n .pipe(\n combineLatestWith(query$),\n map(([{ suggestions }, value]) => {\n const words = value.split(/([\\s-]+)/)\n if (suggestions?.length && words[words.length - 1]) {\n const last = suggestions[suggestions.length - 1]\n if (last.startsWith(words[words.length - 1]))\n words[words.length - 1] = last\n } else {\n words.length = 0\n }\n return words\n })\n )\n .subscribe(words => el.innerHTML = words\n .join(\"\")\n .replace(/\\s/g, \" \")\n )\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Right arrow: accept current suggestion */\n case \"ArrowRight\":\n if (\n el.innerText.length &&\n query.selectionStart === query.value.length\n )\n query.value = el.innerText\n break\n }\n })\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n ObservableInput,\n filter,\n merge,\n mergeWith,\n sample,\n take\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n Keyboard,\n getActiveElement,\n getElements,\n setToggle\n} from \"~/browser\"\nimport {\n SearchIndex,\n SearchResult,\n isSearchQueryMessage,\n isSearchReadyMessage,\n setupSearchWorker\n} from \"~/integrations\"\n\nimport {\n Component,\n getComponentElement,\n getComponentElements\n} from \"../../_\"\nimport {\n SearchQuery,\n mountSearchQuery\n} from \"../query\"\nimport { mountSearchResult } from \"../result\"\nimport {\n SearchShare,\n mountSearchShare\n} from \"../share\"\nimport {\n SearchSuggest,\n mountSearchSuggest\n} from \"../suggest\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport type Search =\n | SearchQuery\n | SearchResult\n | SearchShare\n | SearchSuggest\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search\n *\n * This function sets up the search functionality, including the underlying\n * web worker and all keyboard bindings.\n *\n * @param el - Search element\n * @param options - Options\n *\n * @returns Search component observable\n */\nexport function mountSearch(\n el: HTMLElement, { index$, keyboard$ }: MountOptions\n): Observable> {\n const config = configuration()\n try {\n const url = __search?.worker || config.search\n const worker = setupSearchWorker(url, index$)\n\n /* Retrieve query and result components */\n const query = getComponentElement(\"search-query\", el)\n const result = getComponentElement(\"search-result\", el)\n\n /* Re-emit query when search is ready */\n const { tx$, rx$ } = worker\n tx$\n .pipe(\n filter(isSearchQueryMessage),\n sample(rx$.pipe(filter(isSearchReadyMessage))),\n take(1)\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: go to first (best) result */\n case \"Enter\":\n if (active === query) {\n const anchors = new Map()\n for (const anchor of getElements(\n \":first-child [href]\", result\n )) {\n const article = anchor.firstElementChild!\n anchors.set(anchor, parseFloat(\n article.getAttribute(\"data-md-score\")!\n ))\n }\n\n /* Go to result with highest score, if any */\n if (anchors.size) {\n const [[best]] = [...anchors].sort(([, a], [, b]) => b - a)\n best.click()\n }\n\n /* Otherwise omit form submission */\n key.claim()\n }\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n query.blur()\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n query.focus()\n } else {\n const els = [query, ...getElements(\n \":not(details) > [href], summary, details[open] [href]\",\n result\n )]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n els[i].focus()\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n query.focus()\n }\n })\n\n /* Set up global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\"),\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n case \"/\":\n query.focus()\n query.select()\n\n /* Prevent scrolling of page */\n key.claim()\n break\n }\n })\n\n /* Create and return component */\n const query$ = mountSearchQuery(query, worker)\n const result$ = mountSearchResult(result, worker, { query$ })\n return merge(query$, result$)\n .pipe(\n mergeWith(\n\n /* Search sharing */\n ...getComponentElements(\"search-share\", el)\n .map(child => mountSearchShare(child, { query$ })),\n\n /* Search suggestions */\n ...getComponentElements(\"search-suggest\", el)\n .map(child => mountSearchSuggest(child, worker, { keyboard$ }))\n )\n )\n\n /* Gracefully handle broken search */\n } catch (err) {\n el.hidden = true\n return NEVER\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n ObservableInput,\n combineLatest,\n filter,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\nimport {\n SearchIndex,\n setupSearchHighlighter\n} from \"~/integrations\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlighting\n */\nexport interface SearchHighlight {\n nodes: Map /* Map of replacements */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search highlighting\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Search highlighting component observable\n */\nexport function mountSearchHiglight(\n el: HTMLElement, { index$, location$ }: MountOptions\n): Observable> {\n return combineLatest([\n index$,\n location$\n .pipe(\n startWith(getLocation()),\n filter(url => !!url.searchParams.get(\"h\"))\n )\n ])\n .pipe(\n map(([index, url]) => setupSearchHighlighter(index.config, true)(\n url.searchParams.get(\"h\")!\n )),\n map(fn => {\n const nodes = new Map()\n\n /* Traverse text nodes and collect matches */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode()) {\n if (node.parentElement?.offsetHeight) {\n const original = node.textContent!\n const replaced = fn(original)\n if (replaced.length > original.length)\n nodes.set(node as ChildNode, replaced)\n }\n }\n\n /* Replace original nodes with matches */\n for (const [node, text] of nodes) {\n const { childNodes } = h(\"span\", null, text)\n node.replaceWith(...Array.from(childNodes))\n }\n\n /* Return component */\n return { ref: el, nodes }\n })\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n defer,\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n take,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElement,\n getElementContainer,\n getElementOffset,\n getElementSize,\n getElements\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sidebar\n */\nexport interface Sidebar {\n height: number /* Sidebar height */\n locked: boolean /* Sidebar is locked */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { viewport$, main$ }: WatchOptions\n): Observable {\n const parent = el.parentElement!\n const adjust =\n parent.offsetTop -\n parent.parentElement!.offsetTop\n\n /* Compute the sidebar's available height and if it should be locked */\n return combineLatest([main$, viewport$])\n .pipe(\n map(([{ offset, height }, { offset: { y } }]) => {\n height = height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n return {\n height,\n locked: y >= offset + adjust\n }\n }),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.locked === b.locked\n ))\n )\n}\n\n/**\n * Mount sidebar\n *\n * This function doesn't set the height of the actual sidebar, but of its first\n * child \u2013 the `.md-sidebar__scrollwrap` element in order to mitigiate jittery\n * sidebars when the footer is scrolled into view. At some point we switched\n * from `absolute` / `fixed` positioning to `sticky` positioning, significantly\n * reducing jitter in some browsers (respectively Firefox and Safari) when\n * scrolling from the top. However, top-aligned sticky positioning means that\n * the sidebar snaps to the bottom when the end of the container is reached.\n * This is what leads to the mentioned jitter, as the sidebar's height may be\n * updated too slowly.\n *\n * This behaviour can be mitigiated by setting the height of the sidebar to `0`\n * while preserving the padding, and the height on its first element.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar component observable\n */\nexport function mountSidebar(\n el: HTMLElement, { header$, ...options }: MountOptions\n): Observable> {\n const inner = getElement(\".md-sidebar__scrollwrap\", el)\n const { y } = getElementOffset(inner)\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n auditTime(0, animationFrameScheduler),\n withLatestFrom(header$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ height }, { height: offset }]) {\n inner.style.height = `${height - 2 * y}px`\n el.style.top = `${offset}px`\n },\n\n /* Handle complete */\n complete() {\n inner.style.height = \"\"\n el.style.top = \"\"\n }\n })\n\n /* Bring active item into view on initial load */\n push$\n .pipe(\n observeOn(animationFrameScheduler),\n take(1)\n )\n .subscribe(() => {\n for (const item of getElements(\".md-nav__link--active[href]\", el)) {\n const container = getElementContainer(item)\n if (typeof container !== \"undefined\") {\n const offset = item.offsetTop - container.offsetTop\n const { height } = getElementSize(container)\n container.scrollTo({\n top: offset - height / 2\n })\n }\n }\n })\n\n /* Create and return component */\n return watchSidebar(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n zip\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * GitHub release (partial)\n */\ninterface Release {\n tag_name: string /* Tag name */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub repository facts\n *\n * @param user - GitHub user or organization\n * @param repo - GitHub repository\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n if (typeof repo !== \"undefined\") {\n const url = `https://api.github.com/repos/${user}/${repo}`\n return zip(\n\n /* Fetch version */\n requestJSON(`${url}/releases/latest`)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(release => ({\n version: release.tag_name\n })),\n defaultIfEmpty({})\n ),\n\n /* Fetch stars and forks */\n requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(info => ({\n stars: info.stargazers_count,\n forks: info.forks_count\n })),\n defaultIfEmpty({})\n )\n )\n .pipe(\n map(([release, info]) => ({ ...release, ...info }))\n )\n\n /* User or organization */\n } else {\n const url = `https://api.github.com/users/${user}`\n return requestJSON(url)\n .pipe(\n map(info => ({\n repositories: info.public_repos\n })),\n defaultIfEmpty({})\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab repository facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n const url = `https://${base}/api/v4/projects/${encodeURIComponent(project)}`\n return requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(({ star_count, forks_count }) => ({\n stars: star_count,\n forks: forks_count\n })),\n defaultIfEmpty({})\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable } from \"rxjs\"\n\nimport { fetchSourceFactsFromGitHub } from \"../github\"\nimport { fetchSourceFactsFromGitLab } from \"../gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository facts for repositories\n */\nexport interface RepositoryFacts {\n stars?: number /* Number of stars */\n forks?: number /* Number of forks */\n version?: string /* Latest version */\n}\n\n/**\n * Repository facts for organizations\n */\nexport interface OrganizationFacts {\n repositories?: number /* Number of repositories */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Repository facts\n */\nexport type SourceFacts =\n | RepositoryFacts\n | OrganizationFacts\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch repository facts\n *\n * @param url - Repository URL\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^/]+)\\/?([^/]+)?/i)!\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, slug] = url.match(/^.+?([^/]*gitlab[^/]+)\\/(.+?)\\/?$/i)!\n return fetchSourceFactsFromGitLab(base, slug)\n\n /* Everything else */\n default:\n return EMPTY\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n catchError,\n defer,\n filter,\n finalize,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\nimport { renderSourceFacts } from \"~/templates\"\n\nimport { Component } from \"../../_\"\nimport {\n SourceFacts,\n fetchSourceFacts\n} from \"../facts\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information\n */\nexport interface Source {\n facts: SourceFacts /* Repository facts */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information observable\n */\nlet fetch$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch repository information\n *\n * This function tries to read the repository facts from session storage, and\n * if unsuccessful, fetches them from the underlying provider.\n *\n * @param el - Repository information element\n *\n * @returns Repository information observable\n */\nexport function watchSource(\n el: HTMLAnchorElement\n): Observable {\n return fetch$ ||= defer(() => {\n const cached = __md_get(\"__source\", sessionStorage)\n if (cached)\n return of(cached)\n else\n return fetchSourceFacts(el.href)\n .pipe(\n tap(facts => __md_set(\"__source\", facts, sessionStorage))\n )\n })\n .pipe(\n catchError(() => EMPTY),\n filter(facts => Object.keys(facts).length > 0),\n map(facts => ({ facts })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount repository information\n *\n * @param el - Repository information element\n *\n * @returns Repository information component observable\n */\nexport function mountSource(\n el: HTMLAnchorElement\n): Observable> {\n const inner = getElement(\":scope > :last-child\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ facts }) => {\n inner.appendChild(renderSourceFacts(facts))\n inner.classList.add(\"md-source__repository--active\")\n })\n\n /* Create and return component */\n return watchSource(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation tabs\n */\nexport interface Tabs {\n hidden: boolean /* Navigation tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation tabs\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs observable\n */\nexport function watchTabs(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchElementSize(document.body)\n .pipe(\n switchMap(() => watchViewportAt(el, { header$, viewport$ })),\n map(({ offset: { y } }) => {\n return {\n hidden: y >= 10\n }\n }),\n distinctUntilKeyChanged(\"hidden\")\n )\n}\n\n/**\n * Mount navigation tabs\n *\n * This function hides the navigation tabs when scrolling past the threshold\n * and makes them reappear in a nice CSS animation when scrolling back up.\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs component observable\n */\nexport function mountTabs(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n },\n\n /* Handle complete */\n complete() {\n el.hidden = false\n }\n })\n\n /* Create and return component */\n return (\n feature(\"navigation.tabs.sticky\")\n ? of({ hidden: false })\n : watchTabs(el, options)\n )\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatestWith,\n debounceTime,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n repeat,\n scan,\n share,\n skip,\n startWith,\n switchMap,\n takeLast,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n getElement,\n getElementContainer,\n getElementSize,\n getElements,\n getLocation,\n getOptionalElement,\n watchElementSize\n} from \"~/browser\"\n\nimport {\n Component,\n getComponentElement\n} from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport interface TableOfContents {\n prev: HTMLAnchorElement[][] /* Anchors (previous) */\n next: HTMLAnchorElement[][] /* Anchors (next) */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch table of contents\n *\n * This is effectively a scroll spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the table of contents\n * needs to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents observable\n */\nexport function watchTableOfContents(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const table = new Map()\n\n /* Compute anchor-to-target mapping */\n const anchors = getElements(\"[href^=\\\\#]\", el)\n for (const anchor of anchors) {\n const id = decodeURIComponent(anchor.hash.substring(1))\n const target = getOptionalElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(anchor, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n map(({ height }) => {\n const main = getComponentElement(\"main\")\n const grid = getElement(\":scope > :first-child\", main)\n return height + 0.8 * (\n grid.offsetTop -\n main.offsetTop\n )\n }),\n share()\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = watchElementSize(document.body)\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n\n /* Build index to map anchor paths to vertical offsets */\n switchMap(body => defer(() => {\n let path: HTMLAnchorElement[] = []\n return of([...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n [...path = [...path, anchor]].reverse(),\n offset\n )\n }, new Map()))\n })\n .pipe(\n\n /* Sort index by vertical offset (see https://bit.ly/30z6QSO) */\n map(index => new Map([...index].sort(([, a], [, b]) => a - b))),\n combineLatestWith(adjust$),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(([index, adjust]) => viewport$\n .pipe(\n scan(([prev, next], { offset: { y }, size }) => {\n const last = y + size.height >= Math.floor(body.height)\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y || last) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y && !last) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => (\n a[0] === b[0] &&\n a[1] === b[1]\n ))\n )\n )\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents component observable\n */\nexport function mountTableOfContents(\n el: HTMLElement, { viewport$, header$, target$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe(({ prev, next }) => {\n\n /* Look forward */\n for (const [anchor] of next) {\n anchor.classList.remove(\"md-nav__link--passed\")\n anchor.classList.remove(\"md-nav__link--active\")\n }\n\n /* Look backward */\n for (const [index, [anchor]] of prev.entries()) {\n anchor.classList.add(\"md-nav__link--passed\")\n anchor.classList.toggle(\n \"md-nav__link--active\",\n index === prev.length - 1\n )\n }\n })\n\n /* Set up following, if enabled */\n if (feature(\"toc.follow\")) {\n\n /* Toggle smooth scrolling only for anchor clicks */\n const smooth$ = merge(\n viewport$.pipe(debounceTime(1), map(() => undefined)),\n viewport$.pipe(debounceTime(250), map(() => \"smooth\" as const))\n )\n\n /* Bring active anchor into view */\n push$\n .pipe(\n filter(({ prev }) => prev.length > 0),\n withLatestFrom(smooth$)\n )\n .subscribe(([{ prev }, behavior]) => {\n const [anchor] = prev[prev.length - 1]\n if (anchor.offsetHeight) {\n\n /* Retrieve overflowing container and scroll */\n const container = getElementContainer(anchor)\n if (typeof container !== \"undefined\") {\n const offset = anchor.offsetTop - container.offsetTop\n const { height } = getElementSize(container)\n container.scrollTo({\n top: offset - height / 2,\n behavior\n })\n }\n }\n })\n }\n\n /* Set up anchor tracking, if enabled */\n if (feature(\"navigation.tracking\"))\n viewport$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"offset\"),\n debounceTime(250),\n skip(1),\n takeUntil(target$.pipe(skip(1))),\n repeat({ delay: 250 }),\n withLatestFrom(push$)\n )\n .subscribe(([, { prev }]) => {\n const url = getLocation()\n\n /* Set hash fragment to active anchor */\n const anchor = prev[prev.length - 1]\n if (anchor && anchor.length) {\n const [active] = anchor\n const { hash } = new URL(active.href)\n if (url.hash !== hash) {\n url.hash = hash\n history.replaceState({}, \"\", `${url}`)\n }\n\n /* Reset anchor when at the top */\n } else {\n url.hash = \"\"\n history.replaceState({}, \"\", `${url}`)\n }\n })\n\n /* Create and return component */\n return watchTableOfContents(el, { viewport$, header$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n endWith,\n finalize,\n map,\n repeat,\n skip,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { Viewport } from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Back-to-top button\n */\nexport interface BackToTop {\n hidden: boolean /* Back-to-top button is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch back-to-top\n *\n * @param _el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top observable\n */\nexport function watchBackToTop(\n _el: HTMLElement, { viewport$, main$, target$ }: WatchOptions\n): Observable {\n\n /* Compute direction */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => a > b && b > 0),\n distinctUntilChanged()\n )\n\n /* Compute whether main area is active */\n const active$ = main$\n .pipe(\n map(({ active }) => active)\n )\n\n /* Compute threshold for hiding */\n return combineLatest([active$, direction$])\n .pipe(\n map(([active, direction]) => !(active && direction)),\n distinctUntilChanged(),\n takeUntil(target$.pipe(skip(1))),\n endWith(true),\n repeat({ delay: 250 }),\n map(hidden => ({ hidden }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount back-to-top\n *\n * @param el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top component observable\n */\nexport function mountBackToTop(\n el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n if (hidden) {\n el.setAttribute(\"tabindex\", \"-1\")\n el.blur()\n } else {\n el.removeAttribute(\"tabindex\")\n }\n },\n\n /* Handle complete */\n complete() {\n el.style.top = \"\"\n el.hidden = true\n el.removeAttribute(\"tabindex\")\n }\n })\n\n /* Watch header height */\n header$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"height\")\n )\n .subscribe(({ height }) => {\n el.style.top = `${height + 16}px`\n })\n\n /* Create and return component */\n return watchBackToTop(el, { viewport$, main$, target$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n takeWhile,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch indeterminate checkboxes\n *\n * This function replaces the indeterminate \"pseudo state\" with the actual\n * indeterminate state, which is used to keep navigation always expanded.\n *\n * @param options - Options\n */\nexport function patchIndeterminate(\n { document$, tablet$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\n // @todo `data-md-state` is deprecated and removed in v9\n \".md-toggle--indeterminate, [data-md-state=indeterminate]\"\n )),\n tap(el => {\n el.indeterminate = true\n el.checked = false\n }),\n mergeMap(el => fromEvent(el, \"change\")\n .pipe(\n takeWhile(() => el.classList.contains(\"md-toggle--indeterminate\")),\n map(() => el)\n )\n ),\n withLatestFrom(tablet$)\n )\n .subscribe(([el, tablet]) => {\n el.classList.remove(\"md-toggle--indeterminate\")\n if (tablet)\n el.checked = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @returns Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\"[data-md-scrollfix]\")),\n tap(el => el.removeAttribute(\"data-md-scrollfix\")),\n filter(isAppleDevice),\n mergeMap(el => fromEvent(el, \"touchstart\")\n .pipe(\n map(() => el)\n )\n )\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n delay,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchToggle\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch the document body to lock when search is open\n *\n * For mobile and tablet viewports, the search is rendered full screen, which\n * leads to scroll leaking when at the top or bottom of the search result. This\n * function locks the body when the search is in full screen mode, and restores\n * the scroll position when leaving.\n *\n * @param options - Options\n */\nexport function patchScrolllock(\n { viewport$, tablet$ }: PatchOptions\n): void {\n combineLatest([watchToggle(\"search\"), tablet$])\n .pipe(\n map(([active, tablet]) => active && !tablet),\n switchMap(active => of(active)\n .pipe(\n delay(active ? 400 : 100)\n )\n ),\n withLatestFrom(viewport$)\n )\n .subscribe(([active, { offset: { y }}]) => {\n if (active) {\n document.body.setAttribute(\"data-md-scrolllock\", \"\")\n document.body.style.top = `-${y}px`\n } else {\n const value = -1 * parseInt(document.body.style.top, 10)\n document.body.removeAttribute(\"data-md-scrolllock\")\n document.body.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Polyfills\n * ------------------------------------------------------------------------- */\n\n/* Polyfill `Object.entries` */\nif (!Object.entries)\n Object.entries = function (obj: object) {\n const data: [string, string][] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push([key, obj[key]])\n\n /* Return entries */\n return data\n }\n\n/* Polyfill `Object.values` */\nif (!Object.values)\n Object.values = function (obj: object) {\n const data: string[] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push(obj[key])\n\n /* Return values */\n return data\n }\n\n/* ------------------------------------------------------------------------- */\n\n/* Polyfills for `Element` */\nif (typeof Element !== \"undefined\") {\n\n /* Polyfill `Element.scrollTo` */\n if (!Element.prototype.scrollTo)\n Element.prototype.scrollTo = function (\n x?: ScrollToOptions | number, y?: number\n ): void {\n if (typeof x === \"object\") {\n this.scrollLeft = x.left!\n this.scrollTop = x.top!\n } else {\n this.scrollLeft = x!\n this.scrollTop = y!\n }\n }\n\n /* Polyfill `Element.replaceWith` */\n if (!Element.prototype.replaceWith)\n Element.prototype.replaceWith = function (\n ...nodes: Array\n ): void {\n const parent = this.parentNode\n if (parent) {\n if (nodes.length === 0)\n parent.removeChild(this)\n\n /* Replace children and create text nodes */\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i]\n if (typeof node !== \"object\")\n node = document.createTextNode(node)\n else if (node.parentNode)\n node.parentNode.removeChild(node)\n\n /* Replace child or insert before previous sibling */\n if (!i)\n parent.replaceChild(node, this)\n else\n parent.insertBefore(this.previousSibling!, node)\n }\n }\n }\n}\n"], + "mappings": "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", + "names": ["require_focus_visible", "__commonJSMin", "exports", "module", "global", "factory", "applyFocusVisiblePolyfill", "scope", "hadKeyboardEvent", "hadFocusVisibleRecently", "hadFocusVisibleRecentlyTimeout", "inputTypesAllowlist", "isValidFocusTarget", "el", "focusTriggersKeyboardModality", "type", "tagName", "addFocusVisibleClass", "removeFocusVisibleClass", "onKeyDown", "e", "onPointerDown", "onFocus", "onBlur", "onVisibilityChange", "addInitialPointerMoveListeners", "onInitialPointerMove", "removeInitialPointerMoveListeners", "event", "error", "require_url_polyfill", "__commonJSMin", "exports", "global", "checkIfIteratorIsSupported", "error", "iteratorSupported", "createIterator", "items", "iterator", "value", "serializeParam", "deserializeParam", "polyfillURLSearchParams", "URLSearchParams", "searchString", "typeofSearchString", "_this", "name", "i", "entry", "key", "proto", "callback", "thisArg", "entries", "searchArray", "checkIfURLSearchParamsSupported", "e", "a", "b", "keys", "attributes", "attribute", "checkIfURLIsSupported", "u", "polyfillURL", "_URL", "URL", "url", "base", "doc", "baseElement", "err", "anchorElement", "inputElement", "searchParams", "enableSearchUpdate", "enableSearchParamsUpdate", "methodName", "method", "search", "linkURLWithAnchorAttribute", "attributeName", "expectedPort", "addPortToOrigin", "blob", "getOrigin", "require_tslib", "__commonJSMin", "exports", "module", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "__createBinding", "factory", "root", "createExporter", "previous", "id", "v", "exporter", "extendStatics", "d", "b", "p", "__", "t", "s", "n", "e", "i", "decorators", "target", "key", "desc", "c", "r", "paramIndex", "decorator", "metadataKey", "metadataValue", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "rejected", "result", "body", "_", "f", "y", "g", "verb", "op", "m", "o", "k", "k2", "ar", "error", "il", "a", "j", "jl", "to", "from", "pack", "l", "q", "resume", "settle", "fulfill", "cooked", "raw", "__setModuleDefault", "mod", "receiver", "state", "kind", "require_clipboard", "__commonJSMin", "exports", "module", "root", "factory", "__webpack_modules__", "__unused_webpack_module", "__webpack_exports__", "__webpack_require__", "clipboard", "tiny_emitter", "tiny_emitter_default", "listen", "listen_default", "src_select", "select_default", "command", "type", "err", "ClipboardActionCut", "target", "selectedText", "actions_cut", "createFakeElement", "value", "isRTL", "fakeElement", "yPosition", "fakeCopyAction", "options", "ClipboardActionCopy", "actions_copy", "_typeof", "obj", "ClipboardActionDefault", "_options$action", "action", "container", "text", "actions_default", "clipboard_typeof", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "i", "descriptor", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "o", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "e", "getAttributeValue", "suffix", "element", "attribute", "Clipboard", "_Emitter", "_super", "trigger", "_this", "_this2", "selector", "actions", "support", "DOCUMENT_NODE_TYPE", "proto", "closest", "__unused_webpack_exports", "_delegate", "callback", "useCapture", "listenerFn", "listener", "delegate", "elements", "is", "listenNode", "listenNodeList", "listenSelector", "node", "nodeList", "select", "isReadOnly", "selection", "range", "E", "name", "ctx", "data", "evtArr", "len", "evts", "liveEvents", "__webpack_module_cache__", "moduleId", "getter", "definition", "key", "prop", "require_escape_html", "__commonJSMin", "exports", "module", "matchHtmlRegExp", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "r", "a", "e", "import_focus_visible", "n", "t", "s", "r", "o", "u", "i", "a", "e", "c", "import_url_polyfill", "import_tslib", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__createBinding", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "tslib", "isFunction", "value", "createErrorClass", "createImpl", "_super", "instance", "ctorFunc", "UnsubscriptionError", "createErrorClass", "_super", "errors", "err", "i", "arrRemove", "arr", "item", "index", "Subscription", "initialTeardown", "errors", "_parentage", "_parentage_1", "__values", "_parentage_1_1", "parent_1", "initialFinalizer", "isFunction", "e", "UnsubscriptionError", "_finalizers", "_finalizers_1", "_finalizers_1_1", "finalizer", "execFinalizer", "err", "__spreadArray", "__read", "teardown", "_a", "parent", "arrRemove", "empty", "EMPTY_SUBSCRIPTION", "Subscription", "isSubscription", "value", "isFunction", "execFinalizer", "finalizer", "config", "timeoutProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "reportUnhandledError", "err", "timeoutProvider", "onUnhandledError", "config", "noop", "COMPLETE_NOTIFICATION", "createNotification", "errorNotification", "error", "nextNotification", "value", "kind", "context", "errorContext", "cb", "config", "isRoot", "_a", "errorThrown", "error", "captureError", "err", "Subscriber", "_super", "__extends", "destination", "_this", "isSubscription", "EMPTY_OBSERVER", "next", "error", "complete", "SafeSubscriber", "value", "handleStoppedNotification", "nextNotification", "err", "errorNotification", "COMPLETE_NOTIFICATION", "Subscription", "_bind", "bind", "fn", "thisArg", "ConsumerObserver", "partialObserver", "value", "error", "handleUnhandledError", "err", "SafeSubscriber", "_super", "__extends", "observerOrNext", "complete", "_this", "isFunction", "context_1", "config", "Subscriber", "handleUnhandledError", "error", "config", "captureError", "reportUnhandledError", "defaultErrorHandler", "err", "handleStoppedNotification", "notification", "subscriber", "onStoppedNotification", "timeoutProvider", "EMPTY_OBSERVER", "noop", "observable", "identity", "x", "pipe", "fns", "_i", "pipeFromArray", "identity", "input", "prev", "fn", "Observable", "subscribe", "operator", "observable", "observerOrNext", "error", "complete", "_this", "subscriber", "isSubscriber", "SafeSubscriber", "errorContext", "_a", "source", "sink", "err", "next", "promiseCtor", "getPromiseCtor", "resolve", "reject", "value", "operations", "_i", "pipeFromArray", "x", "getPromiseCtor", "promiseCtor", "_a", "config", "isObserver", "value", "isFunction", "isSubscriber", "Subscriber", "isSubscription", "hasLift", "source", "isFunction", "operate", "init", "liftedSource", "err", "createOperatorSubscriber", "destination", "onNext", "onComplete", "onError", "onFinalize", "OperatorSubscriber", "_super", "__extends", "shouldUnsubscribe", "_this", "value", "err", "closed_1", "_a", "Subscriber", "animationFrameProvider", "callback", "request", "cancel", "delegate", "handle", "timestamp", "Subscription", "args", "_i", "__spreadArray", "__read", "ObjectUnsubscribedError", "createErrorClass", "_super", "Subject", "_super", "__extends", "_this", "operator", "subject", "AnonymousSubject", "ObjectUnsubscribedError", "value", "errorContext", "_b", "__values", "_c", "observer", "err", "observers", "_a", "subscriber", "hasError", "isStopped", "EMPTY_SUBSCRIPTION", "Subscription", "arrRemove", "thrownError", "observable", "Observable", "destination", "source", "AnonymousSubject", "_super", "__extends", "destination", "source", "_this", "value", "_b", "_a", "err", "subscriber", "EMPTY_SUBSCRIPTION", "Subject", "dateTimestampProvider", "ReplaySubject", "_super", "__extends", "_bufferSize", "_windowTime", "_timestampProvider", "dateTimestampProvider", "_this", "value", "_a", "isStopped", "_buffer", "_infiniteTimeWindow", "subscriber", "subscription", "copy", "i", "adjustedBufferSize", "now", "last", "Subject", "Action", "_super", "__extends", "scheduler", "work", "state", "delay", "Subscription", "intervalProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "AsyncAction", "_super", "__extends", "scheduler", "work", "_this", "state", "delay", "id", "_id", "intervalProvider", "_scheduler", "error", "_delay", "errored", "errorValue", "e", "_a", "actions", "arrRemove", "Action", "Scheduler", "schedulerActionCtor", "now", "work", "delay", "state", "dateTimestampProvider", "AsyncScheduler", "_super", "__extends", "SchedulerAction", "now", "Scheduler", "_this", "action", "actions", "error", "asyncScheduler", "AsyncScheduler", "AsyncAction", "async", "AnimationFrameAction", "_super", "__extends", "scheduler", "work", "_this", "id", "delay", "animationFrameProvider", "action", "AsyncAction", "AnimationFrameScheduler", "_super", "__extends", "action", "flushId", "actions", "error", "AsyncScheduler", "animationFrameScheduler", "AnimationFrameScheduler", "AnimationFrameAction", "EMPTY", "Observable", "subscriber", "isScheduler", "value", "isFunction", "last", "arr", "popResultSelector", "args", "isFunction", "popScheduler", "isScheduler", "popNumber", "defaultValue", "isArrayLike", "x", "isPromise", "value", "isFunction", "isInteropObservable", "input", "isFunction", "observable", "isAsyncIterable", "obj", "isFunction", "createInvalidObservableTypeError", "input", "getSymbolIterator", "iterator", "isIterable", "input", "isFunction", "iterator", "readableStreamLikeToAsyncGenerator", "readableStream", "reader", "__await", "_a", "_b", "value", "done", "isReadableStreamLike", "obj", "isFunction", "innerFrom", "input", "Observable", "isInteropObservable", "fromInteropObservable", "isArrayLike", "fromArrayLike", "isPromise", "fromPromise", "isAsyncIterable", "fromAsyncIterable", "isIterable", "fromIterable", "isReadableStreamLike", "fromReadableStreamLike", "createInvalidObservableTypeError", "obj", "subscriber", "obs", "observable", "isFunction", "array", "i", "promise", "value", "err", "reportUnhandledError", "iterable", "iterable_1", "__values", "iterable_1_1", "asyncIterable", "process", "readableStream", "readableStreamLikeToAsyncGenerator", "asyncIterable_1", "__asyncValues", "asyncIterable_1_1", "executeSchedule", "parentSubscription", "scheduler", "work", "delay", "repeat", "scheduleSubscription", "observeOn", "scheduler", "delay", "operate", "source", "subscriber", "createOperatorSubscriber", "value", "executeSchedule", "err", "subscribeOn", "scheduler", "delay", "operate", "source", "subscriber", "scheduleObservable", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "schedulePromise", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "scheduleArray", "input", "scheduler", "Observable", "subscriber", "i", "scheduleIterable", "input", "scheduler", "Observable", "subscriber", "iterator", "executeSchedule", "value", "done", "_a", "err", "isFunction", "scheduleAsyncIterable", "input", "scheduler", "Observable", "subscriber", "executeSchedule", "iterator", "result", "scheduleReadableStreamLike", "input", "scheduler", "scheduleAsyncIterable", "readableStreamLikeToAsyncGenerator", "scheduled", "input", "scheduler", "isInteropObservable", "scheduleObservable", "isArrayLike", "scheduleArray", "isPromise", "schedulePromise", "isAsyncIterable", "scheduleAsyncIterable", "isIterable", "scheduleIterable", "isReadableStreamLike", "scheduleReadableStreamLike", "createInvalidObservableTypeError", "from", "input", "scheduler", "scheduled", "innerFrom", "of", "args", "_i", "scheduler", "popScheduler", "from", "throwError", "errorOrErrorFactory", "scheduler", "errorFactory", "isFunction", "init", "subscriber", "Observable", "isValidDate", "value", "map", "project", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "isArray", "callOrApply", "fn", "args", "__spreadArray", "__read", "mapOneOrManyArgs", "map", "isArray", "getPrototypeOf", "objectProto", "getKeys", "argsArgArrayOrObject", "args", "first_1", "isPOJO", "keys", "key", "obj", "createObject", "keys", "values", "result", "key", "i", "combineLatest", "args", "_i", "scheduler", "popScheduler", "resultSelector", "popResultSelector", "_a", "argsArgArrayOrObject", "observables", "keys", "from", "result", "Observable", "combineLatestInit", "values", "createObject", "identity", "mapOneOrManyArgs", "valueTransform", "subscriber", "maybeSchedule", "length", "active", "remainingFirstValues", "i", "source", "hasFirstValue", "createOperatorSubscriber", "value", "execute", "subscription", "executeSchedule", "mergeInternals", "source", "subscriber", "project", "concurrent", "onBeforeNext", "expand", "innerSubScheduler", "additionalFinalizer", "buffer", "active", "index", "isComplete", "checkComplete", "outerNext", "value", "doInnerSub", "innerComplete", "innerFrom", "createOperatorSubscriber", "innerValue", "bufferedValue", "executeSchedule", "err", "mergeMap", "project", "resultSelector", "concurrent", "isFunction", "a", "i", "map", "b", "ii", "innerFrom", "operate", "source", "subscriber", "mergeInternals", "mergeAll", "concurrent", "mergeMap", "identity", "concatAll", "mergeAll", "concat", "args", "_i", "concatAll", "from", "popScheduler", "defer", "observableFactory", "Observable", "subscriber", "innerFrom", "nodeEventEmitterMethods", "eventTargetMethods", "jqueryMethods", "fromEvent", "target", "eventName", "options", "resultSelector", "isFunction", "mapOneOrManyArgs", "_a", "__read", "isEventTarget", "methodName", "handler", "isNodeStyleEventEmitter", "toCommonHandlerRegistry", "isJQueryStyleEventEmitter", "add", "remove", "isArrayLike", "mergeMap", "subTarget", "innerFrom", "Observable", "subscriber", "args", "_i", "fromEventPattern", "addHandler", "removeHandler", "resultSelector", "mapOneOrManyArgs", "Observable", "subscriber", "handler", "e", "_i", "retValue", "isFunction", "timer", "dueTime", "intervalOrScheduler", "scheduler", "async", "intervalDuration", "isScheduler", "Observable", "subscriber", "due", "isValidDate", "n", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "sources", "innerFrom", "mergeAll", "from", "EMPTY", "NEVER", "Observable", "noop", "isArray", "argsOrArgArray", "args", "filter", "predicate", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "zip", "args", "_i", "resultSelector", "popResultSelector", "sources", "argsOrArgArray", "Observable", "subscriber", "buffers", "completed", "sourceIndex", "innerFrom", "createOperatorSubscriber", "value", "buffer", "result", "__spreadArray", "__read", "i", "EMPTY", "audit", "durationSelector", "operate", "source", "subscriber", "hasValue", "lastValue", "durationSubscriber", "isComplete", "endDuration", "value", "cleanupDuration", "createOperatorSubscriber", "innerFrom", "auditTime", "duration", "scheduler", "asyncScheduler", "audit", "timer", "bufferCount", "bufferSize", "startBufferEvery", "operate", "source", "subscriber", "buffers", "count", "createOperatorSubscriber", "value", "toEmit", "buffers_1", "__values", "buffers_1_1", "buffer", "toEmit_1", "toEmit_1_1", "arrRemove", "buffers_2", "buffers_2_1", "catchError", "selector", "operate", "source", "subscriber", "innerSub", "syncUnsub", "handledResult", "createOperatorSubscriber", "err", "innerFrom", "scanInternals", "accumulator", "seed", "hasSeed", "emitOnNext", "emitBeforeComplete", "source", "subscriber", "hasState", "state", "index", "createOperatorSubscriber", "value", "i", "combineLatest", "args", "_i", "resultSelector", "popResultSelector", "pipe", "__spreadArray", "__read", "mapOneOrManyArgs", "operate", "source", "subscriber", "combineLatestInit", "argsOrArgArray", "combineLatestWith", "otherSources", "_i", "combineLatest", "__spreadArray", "__read", "concatMap", "project", "resultSelector", "isFunction", "mergeMap", "debounceTime", "dueTime", "scheduler", "asyncScheduler", "operate", "source", "subscriber", "activeTask", "lastValue", "lastTime", "emit", "value", "emitWhenIdle", "targetTime", "now", "createOperatorSubscriber", "defaultIfEmpty", "defaultValue", "operate", "source", "subscriber", "hasValue", "createOperatorSubscriber", "value", "take", "count", "EMPTY", "operate", "source", "subscriber", "seen", "createOperatorSubscriber", "value", "ignoreElements", "operate", "source", "subscriber", "createOperatorSubscriber", "noop", "mapTo", "value", "map", "delayWhen", "delayDurationSelector", "subscriptionDelay", "source", "concat", "take", "ignoreElements", "mergeMap", "value", "index", "mapTo", "delay", "due", "scheduler", "asyncScheduler", "duration", "timer", "delayWhen", "distinctUntilChanged", "comparator", "keySelector", "identity", "defaultCompare", "operate", "source", "subscriber", "previousKey", "first", "createOperatorSubscriber", "value", "currentKey", "a", "b", "distinctUntilKeyChanged", "key", "compare", "distinctUntilChanged", "x", "y", "endWith", "values", "_i", "source", "concat", "of", "__spreadArray", "__read", "finalize", "callback", "operate", "source", "subscriber", "takeLast", "count", "EMPTY", "operate", "source", "subscriber", "buffer", "createOperatorSubscriber", "value", "buffer_1", "__values", "buffer_1_1", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "argsOrArgArray", "operate", "source", "subscriber", "mergeAll", "from", "__spreadArray", "__read", "mergeWith", "otherSources", "_i", "merge", "__spreadArray", "__read", "repeat", "countOrConfig", "count", "delay", "_a", "EMPTY", "operate", "source", "subscriber", "soFar", "sourceSub", "resubscribe", "notifier", "timer", "innerFrom", "notifierSubscriber_1", "createOperatorSubscriber", "subscribeToSource", "syncUnsub", "sample", "notifier", "operate", "source", "subscriber", "hasValue", "lastValue", "createOperatorSubscriber", "value", "noop", "scan", "accumulator", "seed", "operate", "scanInternals", "share", "options", "_a", "connector", "Subject", "_b", "resetOnError", "_c", "resetOnComplete", "_d", "resetOnRefCountZero", "wrapperSource", "connection", "resetConnection", "subject", "refCount", "hasCompleted", "hasErrored", "cancelReset", "reset", "resetAndUnsubscribe", "conn", "operate", "source", "subscriber", "dest", "handleReset", "SafeSubscriber", "value", "err", "innerFrom", "on", "args", "_i", "onSubscriber", "__spreadArray", "__read", "shareReplay", "configOrBufferSize", "windowTime", "scheduler", "bufferSize", "refCount", "_a", "_b", "_c", "share", "ReplaySubject", "skip", "count", "filter", "_", "index", "skipUntil", "notifier", "operate", "source", "subscriber", "taking", "skipSubscriber", "createOperatorSubscriber", "noop", "innerFrom", "value", "startWith", "values", "_i", "scheduler", "popScheduler", "operate", "source", "subscriber", "concat", "switchMap", "project", "resultSelector", "operate", "source", "subscriber", "innerSubscriber", "index", "isComplete", "checkComplete", "createOperatorSubscriber", "value", "innerIndex", "outerIndex", "innerFrom", "innerValue", "takeUntil", "notifier", "operate", "source", "subscriber", "innerFrom", "createOperatorSubscriber", "noop", "takeWhile", "predicate", "inclusive", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "result", "tap", "observerOrNext", "error", "complete", "tapObserver", "isFunction", "operate", "source", "subscriber", "_a", "isUnsub", "createOperatorSubscriber", "value", "err", "_b", "identity", "defaultThrottleConfig", "throttle", "durationSelector", "config", "operate", "source", "subscriber", "leading", "trailing", "hasValue", "sendValue", "throttled", "isComplete", "endThrottling", "send", "cleanupThrottling", "startThrottle", "value", "innerFrom", "createOperatorSubscriber", "throttleTime", "duration", "scheduler", "config", "asyncScheduler", "defaultThrottleConfig", "duration$", "timer", "throttle", "withLatestFrom", "inputs", "_i", "project", "popResultSelector", "operate", "source", "subscriber", "len", "otherValues", "hasValue", "ready", "i", "innerFrom", "createOperatorSubscriber", "value", "identity", "noop", "values", "__spreadArray", "__read", "zip", "sources", "_i", "operate", "source", "subscriber", "__spreadArray", "__read", "zipWith", "otherInputs", "_i", "zip", "__spreadArray", "__read", "watchDocument", "document$", "ReplaySubject", "fromEvent", "getElements", "selector", "node", "getElement", "el", "getOptionalElement", "getActiveElement", "watchElementFocus", "el", "merge", "fromEvent", "debounceTime", "map", "active", "getActiveElement", "startWith", "distinctUntilChanged", "getElementOffset", "el", "watchElementOffset", "merge", "fromEvent", "auditTime", "animationFrameScheduler", "map", "startWith", "getElementContentOffset", "el", "watchElementContentOffset", "merge", "fromEvent", "auditTime", "animationFrameScheduler", "map", "startWith", "MapShim", "getIndex", "arr", "key", "result", "entry", "index", "class_1", "value", "entries", "callback", "ctx", "_i", "_a", "isBrowser", "global$1", "requestAnimationFrame$1", "trailingTimeout", "throttle", "delay", "leadingCall", "trailingCall", "lastCallTime", "resolvePending", "proxy", "timeoutCallback", "timeStamp", "REFRESH_DELAY", "transitionKeys", "mutationObserverSupported", "ResizeObserverController", "observer", "observers", "changesDetected", "activeObservers", "_b", "propertyName", "isReflowProperty", "defineConfigurable", "target", "props", "getWindowOf", "ownerGlobal", "emptyRect", "createRectInit", "toFloat", "getBordersSize", "styles", "positions", "size", "position", "getPaddings", "paddings", "positions_1", "getSVGContentRect", "bbox", "getHTMLElementContentRect", "clientWidth", "clientHeight", "horizPad", "vertPad", "width", "height", "isDocumentElement", "vertScrollbar", "horizScrollbar", "isSVGGraphicsElement", "getContentRect", "createReadOnlyRect", "x", "y", "Constr", "rect", "ResizeObservation", "ResizeObserverEntry", "rectInit", "contentRect", "ResizeObserverSPI", "controller", "callbackCtx", "observations", "_this", "observation", "ResizeObserver", "method", "ResizeObserver_es_default", "entry$", "Subject", "observer$", "defer", "of", "ResizeObserver_es_default", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "getElementSize", "el", "watchElementSize", "tap", "filter", "target", "map", "startWith", "getElementContentSize", "el", "getElementContainer", "parent", "entry$", "Subject", "observer$", "defer", "of", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "watchElementVisibility", "el", "tap", "filter", "target", "map", "isIntersecting", "watchElementBoundary", "threshold", "watchElementContentOffset", "y", "visible", "getElementSize", "content", "getElementContentSize", "distinctUntilChanged", "toggles", "getElement", "getToggle", "name", "setToggle", "value", "watchToggle", "el", "fromEvent", "map", "startWith", "isSusceptibleToKeyboard", "el", "type", "watchKeyboard", "fromEvent", "filter", "ev", "map", "getToggle", "mode", "active", "getActiveElement", "share", "getLocation", "setLocation", "url", "watchLocation", "Subject", "appendChild", "el", "child", "node", "h", "tag", "attributes", "children", "attr", "truncate", "value", "n", "i", "round", "digits", "getLocationHash", "setLocationHash", "hash", "el", "h", "ev", "watchLocationHash", "fromEvent", "map", "startWith", "filter", "shareReplay", "watchLocationTarget", "id", "getOptionalElement", "watchMedia", "query", "media", "fromEventPattern", "next", "startWith", "watchPrint", "merge", "fromEvent", "map", "at", "query$", "factory", "switchMap", "active", "EMPTY", "request", "url", "options", "from", "catchError", "EMPTY", "switchMap", "res", "throwError", "of", "requestJSON", "shareReplay", "requestXML", "dom", "map", "watchScript", "src", "script", "h", "defer", "merge", "fromEvent", "switchMap", "throwError", "map", "finalize", "take", "getViewportOffset", "watchViewportOffset", "merge", "fromEvent", "map", "startWith", "getViewportSize", "watchViewportSize", "fromEvent", "map", "startWith", "watchViewport", "combineLatest", "watchViewportOffset", "watchViewportSize", "map", "offset", "size", "shareReplay", "watchViewportAt", "el", "viewport$", "header$", "size$", "distinctUntilKeyChanged", "offset$", "combineLatest", "map", "getElementOffset", "height", "offset", "size", "x", "y", "watchWorker", "worker", "tx$", "rx$", "fromEvent", "map", "data", "throttle", "tap", "message", "switchMap", "share", "script", "getElement", "config", "getLocation", "configuration", "feature", "flag", "translation", "key", "value", "getComponentElement", "type", "node", "getElement", "getComponentElements", "getElements", "watchAnnounce", "el", "button", "getElement", "fromEvent", "map", "content", "mountAnnounce", "feature", "EMPTY", "defer", "push$", "Subject", "startWith", "hash", "_a", "tap", "state", "finalize", "__spreadValues", "watchConsent", "el", "target$", "map", "target", "mountConsent", "options", "internal$", "Subject", "hidden", "tap", "state", "finalize", "__spreadValues", "import_clipboard", "renderTooltip", "id", "h", "renderAnnotation", "id", "prefix", "anchor", "h", "renderTooltip", "renderClipboardButton", "id", "h", "translation", "renderSearchDocument", "document", "flag", "parent", "teaser", "missing", "key", "list", "h", "url", "feature", "match", "highlight", "value", "tags", "configuration", "truncate", "tag", "id", "type", "translation", "renderSearchResultItem", "result", "threshold", "docs", "doc", "article", "index", "best", "more", "children", "section", "renderSourceFacts", "facts", "h", "key", "value", "round", "renderTabbedControl", "type", "classes", "h", "renderTable", "table", "h", "renderVersion", "version", "config", "configuration", "url", "h", "renderVersionSelector", "versions", "active", "translation", "watchAnnotation", "el", "container", "offset$", "defer", "combineLatest", "watchElementOffset", "watchElementContentOffset", "map", "x", "y", "scroll", "width", "height", "getElementSize", "watchElementFocus", "switchMap", "active", "offset", "take", "mountAnnotation", "target$", "tooltip", "index", "push$", "Subject", "done$", "takeLast", "watchElementVisibility", "takeUntil", "visible", "merge", "filter", "debounceTime", "auditTime", "animationFrameScheduler", "throttleTime", "origin", "fromEvent", "ev", "withLatestFrom", "_a", "parent", "getActiveElement", "target", "delay", "tap", "state", "finalize", "__spreadValues", "findAnnotationMarkers", "container", "markers", "el", "getElements", "nodes", "it", "node", "text", "match", "id", "force", "marker", "swap", "source", "target", "mountAnnotationList", "target$", "print$", "parent", "prefix", "annotations", "getOptionalElement", "renderAnnotation", "EMPTY", "defer", "done$", "Subject", "pairs", "annotation", "getElement", "takeUntil", "takeLast", "active", "inner", "child", "merge", "mountAnnotation", "finalize", "share", "sequence", "findCandidateList", "el", "sibling", "watchCodeBlock", "watchElementSize", "map", "width", "getElementContentSize", "distinctUntilKeyChanged", "mountCodeBlock", "options", "hover", "factory$", "defer", "push$", "Subject", "scrollable", "ClipboardJS", "parent", "renderClipboardButton", "container", "list", "feature", "annotations$", "mountAnnotationList", "tap", "state", "finalize", "__spreadValues", "mergeWith", "height", "distinctUntilChanged", "switchMap", "active", "EMPTY", "watchElementVisibility", "filter", "visible", "take", "mermaid$", "sequence", "fetchScripts", "watchScript", "of", "mountMermaid", "el", "tap", "mermaid_default", "map", "shareReplay", "id", "host", "h", "svg", "shadow", "watchDetails", "el", "target$", "print$", "open", "merge", "map", "target", "filter", "details", "active", "tap", "mountDetails", "options", "defer", "push$", "Subject", "action", "reveal", "state", "finalize", "__spreadValues", "sentinel", "h", "mountDataTable", "el", "renderTable", "of", "watchContentTabs", "el", "inputs", "getElements", "initial", "input", "merge", "fromEvent", "map", "getElement", "startWith", "active", "mountContentTabs", "prev", "renderTabbedControl", "next", "container", "defer", "push$", "Subject", "done$", "takeLast", "combineLatest", "watchElementSize", "auditTime", "animationFrameScheduler", "takeUntil", "size", "offset", "getElementOffset", "width", "getElementSize", "content", "getElementContentOffset", "watchElementContentOffset", "getElementContentSize", "direction", "feature", "skip", "tab", "set", "tabs", "tap", "state", "finalize", "__spreadValues", "subscribeOn", "asyncScheduler", "mountContent", "el", "target$", "print$", "merge", "getElements", "child", "mountCodeBlock", "mountMermaid", "mountDataTable", "mountDetails", "mountContentTabs", "watchDialog", "_el", "alert$", "switchMap", "message", "merge", "of", "delay", "map", "active", "mountDialog", "el", "options", "inner", "getElement", "defer", "push$", "Subject", "tap", "state", "finalize", "__spreadValues", "isHidden", "viewport$", "feature", "of", "direction$", "map", "y", "bufferCount", "a", "b", "distinctUntilKeyChanged", "hidden$", "combineLatest", "filter", "offset", "direction", "distinctUntilChanged", "search$", "watchToggle", "search", "switchMap", "active", "startWith", "watchHeader", "el", "options", "defer", "watchElementSize", "height", "hidden", "shareReplay", "mountHeader", "header$", "main$", "push$", "Subject", "done$", "takeLast", "combineLatestWith", "takeUntil", "state", "__spreadValues", "watchHeaderTitle", "el", "viewport$", "header$", "watchViewportAt", "map", "y", "height", "getElementSize", "distinctUntilKeyChanged", "mountHeaderTitle", "options", "defer", "push$", "Subject", "active", "heading", "getOptionalElement", "EMPTY", "tap", "state", "finalize", "__spreadValues", "watchMain", "el", "viewport$", "header$", "adjust$", "map", "height", "distinctUntilChanged", "border$", "switchMap", "watchElementSize", "distinctUntilKeyChanged", "combineLatest", "header", "top", "bottom", "y", "a", "b", "watchPalette", "inputs", "current", "input", "of", "mergeMap", "fromEvent", "map", "startWith", "shareReplay", "mountPalette", "el", "defer", "push$", "Subject", "palette", "key", "value", "index", "label", "observeOn", "asyncScheduler", "getElements", "tap", "state", "finalize", "__spreadValues", "import_clipboard", "extract", "el", "text", "setupClipboardJS", "alert$", "ClipboardJS", "Observable", "subscriber", "getElement", "ev", "tap", "map", "translation", "preprocess", "urls", "root", "next", "a", "b", "url", "index", "fetchSitemap", "base", "cached", "of", "config", "configuration", "requestXML", "map", "sitemap", "getElements", "node", "catchError", "EMPTY", "defaultIfEmpty", "tap", "setupInstantLoading", "document$", "location$", "viewport$", "config", "configuration", "fromEvent", "favicon", "getOptionalElement", "push$", "fetchSitemap", "map", "paths", "path", "switchMap", "urls", "filter", "ev", "el", "url", "of", "NEVER", "share", "pop$", "merge", "distinctUntilChanged", "a", "b", "response$", "distinctUntilKeyChanged", "request", "catchError", "setLocation", "sample", "dom", "res", "skip", "replacement", "selector", "feature", "source", "target", "getComponentElement", "getElements", "concatMap", "script", "h", "name", "Observable", "observer", "EMPTY", "offset", "setLocationHash", "skipUntil", "debounceTime", "bufferCount", "state", "import_escape_html", "import_escape_html", "setupSearchHighlighter", "config", "escape", "separator", "highlight", "_", "data", "term", "query", "match", "value", "escapeHTML", "defaultTransform", "query", "terms", "index", "isSearchReadyMessage", "message", "isSearchQueryMessage", "isSearchResultMessage", "setupSearchIndex", "config", "docs", "translation", "options", "feature", "setupSearchWorker", "url", "index", "configuration", "worker", "tx$", "Subject", "rx$", "watchWorker", "map", "message", "isSearchResultMessage", "result", "document", "share", "from", "data", "setupVersionSelector", "document$", "config", "configuration", "versions$", "requestJSON", "catchError", "EMPTY", "current$", "map", "versions", "current", "version", "aliases", "switchMap", "urls", "fromEvent", "filter", "ev", "withLatestFrom", "el", "url", "of", "fetchSitemap", "sitemap", "path", "getLocation", "setLocation", "combineLatest", "getElement", "renderVersionSelector", "_a", "outdated", "latest", "warning", "getComponentElements", "watchSearchQuery", "el", "rx$", "fn", "defaultTransform", "searchParams", "getLocation", "setToggle", "param$", "filter", "isSearchReadyMessage", "take", "map", "watchToggle", "active", "url", "value", "focus$", "watchElementFocus", "value$", "merge", "fromEvent", "delay", "startWith", "distinctUntilChanged", "combineLatest", "focus", "shareReplay", "mountSearchQuery", "tx$", "push$", "Subject", "done$", "takeLast", "distinctUntilKeyChanged", "translation", "takeUntil", "tap", "state", "finalize", "__spreadValues", "share", "mountSearchResult", "el", "rx$", "query$", "push$", "Subject", "boundary$", "watchElementBoundary", "filter", "meta", "getElement", "list", "ready$", "isSearchReadyMessage", "take", "withLatestFrom", "skipUntil", "items", "value", "translation", "round", "tap", "switchMap", "merge", "of", "bufferCount", "zipWith", "chunk", "result", "renderSearchResultItem", "isSearchResultMessage", "map", "data", "state", "finalize", "__spreadValues", "watchSearchShare", "_el", "query$", "map", "value", "url", "getLocation", "mountSearchShare", "el", "options", "push$", "Subject", "fromEvent", "ev", "tap", "state", "finalize", "__spreadValues", "mountSearchSuggest", "el", "rx$", "keyboard$", "push$", "Subject", "query", "getComponentElement", "query$", "merge", "fromEvent", "observeOn", "asyncScheduler", "map", "distinctUntilChanged", "combineLatestWith", "suggestions", "value", "words", "last", "filter", "mode", "key", "isSearchResultMessage", "data", "tap", "state", "finalize", "mountSearch", "el", "index$", "keyboard$", "config", "configuration", "url", "worker", "setupSearchWorker", "query", "getComponentElement", "result", "tx$", "rx$", "filter", "isSearchQueryMessage", "sample", "isSearchReadyMessage", "take", "mode", "key", "active", "getActiveElement", "anchors", "anchor", "getElements", "article", "best", "a", "b", "setToggle", "els", "i", "query$", "mountSearchQuery", "result$", "mountSearchResult", "merge", "mergeWith", "getComponentElements", "child", "mountSearchShare", "mountSearchSuggest", "err", "NEVER", "mountSearchHiglight", "el", "index$", "location$", "combineLatest", "startWith", "getLocation", "filter", "url", "map", "index", "setupSearchHighlighter", "fn", "_a", "nodes", "it", "node", "original", "replaced", "text", "childNodes", "h", "watchSidebar", "el", "viewport$", "main$", "parent", "adjust", "combineLatest", "map", "offset", "height", "y", "distinctUntilChanged", "a", "b", "mountSidebar", "_a", "_b", "header$", "options", "__objRest", "inner", "getElement", "getElementOffset", "defer", "push$", "Subject", "auditTime", "animationFrameScheduler", "withLatestFrom", "observeOn", "take", "item", "getElements", "container", "getElementContainer", "getElementSize", "tap", "state", "finalize", "__spreadValues", "fetchSourceFactsFromGitHub", "user", "repo", "url", "zip", "requestJSON", "catchError", "EMPTY", "map", "release", "defaultIfEmpty", "info", "__spreadValues", "fetchSourceFactsFromGitLab", "base", "project", "url", "requestJSON", "catchError", "EMPTY", "map", "star_count", "forks_count", "defaultIfEmpty", "fetchSourceFacts", "url", "type", "user", "repo", "fetchSourceFactsFromGitHub", "base", "slug", "fetchSourceFactsFromGitLab", "EMPTY", "fetch$", "watchSource", "el", "defer", "cached", "of", "fetchSourceFacts", "tap", "facts", "catchError", "EMPTY", "filter", "map", "shareReplay", "mountSource", "inner", "getElement", "push$", "Subject", "renderSourceFacts", "state", "finalize", "__spreadValues", "watchTabs", "el", "viewport$", "header$", "watchElementSize", "switchMap", "watchViewportAt", "map", "y", "distinctUntilKeyChanged", "mountTabs", "options", "defer", "push$", "Subject", "hidden", "feature", "of", "tap", "state", "finalize", "__spreadValues", "watchTableOfContents", "el", "viewport$", "header$", "table", "anchors", "getElements", "anchor", "id", "target", "getOptionalElement", "adjust$", "distinctUntilKeyChanged", "map", "height", "main", "getComponentElement", "grid", "getElement", "share", "watchElementSize", "switchMap", "body", "defer", "path", "of", "index", "offset", "a", "b", "combineLatestWith", "adjust", "scan", "prev", "next", "y", "size", "last", "distinctUntilChanged", "startWith", "bufferCount", "mountTableOfContents", "target$", "push$", "Subject", "done$", "takeLast", "feature", "smooth$", "merge", "debounceTime", "filter", "withLatestFrom", "behavior", "container", "getElementContainer", "getElementSize", "takeUntil", "skip", "repeat", "url", "getLocation", "active", "hash", "tap", "state", "finalize", "__spreadValues", "watchBackToTop", "_el", "viewport$", "main$", "target$", "direction$", "map", "y", "bufferCount", "b", "distinctUntilChanged", "active$", "active", "combineLatest", "direction", "takeUntil", "skip", "endWith", "repeat", "hidden", "mountBackToTop", "el", "header$", "push$", "Subject", "done$", "takeLast", "distinctUntilKeyChanged", "height", "tap", "state", "finalize", "__spreadValues", "patchIndeterminate", "document$", "tablet$", "switchMap", "getElements", "tap", "el", "mergeMap", "fromEvent", "takeWhile", "map", "withLatestFrom", "tablet", "isAppleDevice", "patchScrollfix", "document$", "switchMap", "getElements", "tap", "el", "filter", "mergeMap", "fromEvent", "map", "top", "patchScrolllock", "viewport$", "tablet$", "combineLatest", "watchToggle", "map", "active", "tablet", "switchMap", "of", "delay", "withLatestFrom", "y", "value", "obj", "data", "key", "x", "y", "nodes", "parent", "i", "node", "document$", "watchDocument", "location$", "watchLocation", "target$", "watchLocationTarget", "keyboard$", "watchKeyboard", "viewport$", "watchViewport", "tablet$", "watchMedia", "screen$", "print$", "watchPrint", "config", "configuration", "index$", "requestJSON", "NEVER", "alert$", "Subject", "setupClipboardJS", "feature", "setupInstantLoading", "_a", "setupVersionSelector", "merge", "delay", "setToggle", "filter", "mode", "key", "prev", "getOptionalElement", "next", "patchIndeterminate", "patchScrollfix", "patchScrolllock", "header$", "watchHeader", "getComponentElement", "main$", "map", "switchMap", "el", "watchMain", "shareReplay", "control$", "getComponentElements", "mountConsent", "mountDialog", "mountHeader", "mountPalette", "mountSearch", "mountSource", "content$", "defer", "mountAnnounce", "mountContent", "mountSearchHiglight", "EMPTY", "mountHeaderTitle", "at", "mountSidebar", "mountTabs", "mountTableOfContents", "mountBackToTop", "component$", "mergeWith"] +} diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.ar.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.ar.min.js new file mode 100644 index 00000000..248ddc5d --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.ar.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ar=function(){this.pipeline.reset(),this.pipeline.add(e.ar.trimmer,e.ar.stopWordFilter,e.ar.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ar.stemmer))},e.ar.wordCharacters="ء-ٛٱـ",e.ar.trimmer=e.trimmerSupport.generateTrimmer(e.ar.wordCharacters),e.Pipeline.registerFunction(e.ar.trimmer,"trimmer-ar"),e.ar.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ف ك ب و س ل ن ا ي ت",pre2:"ال لل",pre3:"بال وال فال تال كال ولل",pre4:"فبال كبال وبال وكال"},e.suf={suf1:"ه ك ت ن ا ي",suf2:"نك نه ها وك يا اه ون ين تن تم نا وا ان كم كن ني نن ما هم هن تك ته ات يه",suf3:"تين كهم نيه نهم ونه وها يهم ونا ونك وني وهم تكم تنا تها تني تهم كما كها ناه نكم هنا تان يها",suf4:"كموه ناها ونني ونهم تكما تموه تكاه كماه ناكم ناهم نيها وننا"},e.patterns=JSON.parse('{"pt43":[{"pt":[{"c":"ا","l":1}]},{"pt":[{"c":"ا,ت,ن,ي","l":0}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"و","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ي","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ا","l":2},{"c":"ل","l":3,"m":3}]},{"pt":[{"c":"م","l":0}]}],"pt53":[{"pt":[{"c":"ت","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":3},{"c":"ل","l":3,"m":4},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":3}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ن","l":4}]},{"pt":[{"c":"ت","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"م","l":0},{"c":"و","l":3}]},{"pt":[{"c":"ا","l":1},{"c":"و","l":3}]},{"pt":[{"c":"و","l":1},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"ا","l":2},{"c":"ن","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":1},{"c":"ا","l":3}]},{"pt":[{"c":"ي,ت,ا,ن","l":0},{"c":"ت","l":1}],"mPt":[{"c":"ف","l":0,"m":2},{"c":"ع","l":1,"m":3},{"c":"ا","l":2},{"c":"ل","l":3,"m":4}]},{"pt":[{"c":"ت,ي,ا,ن","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":2},{"c":"ي","l":3}]},{"pt":[{"c":"ا,ي,ت,ن","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ء","l":4}]}],"pt63":[{"pt":[{"c":"ا","l":0},{"c":"ت","l":2},{"c":"ا","l":4}]},{"pt":[{"c":"ا,ت,ن,ي","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"و","l":3}]},{"pt":[{"c":"م","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ي","l":1},{"c":"ي","l":3},{"c":"ا","l":4},{"c":"ء","l":5}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ا","l":4}]}],"pt54":[{"pt":[{"c":"ت","l":0}]},{"pt":[{"c":"ا,ي,ت,ن","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"م","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":2}]}],"pt64":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":1}]}],"pt73":[{"pt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ا","l":5}]}],"pt75":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":5}]}]}'),e.execArray=["cleanWord","removeDiacritics","cleanAlef","removeStopWords","normalizeHamzaAndAlef","removeStartWaw","removePre432","removeEndTaa","wordCheck"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r=0)return!0},e.normalizeHamzaAndAlef=function(){return e.word=e.word.replace("ؤ","ء"),e.word=e.word.replace("ئ","ء"),e.word=e.word.replace(/([\u0627])\1+/gi,"ا"),!1},e.removeEndTaa=function(){return!(e.word.length>2)||(e.word=e.word.replace(/[\u0627]$/,""),e.word=e.word.replace("ة",""),!1)},e.removeStartWaw=function(){return e.word.length>3&&"و"==e.word[0]&&"و"==e.word[1]&&(e.word=e.word.slice(1)),!1},e.removePre432=function(){var r=e.word;if(e.word.length>=7){var t=new RegExp("^("+e.pre.pre4.split(" ").join("|")+")");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=6){var c=new RegExp("^("+e.pre.pre3.split(" ").join("|")+")");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=5){var l=new RegExp("^("+e.pre.pre2.split(" ").join("|")+")");e.word=e.word.replace(l,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.patternCheck=function(r){for(var t=0;t3){var t=new RegExp("^("+e.pre.pre1.split(" ").join("|")+")");e.word=e.word.replace(t,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.removeSuf1=function(){var r=e.word;if(0==e.sufRemoved&&e.word.length>3){var t=new RegExp("("+e.suf.suf1.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.removeSuf432=function(){var r=e.word;if(e.word.length>=6){var t=new RegExp("("+e.suf.suf4.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=5){var c=new RegExp("("+e.suf.suf3.split(" ").join("|")+")$");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=4){var l=new RegExp("("+e.suf.suf2.split(" ").join("|")+")$");e.word=e.word.replace(l,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.wordCheck=function(){for(var r=(e.word,[e.removeSuf432,e.removeSuf1,e.removePre1]),t=0,c=!1;e.word.length>=7&&!e.result&&t=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.de.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.de.min.js new file mode 100644 index 00000000..f3b5c108 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.de.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `German` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!v.eq_s(1,e)||(v.ket=v.cursor,!v.in_grouping(p,97,252)))&&(v.slice_from(r),v.cursor=n,!0)}function i(){for(var r,n,i,s,t=v.cursor;;)if(r=v.cursor,v.bra=r,v.eq_s(1,"ß"))v.ket=v.cursor,v.slice_from("ss");else{if(r>=v.limit)break;v.cursor=r+1}for(v.cursor=t;;)for(n=v.cursor;;){if(i=v.cursor,v.in_grouping(p,97,252)){if(s=v.cursor,v.bra=s,e("u","U",i))break;if(v.cursor=s,e("y","Y",i))break}if(i>=v.limit)return void(v.cursor=n);v.cursor=i+1}}function s(){for(;!v.in_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}for(;!v.out_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}function t(){m=v.limit,l=m;var e=v.cursor+3;0<=e&&e<=v.limit&&(d=e,s()||(m=v.cursor,m=v.limit)return;v.cursor++}}}function c(){return m<=v.cursor}function u(){return l<=v.cursor}function a(){var e,r,n,i,s=v.limit-v.cursor;if(v.ket=v.cursor,(e=v.find_among_b(w,7))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:v.slice_del(),v.ket=v.cursor,v.eq_s_b(1,"s")&&(v.bra=v.cursor,v.eq_s_b(3,"nis")&&v.slice_del());break;case 3:v.in_grouping_b(g,98,116)&&v.slice_del()}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(f,4))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:if(v.in_grouping_b(k,98,116)){var t=v.cursor-3;v.limit_backward<=t&&t<=v.limit&&(v.cursor=t,v.slice_del())}}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(_,8))&&(v.bra=v.cursor,u()))switch(e){case 1:v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"ig")&&(v.bra=v.cursor,r=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-r,u()&&v.slice_del()));break;case 2:n=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-n,v.slice_del());break;case 3:if(v.slice_del(),v.ket=v.cursor,i=v.limit-v.cursor,!v.eq_s_b(2,"er")&&(v.cursor=v.limit-i,!v.eq_s_b(2,"en")))break;v.bra=v.cursor,c()&&v.slice_del();break;case 4:v.slice_del(),v.ket=v.cursor,e=v.find_among_b(b,2),e&&(v.bra=v.cursor,u()&&1==e&&v.slice_del())}}var d,l,m,h=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],w=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],f=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],b=[new r("ig",-1,1),new r("lich",-1,1)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],p=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],g=[117,30,5],k=[117,30,4],v=new n;this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var e=v.cursor;return i(),v.cursor=e,t(),v.limit_backward=e,v.cursor=v.limit,a(),v.cursor=v.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.du.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.du.min.js new file mode 100644 index 00000000..49a0f3f0 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.du.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Dutch` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e,r,i,o=C.cursor;;){if(C.bra=C.cursor,e=C.find_among(b,11))switch(C.ket=C.cursor,e){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(r=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=r);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=r;else if(n(r))break}else if(n(r))break}function n(e){return C.cursor=e,e>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,f=_,t()||(_=C.cursor,_<3&&(_=3),t()||(f=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var e;;)if(C.bra=C.cursor,e=C.find_among(p,3))switch(C.ket=C.cursor,e){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return f<=C.cursor}function a(){var e=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-e,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var e;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.slice_del(),w=!0,a())))}function m(){var e;u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.eq_s_b(3,"gem")||(C.cursor=C.limit-e,C.slice_del(),a())))}function d(){var e,r,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,e=C.find_among_b(h,5))switch(C.bra=C.cursor,e){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(z,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(r=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-r,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,e=C.find_among_b(k,6))switch(C.bra=C.cursor,e){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(j,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var f,_,w,b=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],p=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],g=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],h=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],k=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],v=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(e){C.setCurrent(e)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var r=C.cursor;return e(),C.cursor=r,o(),C.limit_backward=r,C.cursor=C.limit,d(),C.cursor=C.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.es.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.es.min.js new file mode 100644 index 00000000..2989d342 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.es.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Spanish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=function(){var s=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(){if(A.out_grouping(x,97,252)){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}return!0}function n(){if(A.in_grouping(x,97,252)){var s=A.cursor;if(e()){if(A.cursor=s,!A.in_grouping(x,97,252))return!0;for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}}return!1}return!0}function i(){var s,r=A.cursor;if(n()){if(A.cursor=r,!A.out_grouping(x,97,252))return;if(s=A.cursor,e()){if(A.cursor=s,!A.in_grouping(x,97,252)||A.cursor>=A.limit)return;A.cursor++}}g=A.cursor}function a(){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}return!0}function t(){var e=A.cursor;g=A.limit,p=g,v=g,i(),A.cursor=e,a()&&(p=A.cursor,a()&&(v=A.cursor))}function o(){for(var e;;){if(A.bra=A.cursor,e=A.find_among(k,6))switch(A.ket=A.cursor,e){case 1:A.slice_from("a");continue;case 2:A.slice_from("e");continue;case 3:A.slice_from("i");continue;case 4:A.slice_from("o");continue;case 5:A.slice_from("u");continue;case 6:if(A.cursor>=A.limit)break;A.cursor++;continue}break}}function u(){return g<=A.cursor}function w(){return p<=A.cursor}function c(){return v<=A.cursor}function m(){var e;if(A.ket=A.cursor,A.find_among_b(y,13)&&(A.bra=A.cursor,(e=A.find_among_b(q,11))&&u()))switch(e){case 1:A.bra=A.cursor,A.slice_from("iendo");break;case 2:A.bra=A.cursor,A.slice_from("ando");break;case 3:A.bra=A.cursor,A.slice_from("ar");break;case 4:A.bra=A.cursor,A.slice_from("er");break;case 5:A.bra=A.cursor,A.slice_from("ir");break;case 6:A.slice_del();break;case 7:A.eq_s_b(1,"u")&&A.slice_del()}}function l(e,s){if(!c())return!0;A.slice_del(),A.ket=A.cursor;var r=A.find_among_b(e,s);return r&&(A.bra=A.cursor,1==r&&c()&&A.slice_del()),!1}function d(e){return!c()||(A.slice_del(),A.ket=A.cursor,A.eq_s_b(2,e)&&(A.bra=A.cursor,c()&&A.slice_del()),!1)}function b(){var e;if(A.ket=A.cursor,e=A.find_among_b(S,46)){switch(A.bra=A.cursor,e){case 1:if(!c())return!1;A.slice_del();break;case 2:if(d("ic"))return!1;break;case 3:if(!c())return!1;A.slice_from("log");break;case 4:if(!c())return!1;A.slice_from("u");break;case 5:if(!c())return!1;A.slice_from("ente");break;case 6:if(!w())return!1;A.slice_del(),A.ket=A.cursor,e=A.find_among_b(C,4),e&&(A.bra=A.cursor,c()&&(A.slice_del(),1==e&&(A.ket=A.cursor,A.eq_s_b(2,"at")&&(A.bra=A.cursor,c()&&A.slice_del()))));break;case 7:if(l(P,3))return!1;break;case 8:if(l(F,3))return!1;break;case 9:if(d("at"))return!1}return!0}return!1}function f(){var e,s;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(W,12),A.limit_backward=s,e)){if(A.bra=A.cursor,1==e){if(!A.eq_s_b(1,"u"))return!1;A.slice_del()}return!0}return!1}function _(){var e,s,r,n;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(L,96),A.limit_backward=s,e))switch(A.bra=A.cursor,e){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"u")?(n=A.limit-A.cursor,A.eq_s_b(1,"g")?A.cursor=A.limit-n:A.cursor=A.limit-r):A.cursor=A.limit-r,A.bra=A.cursor;case 2:A.slice_del()}}function h(){var e,s;if(A.ket=A.cursor,e=A.find_among_b(z,8))switch(A.bra=A.cursor,e){case 1:u()&&A.slice_del();break;case 2:u()&&(A.slice_del(),A.ket=A.cursor,A.eq_s_b(1,"u")&&(A.bra=A.cursor,s=A.limit-A.cursor,A.eq_s_b(1,"g")&&(A.cursor=A.limit-s,u()&&A.slice_del())))}}var v,p,g,k=[new s("",-1,6),new s("á",0,1),new s("é",0,2),new s("í",0,3),new s("ó",0,4),new s("ú",0,5)],y=[new s("la",-1,-1),new s("sela",0,-1),new s("le",-1,-1),new s("me",-1,-1),new s("se",-1,-1),new s("lo",-1,-1),new s("selo",5,-1),new s("las",-1,-1),new s("selas",7,-1),new s("les",-1,-1),new s("los",-1,-1),new s("selos",10,-1),new s("nos",-1,-1)],q=[new s("ando",-1,6),new s("iendo",-1,6),new s("yendo",-1,7),new s("ándo",-1,2),new s("iéndo",-1,1),new s("ar",-1,6),new s("er",-1,6),new s("ir",-1,6),new s("ár",-1,3),new s("ér",-1,4),new s("ír",-1,5)],C=[new s("ic",-1,-1),new s("ad",-1,-1),new s("os",-1,-1),new s("iv",-1,1)],P=[new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,1)],F=[new s("ic",-1,1),new s("abil",-1,1),new s("iv",-1,1)],S=[new s("ica",-1,1),new s("ancia",-1,2),new s("encia",-1,5),new s("adora",-1,2),new s("osa",-1,1),new s("ista",-1,1),new s("iva",-1,9),new s("anza",-1,1),new s("logía",-1,3),new s("idad",-1,8),new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,2),new s("mente",-1,7),new s("amente",13,6),new s("ación",-1,2),new s("ución",-1,4),new s("ico",-1,1),new s("ismo",-1,1),new s("oso",-1,1),new s("amiento",-1,1),new s("imiento",-1,1),new s("ivo",-1,9),new s("ador",-1,2),new s("icas",-1,1),new s("ancias",-1,2),new s("encias",-1,5),new s("adoras",-1,2),new s("osas",-1,1),new s("istas",-1,1),new s("ivas",-1,9),new s("anzas",-1,1),new s("logías",-1,3),new s("idades",-1,8),new s("ables",-1,1),new s("ibles",-1,1),new s("aciones",-1,2),new s("uciones",-1,4),new s("adores",-1,2),new s("antes",-1,2),new s("icos",-1,1),new s("ismos",-1,1),new s("osos",-1,1),new s("amientos",-1,1),new s("imientos",-1,1),new s("ivos",-1,9)],W=[new s("ya",-1,1),new s("ye",-1,1),new s("yan",-1,1),new s("yen",-1,1),new s("yeron",-1,1),new s("yendo",-1,1),new s("yo",-1,1),new s("yas",-1,1),new s("yes",-1,1),new s("yais",-1,1),new s("yamos",-1,1),new s("yó",-1,1)],L=[new s("aba",-1,2),new s("ada",-1,2),new s("ida",-1,2),new s("ara",-1,2),new s("iera",-1,2),new s("ía",-1,2),new s("aría",5,2),new s("ería",5,2),new s("iría",5,2),new s("ad",-1,2),new s("ed",-1,2),new s("id",-1,2),new s("ase",-1,2),new s("iese",-1,2),new s("aste",-1,2),new s("iste",-1,2),new s("an",-1,2),new s("aban",16,2),new s("aran",16,2),new s("ieran",16,2),new s("ían",16,2),new s("arían",20,2),new s("erían",20,2),new s("irían",20,2),new s("en",-1,1),new s("asen",24,2),new s("iesen",24,2),new s("aron",-1,2),new s("ieron",-1,2),new s("arán",-1,2),new s("erán",-1,2),new s("irán",-1,2),new s("ado",-1,2),new s("ido",-1,2),new s("ando",-1,2),new s("iendo",-1,2),new s("ar",-1,2),new s("er",-1,2),new s("ir",-1,2),new s("as",-1,2),new s("abas",39,2),new s("adas",39,2),new s("idas",39,2),new s("aras",39,2),new s("ieras",39,2),new s("ías",39,2),new s("arías",45,2),new s("erías",45,2),new s("irías",45,2),new s("es",-1,1),new s("ases",49,2),new s("ieses",49,2),new s("abais",-1,2),new s("arais",-1,2),new s("ierais",-1,2),new s("íais",-1,2),new s("aríais",55,2),new s("eríais",55,2),new s("iríais",55,2),new s("aseis",-1,2),new s("ieseis",-1,2),new s("asteis",-1,2),new s("isteis",-1,2),new s("áis",-1,2),new s("éis",-1,1),new s("aréis",64,2),new s("eréis",64,2),new s("iréis",64,2),new s("ados",-1,2),new s("idos",-1,2),new s("amos",-1,2),new s("ábamos",70,2),new s("áramos",70,2),new s("iéramos",70,2),new s("íamos",70,2),new s("aríamos",74,2),new s("eríamos",74,2),new s("iríamos",74,2),new s("emos",-1,1),new s("aremos",78,2),new s("eremos",78,2),new s("iremos",78,2),new s("ásemos",78,2),new s("iésemos",78,2),new s("imos",-1,2),new s("arás",-1,2),new s("erás",-1,2),new s("irás",-1,2),new s("ís",-1,2),new s("ará",-1,2),new s("erá",-1,2),new s("irá",-1,2),new s("aré",-1,2),new s("eré",-1,2),new s("iré",-1,2),new s("ió",-1,2)],z=[new s("a",-1,1),new s("e",-1,2),new s("o",-1,1),new s("os",-1,1),new s("á",-1,1),new s("é",-1,2),new s("í",-1,1),new s("ó",-1,1)],x=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],A=new r;this.setCurrent=function(e){A.setCurrent(e)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return t(),A.limit_backward=e,A.cursor=A.limit,m(),A.cursor=A.limit,b()||(A.cursor=A.limit,f()||(A.cursor=A.limit,_())),A.cursor=A.limit,h(),A.cursor=A.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.fi.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.fi.min.js new file mode 100644 index 00000000..29f5dfce --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.fi.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Finnish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=function(){var e=i.stemmerSupport.Among,r=i.stemmerSupport.SnowballProgram,n=new function(){function i(){f=A.limit,d=f,n()||(f=A.cursor,n()||(d=A.cursor))}function n(){for(var i;;){if(i=A.cursor,A.in_grouping(W,97,246))break;if(A.cursor=i,i>=A.limit)return!0;A.cursor++}for(A.cursor=i;!A.out_grouping(W,97,246);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}function t(){return d<=A.cursor}function s(){var i,e;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(h,10)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.in_grouping_b(x,97,246))return;break;case 2:if(!t())return}A.slice_del()}else A.limit_backward=e}function o(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(v,9))switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"k")||(A.cursor=A.limit-r,A.slice_del());break;case 2:A.slice_del(),A.ket=A.cursor,A.eq_s_b(3,"kse")&&(A.bra=A.cursor,A.slice_from("ksi"));break;case 3:A.slice_del();break;case 4:A.find_among_b(p,6)&&A.slice_del();break;case 5:A.find_among_b(g,6)&&A.slice_del();break;case 6:A.find_among_b(j,2)&&A.slice_del()}else A.limit_backward=e}function l(){return A.find_among_b(q,7)}function a(){return A.eq_s_b(1,"i")&&A.in_grouping_b(L,97,246)}function u(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(C,30)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.eq_s_b(1,"a"))return;break;case 2:case 9:if(!A.eq_s_b(1,"e"))return;break;case 3:if(!A.eq_s_b(1,"i"))return;break;case 4:if(!A.eq_s_b(1,"o"))return;break;case 5:if(!A.eq_s_b(1,"ä"))return;break;case 6:if(!A.eq_s_b(1,"ö"))return;break;case 7:if(r=A.limit-A.cursor,!l()&&(A.cursor=A.limit-r,!A.eq_s_b(2,"ie"))){A.cursor=A.limit-r;break}if(A.cursor=A.limit-r,A.cursor<=A.limit_backward){A.cursor=A.limit-r;break}A.cursor--,A.bra=A.cursor;break;case 8:if(!A.in_grouping_b(W,97,246)||!A.out_grouping_b(W,97,246))return}A.slice_del(),k=!0}else A.limit_backward=e}function c(){var i,e,r;if(A.cursor>=d)if(e=A.limit_backward,A.limit_backward=d,A.ket=A.cursor,i=A.find_among_b(P,14)){if(A.bra=A.cursor,A.limit_backward=e,1==i){if(r=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-r}A.slice_del()}else A.limit_backward=e}function m(){var i;A.cursor>=f&&(i=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.find_among_b(F,2)?(A.bra=A.cursor,A.limit_backward=i,A.slice_del()):A.limit_backward=i)}function w(){var i,e,r,n,t,s;if(A.cursor>=f){if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.eq_s_b(1,"t")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.in_grouping_b(W,97,246)&&(A.cursor=A.limit-r,A.slice_del(),A.limit_backward=e,n=A.limit-A.cursor,A.cursor>=d&&(A.cursor=d,t=A.limit_backward,A.limit_backward=A.cursor,A.cursor=A.limit-n,A.ket=A.cursor,i=A.find_among_b(S,2))))){if(A.bra=A.cursor,A.limit_backward=t,1==i){if(s=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-s}return void A.slice_del()}A.limit_backward=e}}function _(){var i,e,r,n;if(A.cursor>=f){for(i=A.limit_backward,A.limit_backward=f,e=A.limit-A.cursor,l()&&(A.cursor=A.limit-e,A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.in_grouping_b(y,97,228)&&(A.bra=A.cursor,A.out_grouping_b(W,97,246)&&A.slice_del()),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"j")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.eq_s_b(1,"o")?A.slice_del():(A.cursor=A.limit-r,A.eq_s_b(1,"u")&&A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"o")&&(A.bra=A.cursor,A.eq_s_b(1,"j")&&A.slice_del()),A.cursor=A.limit-e,A.limit_backward=i;;){if(n=A.limit-A.cursor,A.out_grouping_b(W,97,246)){A.cursor=A.limit-n;break}if(A.cursor=A.limit-n,A.cursor<=A.limit_backward)return;A.cursor--}A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,b=A.slice_to(),A.eq_v_b(b)&&A.slice_del())}}var k,b,d,f,h=[new e("pa",-1,1),new e("sti",-1,2),new e("kaan",-1,1),new e("han",-1,1),new e("kin",-1,1),new e("hän",-1,1),new e("kään",-1,1),new e("ko",-1,1),new e("pä",-1,1),new e("kö",-1,1)],p=[new e("lla",-1,-1),new e("na",-1,-1),new e("ssa",-1,-1),new e("ta",-1,-1),new e("lta",3,-1),new e("sta",3,-1)],g=[new e("llä",-1,-1),new e("nä",-1,-1),new e("ssä",-1,-1),new e("tä",-1,-1),new e("ltä",3,-1),new e("stä",3,-1)],j=[new e("lle",-1,-1),new e("ine",-1,-1)],v=[new e("nsa",-1,3),new e("mme",-1,3),new e("nne",-1,3),new e("ni",-1,2),new e("si",-1,1),new e("an",-1,4),new e("en",-1,6),new e("än",-1,5),new e("nsä",-1,3)],q=[new e("aa",-1,-1),new e("ee",-1,-1),new e("ii",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1),new e("ää",-1,-1),new e("öö",-1,-1)],C=[new e("a",-1,8),new e("lla",0,-1),new e("na",0,-1),new e("ssa",0,-1),new e("ta",0,-1),new e("lta",4,-1),new e("sta",4,-1),new e("tta",4,9),new e("lle",-1,-1),new e("ine",-1,-1),new e("ksi",-1,-1),new e("n",-1,7),new e("han",11,1),new e("den",11,-1,a),new e("seen",11,-1,l),new e("hen",11,2),new e("tten",11,-1,a),new e("hin",11,3),new e("siin",11,-1,a),new e("hon",11,4),new e("hän",11,5),new e("hön",11,6),new e("ä",-1,8),new e("llä",22,-1),new e("nä",22,-1),new e("ssä",22,-1),new e("tä",22,-1),new e("ltä",26,-1),new e("stä",26,-1),new e("ttä",26,9)],P=[new e("eja",-1,-1),new e("mma",-1,1),new e("imma",1,-1),new e("mpa",-1,1),new e("impa",3,-1),new e("mmi",-1,1),new e("immi",5,-1),new e("mpi",-1,1),new e("impi",7,-1),new e("ejä",-1,-1),new e("mmä",-1,1),new e("immä",10,-1),new e("mpä",-1,1),new e("impä",12,-1)],F=[new e("i",-1,-1),new e("j",-1,-1)],S=[new e("mma",-1,1),new e("imma",0,-1)],y=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],W=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],x=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],A=new r;this.setCurrent=function(i){A.setCurrent(i)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return i(),k=!1,A.limit_backward=e,A.cursor=A.limit,s(),A.cursor=A.limit,o(),A.cursor=A.limit,u(),A.cursor=A.limit,c(),A.cursor=A.limit,k?(m(),A.cursor=A.limit):(A.cursor=A.limit,w(),A.cursor=A.limit),_(),!0}};return function(i){return"function"==typeof i.update?i.update(function(i){return n.setCurrent(i),n.stem(),n.getCurrent()}):(n.setCurrent(i),n.stem(),n.getCurrent())}}(),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.fr.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.fr.min.js new file mode 100644 index 00000000..68cd0094 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.fr.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `French` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,s){return!(!W.eq_s(1,e)||(W.ket=W.cursor,!W.in_grouping(F,97,251)))&&(W.slice_from(r),W.cursor=s,!0)}function i(e,r,s){return!!W.eq_s(1,e)&&(W.ket=W.cursor,W.slice_from(r),W.cursor=s,!0)}function n(){for(var r,s;;){if(r=W.cursor,W.in_grouping(F,97,251)){if(W.bra=W.cursor,s=W.cursor,e("u","U",r))continue;if(W.cursor=s,e("i","I",r))continue;if(W.cursor=s,i("y","Y",r))continue}if(W.cursor=r,W.bra=r,!e("y","Y",r)){if(W.cursor=r,W.eq_s(1,"q")&&(W.bra=W.cursor,i("u","U",r)))continue;if(W.cursor=r,r>=W.limit)return;W.cursor++}}}function t(){for(;!W.in_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}for(;!W.out_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}return!1}function u(){var e=W.cursor;if(q=W.limit,g=q,p=q,W.in_grouping(F,97,251)&&W.in_grouping(F,97,251)&&W.cursor=W.limit){W.cursor=q;break}W.cursor++}while(!W.in_grouping(F,97,251))}q=W.cursor,W.cursor=e,t()||(g=W.cursor,t()||(p=W.cursor))}function o(){for(var e,r;;){if(r=W.cursor,W.bra=r,!(e=W.find_among(h,4)))break;switch(W.ket=W.cursor,e){case 1:W.slice_from("i");break;case 2:W.slice_from("u");break;case 3:W.slice_from("y");break;case 4:if(W.cursor>=W.limit)return;W.cursor++}}}function c(){return q<=W.cursor}function a(){return g<=W.cursor}function l(){return p<=W.cursor}function w(){var e,r;if(W.ket=W.cursor,e=W.find_among_b(C,43)){switch(W.bra=W.cursor,e){case 1:if(!l())return!1;W.slice_del();break;case 2:if(!l())return!1;W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")&&(W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU"));break;case 3:if(!l())return!1;W.slice_from("log");break;case 4:if(!l())return!1;W.slice_from("u");break;case 5:if(!l())return!1;W.slice_from("ent");break;case 6:if(!c())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(z,6))switch(W.bra=W.cursor,e){case 1:l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&W.slice_del()));break;case 2:l()?W.slice_del():a()&&W.slice_from("eux");break;case 3:l()&&W.slice_del();break;case 4:c()&&W.slice_from("i")}break;case 7:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(y,3))switch(W.bra=W.cursor,e){case 1:l()?W.slice_del():W.slice_from("abl");break;case 2:l()?W.slice_del():W.slice_from("iqU");break;case 3:l()&&W.slice_del()}break;case 8:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")))){W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU");break}break;case 9:W.slice_from("eau");break;case 10:if(!a())return!1;W.slice_from("al");break;case 11:if(l())W.slice_del();else{if(!a())return!1;W.slice_from("eux")}break;case 12:if(!a()||!W.out_grouping_b(F,97,251))return!1;W.slice_del();break;case 13:return c()&&W.slice_from("ant"),!1;case 14:return c()&&W.slice_from("ent"),!1;case 15:return r=W.limit-W.cursor,W.in_grouping_b(F,97,251)&&c()&&(W.cursor=W.limit-r,W.slice_del()),!1}return!0}return!1}function f(){var e,r;if(W.cursor=q){if(s=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,e=W.find_among_b(P,7))switch(W.bra=W.cursor,e){case 1:if(l()){if(i=W.limit-W.cursor,!W.eq_s_b(1,"s")&&(W.cursor=W.limit-i,!W.eq_s_b(1,"t")))break;W.slice_del()}break;case 2:W.slice_from("i");break;case 3:W.slice_del();break;case 4:W.eq_s_b(2,"gu")&&W.slice_del()}W.limit_backward=s}}function b(){var e=W.limit-W.cursor;W.find_among_b(U,5)&&(W.cursor=W.limit-e,W.ket=W.cursor,W.cursor>W.limit_backward&&(W.cursor--,W.bra=W.cursor,W.slice_del()))}function d(){for(var e,r=1;W.out_grouping_b(F,97,251);)r--;if(r<=0){if(W.ket=W.cursor,e=W.limit-W.cursor,!W.eq_s_b(1,"é")&&(W.cursor=W.limit-e,!W.eq_s_b(1,"è")))return;W.bra=W.cursor,W.slice_from("e")}}function k(){if(!w()&&(W.cursor=W.limit,!f()&&(W.cursor=W.limit,!m())))return W.cursor=W.limit,void _();W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"Y")?(W.bra=W.cursor,W.slice_from("i")):(W.cursor=W.limit,W.eq_s_b(1,"ç")&&(W.bra=W.cursor,W.slice_from("c")))}var p,g,q,v=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],h=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],z=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],y=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],C=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],x=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],I=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],P=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],U=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],F=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],S=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],W=new s;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){var e=W.cursor;return n(),W.cursor=e,u(),W.limit_backward=e,W.cursor=W.limit,k(),W.cursor=W.limit,b(),W.cursor=W.limit,d(),W.cursor=W.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.hi.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.hi.min.js new file mode 100644 index 00000000..7dbc4140 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.hi.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.hu.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.hu.min.js new file mode 100644 index 00000000..ed9d909f --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.hu.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Hungarian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,n=L.cursor;if(d=L.limit,L.in_grouping(W,97,252))for(;;){if(e=L.cursor,L.out_grouping(W,97,252))return L.cursor=e,L.find_among(g,8)||(L.cursor=e,e=L.limit)return void(d=e);L.cursor++}if(L.cursor=n,L.out_grouping(W,97,252)){for(;!L.in_grouping(W,97,252);){if(L.cursor>=L.limit)return;L.cursor++}d=L.cursor}}function i(){return d<=L.cursor}function a(){var e;if(L.ket=L.cursor,(e=L.find_among_b(h,2))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e")}}function t(){var e=L.limit-L.cursor;return!!L.find_among_b(p,23)&&(L.cursor=L.limit-e,!0)}function s(){if(L.cursor>L.limit_backward){L.cursor--,L.ket=L.cursor;var e=L.cursor-1;L.limit_backward<=e&&e<=L.limit&&(L.cursor=e,L.bra=e,L.slice_del())}}function c(){var e;if(L.ket=L.cursor,(e=L.find_among_b(_,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function o(){L.ket=L.cursor,L.find_among_b(v,44)&&(L.bra=L.cursor,i()&&(L.slice_del(),a()))}function w(){var e;if(L.ket=L.cursor,(e=L.find_among_b(z,3))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("e");break;case 2:case 3:L.slice_from("a")}}function l(){var e;if(L.ket=L.cursor,(e=L.find_among_b(y,6))&&(L.bra=L.cursor,i()))switch(e){case 1:case 2:L.slice_del();break;case 3:L.slice_from("a");break;case 4:L.slice_from("e")}}function u(){var e;if(L.ket=L.cursor,(e=L.find_among_b(j,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function m(){var e;if(L.ket=L.cursor,(e=L.find_among_b(C,7))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:L.slice_del()}}function k(){var e;if(L.ket=L.cursor,(e=L.find_among_b(P,12))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 9:L.slice_del();break;case 2:case 5:case 8:L.slice_from("e");break;case 3:case 6:L.slice_from("a")}}function f(){var e;if(L.ket=L.cursor,(e=L.find_among_b(F,31))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:L.slice_del();break;case 2:case 5:case 10:case 14:case 19:L.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:L.slice_from("e")}}function b(){var e;if(L.ket=L.cursor,(e=L.find_among_b(S,42))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:L.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:L.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:L.slice_from("e")}}var d,g=[new n("cs",-1,-1),new n("dzs",-1,-1),new n("gy",-1,-1),new n("ly",-1,-1),new n("ny",-1,-1),new n("sz",-1,-1),new n("ty",-1,-1),new n("zs",-1,-1)],h=[new n("á",-1,1),new n("é",-1,2)],p=[new n("bb",-1,-1),new n("cc",-1,-1),new n("dd",-1,-1),new n("ff",-1,-1),new n("gg",-1,-1),new n("jj",-1,-1),new n("kk",-1,-1),new n("ll",-1,-1),new n("mm",-1,-1),new n("nn",-1,-1),new n("pp",-1,-1),new n("rr",-1,-1),new n("ccs",-1,-1),new n("ss",-1,-1),new n("zzs",-1,-1),new n("tt",-1,-1),new n("vv",-1,-1),new n("ggy",-1,-1),new n("lly",-1,-1),new n("nny",-1,-1),new n("tty",-1,-1),new n("ssz",-1,-1),new n("zz",-1,-1)],_=[new n("al",-1,1),new n("el",-1,2)],v=[new n("ba",-1,-1),new n("ra",-1,-1),new n("be",-1,-1),new n("re",-1,-1),new n("ig",-1,-1),new n("nak",-1,-1),new n("nek",-1,-1),new n("val",-1,-1),new n("vel",-1,-1),new n("ul",-1,-1),new n("nál",-1,-1),new n("nél",-1,-1),new n("ból",-1,-1),new n("ról",-1,-1),new n("tól",-1,-1),new n("bõl",-1,-1),new n("rõl",-1,-1),new n("tõl",-1,-1),new n("ül",-1,-1),new n("n",-1,-1),new n("an",19,-1),new n("ban",20,-1),new n("en",19,-1),new n("ben",22,-1),new n("képpen",22,-1),new n("on",19,-1),new n("ön",19,-1),new n("képp",-1,-1),new n("kor",-1,-1),new n("t",-1,-1),new n("at",29,-1),new n("et",29,-1),new n("ként",29,-1),new n("anként",32,-1),new n("enként",32,-1),new n("onként",32,-1),new n("ot",29,-1),new n("ért",29,-1),new n("öt",29,-1),new n("hez",-1,-1),new n("hoz",-1,-1),new n("höz",-1,-1),new n("vá",-1,-1),new n("vé",-1,-1)],z=[new n("án",-1,2),new n("én",-1,1),new n("ánként",-1,3)],y=[new n("stul",-1,2),new n("astul",0,1),new n("ástul",0,3),new n("stül",-1,2),new n("estül",3,1),new n("éstül",3,4)],j=[new n("á",-1,1),new n("é",-1,2)],C=[new n("k",-1,7),new n("ak",0,4),new n("ek",0,6),new n("ok",0,5),new n("ák",0,1),new n("ék",0,2),new n("ök",0,3)],P=[new n("éi",-1,7),new n("áéi",0,6),new n("ééi",0,5),new n("é",-1,9),new n("ké",3,4),new n("aké",4,1),new n("eké",4,1),new n("oké",4,1),new n("áké",4,3),new n("éké",4,2),new n("öké",4,1),new n("éé",3,8)],F=[new n("a",-1,18),new n("ja",0,17),new n("d",-1,16),new n("ad",2,13),new n("ed",2,13),new n("od",2,13),new n("ád",2,14),new n("éd",2,15),new n("öd",2,13),new n("e",-1,18),new n("je",9,17),new n("nk",-1,4),new n("unk",11,1),new n("ánk",11,2),new n("énk",11,3),new n("ünk",11,1),new n("uk",-1,8),new n("juk",16,7),new n("ájuk",17,5),new n("ük",-1,8),new n("jük",19,7),new n("éjük",20,6),new n("m",-1,12),new n("am",22,9),new n("em",22,9),new n("om",22,9),new n("ám",22,10),new n("ém",22,11),new n("o",-1,18),new n("á",-1,19),new n("é",-1,20)],S=[new n("id",-1,10),new n("aid",0,9),new n("jaid",1,6),new n("eid",0,9),new n("jeid",3,6),new n("áid",0,7),new n("éid",0,8),new n("i",-1,15),new n("ai",7,14),new n("jai",8,11),new n("ei",7,14),new n("jei",10,11),new n("ái",7,12),new n("éi",7,13),new n("itek",-1,24),new n("eitek",14,21),new n("jeitek",15,20),new n("éitek",14,23),new n("ik",-1,29),new n("aik",18,26),new n("jaik",19,25),new n("eik",18,26),new n("jeik",21,25),new n("áik",18,27),new n("éik",18,28),new n("ink",-1,20),new n("aink",25,17),new n("jaink",26,16),new n("eink",25,17),new n("jeink",28,16),new n("áink",25,18),new n("éink",25,19),new n("aitok",-1,21),new n("jaitok",32,20),new n("áitok",-1,22),new n("im",-1,5),new n("aim",35,4),new n("jaim",36,1),new n("eim",35,4),new n("jeim",38,1),new n("áim",35,2),new n("éim",35,3)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var n=L.cursor;return e(),L.limit_backward=n,L.cursor=L.limit,c(),L.cursor=L.limit,o(),L.cursor=L.limit,w(),L.cursor=L.limit,l(),L.cursor=L.limit,u(),L.cursor=L.limit,k(),L.cursor=L.limit,f(),L.cursor=L.limit,b(),L.cursor=L.limit,m(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.it.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.it.min.js new file mode 100644 index 00000000..344b6a3c --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.it.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Italian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!x.eq_s(1,e)||(x.ket=x.cursor,!x.in_grouping(L,97,249)))&&(x.slice_from(r),x.cursor=n,!0)}function i(){for(var r,n,i,o,t=x.cursor;;){if(x.bra=x.cursor,r=x.find_among(h,7))switch(x.ket=x.cursor,r){case 1:x.slice_from("à");continue;case 2:x.slice_from("è");continue;case 3:x.slice_from("ì");continue;case 4:x.slice_from("ò");continue;case 5:x.slice_from("ù");continue;case 6:x.slice_from("qU");continue;case 7:if(x.cursor>=x.limit)break;x.cursor++;continue}break}for(x.cursor=t;;)for(n=x.cursor;;){if(i=x.cursor,x.in_grouping(L,97,249)){if(x.bra=x.cursor,o=x.cursor,e("u","U",i))break;if(x.cursor=o,e("i","I",i))break}if(x.cursor=i,x.cursor>=x.limit)return void(x.cursor=n);x.cursor++}}function o(e){if(x.cursor=e,!x.in_grouping(L,97,249))return!1;for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function t(){if(x.in_grouping(L,97,249)){var e=x.cursor;if(x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return o(e);x.cursor++}return!0}return o(e)}return!1}function s(){var e,r=x.cursor;if(!t()){if(x.cursor=r,!x.out_grouping(L,97,249))return;if(e=x.cursor,x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return x.cursor=e,void(x.in_grouping(L,97,249)&&x.cursor=x.limit)return;x.cursor++}k=x.cursor}function a(){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function u(){var e=x.cursor;k=x.limit,p=k,g=k,s(),x.cursor=e,a()&&(p=x.cursor,a()&&(g=x.cursor))}function c(){for(var e;;){if(x.bra=x.cursor,!(e=x.find_among(q,3)))break;switch(x.ket=x.cursor,e){case 1:x.slice_from("i");break;case 2:x.slice_from("u");break;case 3:if(x.cursor>=x.limit)return;x.cursor++}}}function w(){return k<=x.cursor}function l(){return p<=x.cursor}function m(){return g<=x.cursor}function f(){var e;if(x.ket=x.cursor,x.find_among_b(C,37)&&(x.bra=x.cursor,(e=x.find_among_b(z,5))&&w()))switch(e){case 1:x.slice_del();break;case 2:x.slice_from("e")}}function v(){var e;if(x.ket=x.cursor,!(e=x.find_among_b(S,51)))return!1;switch(x.bra=x.cursor,e){case 1:if(!m())return!1;x.slice_del();break;case 2:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del());break;case 3:if(!m())return!1;x.slice_from("log");break;case 4:if(!m())return!1;x.slice_from("u");break;case 5:if(!m())return!1;x.slice_from("ente");break;case 6:if(!w())return!1;x.slice_del();break;case 7:if(!l())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(P,4),e&&(x.bra=x.cursor,m()&&(x.slice_del(),1==e&&(x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&x.slice_del()))));break;case 8:if(!m())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(F,3),e&&(x.bra=x.cursor,1==e&&m()&&x.slice_del());break;case 9:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del())))}return!0}function b(){var e,r;x.cursor>=k&&(r=x.limit_backward,x.limit_backward=k,x.ket=x.cursor,e=x.find_among_b(W,87),e&&(x.bra=x.cursor,1==e&&x.slice_del()),x.limit_backward=r)}function d(){var e=x.limit-x.cursor;if(x.ket=x.cursor,x.in_grouping_b(y,97,242)&&(x.bra=x.cursor,w()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(1,"i")&&(x.bra=x.cursor,w()))))return void x.slice_del();x.cursor=x.limit-e}function _(){d(),x.ket=x.cursor,x.eq_s_b(1,"h")&&(x.bra=x.cursor,x.in_grouping_b(U,99,103)&&w()&&x.slice_del())}var g,p,k,h=[new r("",-1,7),new r("qu",0,6),new r("á",0,1),new r("é",0,2),new r("í",0,3),new r("ó",0,4),new r("ú",0,5)],q=[new r("",-1,3),new r("I",0,1),new r("U",0,2)],C=[new r("la",-1,-1),new r("cela",0,-1),new r("gliela",0,-1),new r("mela",0,-1),new r("tela",0,-1),new r("vela",0,-1),new r("le",-1,-1),new r("cele",6,-1),new r("gliele",6,-1),new r("mele",6,-1),new r("tele",6,-1),new r("vele",6,-1),new r("ne",-1,-1),new r("cene",12,-1),new r("gliene",12,-1),new r("mene",12,-1),new r("sene",12,-1),new r("tene",12,-1),new r("vene",12,-1),new r("ci",-1,-1),new r("li",-1,-1),new r("celi",20,-1),new r("glieli",20,-1),new r("meli",20,-1),new r("teli",20,-1),new r("veli",20,-1),new r("gli",20,-1),new r("mi",-1,-1),new r("si",-1,-1),new r("ti",-1,-1),new r("vi",-1,-1),new r("lo",-1,-1),new r("celo",31,-1),new r("glielo",31,-1),new r("melo",31,-1),new r("telo",31,-1),new r("velo",31,-1)],z=[new r("ando",-1,1),new r("endo",-1,1),new r("ar",-1,2),new r("er",-1,2),new r("ir",-1,2)],P=[new r("ic",-1,-1),new r("abil",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],F=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],S=[new r("ica",-1,1),new r("logia",-1,3),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,9),new r("anza",-1,1),new r("enza",-1,5),new r("ice",-1,1),new r("atrice",7,1),new r("iche",-1,1),new r("logie",-1,3),new r("abile",-1,1),new r("ibile",-1,1),new r("usione",-1,4),new r("azione",-1,2),new r("uzione",-1,4),new r("atore",-1,2),new r("ose",-1,1),new r("ante",-1,1),new r("mente",-1,1),new r("amente",19,7),new r("iste",-1,1),new r("ive",-1,9),new r("anze",-1,1),new r("enze",-1,5),new r("ici",-1,1),new r("atrici",25,1),new r("ichi",-1,1),new r("abili",-1,1),new r("ibili",-1,1),new r("ismi",-1,1),new r("usioni",-1,4),new r("azioni",-1,2),new r("uzioni",-1,4),new r("atori",-1,2),new r("osi",-1,1),new r("anti",-1,1),new r("amenti",-1,6),new r("imenti",-1,6),new r("isti",-1,1),new r("ivi",-1,9),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,6),new r("imento",-1,6),new r("ivo",-1,9),new r("ità",-1,8),new r("istà",-1,1),new r("istè",-1,1),new r("istì",-1,1)],W=[new r("isca",-1,1),new r("enda",-1,1),new r("ata",-1,1),new r("ita",-1,1),new r("uta",-1,1),new r("ava",-1,1),new r("eva",-1,1),new r("iva",-1,1),new r("erebbe",-1,1),new r("irebbe",-1,1),new r("isce",-1,1),new r("ende",-1,1),new r("are",-1,1),new r("ere",-1,1),new r("ire",-1,1),new r("asse",-1,1),new r("ate",-1,1),new r("avate",16,1),new r("evate",16,1),new r("ivate",16,1),new r("ete",-1,1),new r("erete",20,1),new r("irete",20,1),new r("ite",-1,1),new r("ereste",-1,1),new r("ireste",-1,1),new r("ute",-1,1),new r("erai",-1,1),new r("irai",-1,1),new r("isci",-1,1),new r("endi",-1,1),new r("erei",-1,1),new r("irei",-1,1),new r("assi",-1,1),new r("ati",-1,1),new r("iti",-1,1),new r("eresti",-1,1),new r("iresti",-1,1),new r("uti",-1,1),new r("avi",-1,1),new r("evi",-1,1),new r("ivi",-1,1),new r("isco",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("Yamo",-1,1),new r("iamo",-1,1),new r("avamo",-1,1),new r("evamo",-1,1),new r("ivamo",-1,1),new r("eremo",-1,1),new r("iremo",-1,1),new r("assimo",-1,1),new r("ammo",-1,1),new r("emmo",-1,1),new r("eremmo",54,1),new r("iremmo",54,1),new r("immo",-1,1),new r("ano",-1,1),new r("iscano",58,1),new r("avano",58,1),new r("evano",58,1),new r("ivano",58,1),new r("eranno",-1,1),new r("iranno",-1,1),new r("ono",-1,1),new r("iscono",65,1),new r("arono",65,1),new r("erono",65,1),new r("irono",65,1),new r("erebbero",-1,1),new r("irebbero",-1,1),new r("assero",-1,1),new r("essero",-1,1),new r("issero",-1,1),new r("ato",-1,1),new r("ito",-1,1),new r("uto",-1,1),new r("avo",-1,1),new r("evo",-1,1),new r("ivo",-1,1),new r("ar",-1,1),new r("ir",-1,1),new r("erà",-1,1),new r("irà",-1,1),new r("erò",-1,1),new r("irò",-1,1)],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],y=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],U=[17],x=new n;this.setCurrent=function(e){x.setCurrent(e)},this.getCurrent=function(){return x.getCurrent()},this.stem=function(){var e=x.cursor;return i(),x.cursor=e,u(),x.limit_backward=e,x.cursor=x.limit,f(),x.cursor=x.limit,v()||(x.cursor=x.limit,b()),x.cursor=x.limit,_(),x.cursor=x.limit_backward,c(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.ja.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.ja.min.js new file mode 100644 index 00000000..5f254ebe --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.ja.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(e=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=e);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=e;else if(n(e))break}else if(n(e))break}function n(r){return C.cursor=r,r>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,d=_,t()||(_=C.cursor,_<3&&(_=3),t()||(d=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var r;;)if(C.bra=C.cursor,r=C.find_among(p,3))switch(C.ket=C.cursor,r){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return d<=C.cursor}function a(){var r=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-r,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var r;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.slice_del(),w=!0,a())))}function m(){var r;u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.eq_s_b(3,"gem")||(C.cursor=C.limit-r,C.slice_del(),a())))}function f(){var r,e,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,r=C.find_among_b(h,5))switch(C.bra=C.cursor,r){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(j,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(e=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-e,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,r=C.find_among_b(k,6))switch(C.bra=C.cursor,r){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(z,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var d,_,w,b=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],p=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],g=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],h=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],k=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],v=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(r){C.setCurrent(r)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var e=C.cursor;return r(),C.cursor=e,o(),C.limit_backward=e,C.cursor=C.limit,f(),C.cursor=C.limit_backward,s(),!0}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.no.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.no.min.js new file mode 100644 index 00000000..92bc7e4e --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.no.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Norwegian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.pt.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.pt.min.js new file mode 100644 index 00000000..6c16996d --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.pt.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Portuguese` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(k,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("a~");continue;case 2:z.slice_from("o~");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function n(){if(z.out_grouping(y,97,250)){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!0;z.cursor++}return!1}return!0}function i(){if(z.in_grouping(y,97,250))for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return g=z.cursor,!0}function o(){var e,r,s=z.cursor;if(z.in_grouping(y,97,250))if(e=z.cursor,n()){if(z.cursor=e,i())return}else g=z.cursor;if(z.cursor=s,z.out_grouping(y,97,250)){if(r=z.cursor,n()){if(z.cursor=r,!z.in_grouping(y,97,250)||z.cursor>=z.limit)return;z.cursor++}g=z.cursor}}function t(){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return!0}function a(){var e=z.cursor;g=z.limit,b=g,h=g,o(),z.cursor=e,t()&&(b=z.cursor,t()&&(h=z.cursor))}function u(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(q,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("ã");continue;case 2:z.slice_from("õ");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function w(){return g<=z.cursor}function m(){return b<=z.cursor}function c(){return h<=z.cursor}function l(){var e;if(z.ket=z.cursor,!(e=z.find_among_b(F,45)))return!1;switch(z.bra=z.cursor,e){case 1:if(!c())return!1;z.slice_del();break;case 2:if(!c())return!1;z.slice_from("log");break;case 3:if(!c())return!1;z.slice_from("u");break;case 4:if(!c())return!1;z.slice_from("ente");break;case 5:if(!m())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(j,4),e&&(z.bra=z.cursor,c()&&(z.slice_del(),1==e&&(z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del()))));break;case 6:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(C,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 7:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(P,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 8:if(!c())return!1;z.slice_del(),z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del());break;case 9:if(!w()||!z.eq_s_b(1,"e"))return!1;z.slice_from("ir")}return!0}function f(){var e,r;if(z.cursor>=g){if(r=z.limit_backward,z.limit_backward=g,z.ket=z.cursor,e=z.find_among_b(S,120))return z.bra=z.cursor,1==e&&z.slice_del(),z.limit_backward=r,!0;z.limit_backward=r}return!1}function d(){var e;z.ket=z.cursor,(e=z.find_among_b(W,7))&&(z.bra=z.cursor,1==e&&w()&&z.slice_del())}function v(e,r){if(z.eq_s_b(1,e)){z.bra=z.cursor;var s=z.limit-z.cursor;if(z.eq_s_b(1,r))return z.cursor=z.limit-s,w()&&z.slice_del(),!1}return!0}function p(){var e;if(z.ket=z.cursor,e=z.find_among_b(L,4))switch(z.bra=z.cursor,e){case 1:w()&&(z.slice_del(),z.ket=z.cursor,z.limit-z.cursor,v("u","g")&&v("i","c"));break;case 2:z.slice_from("c")}}function _(){if(!l()&&(z.cursor=z.limit,!f()))return z.cursor=z.limit,void d();z.cursor=z.limit,z.ket=z.cursor,z.eq_s_b(1,"i")&&(z.bra=z.cursor,z.eq_s_b(1,"c")&&(z.cursor=z.limit,w()&&z.slice_del()))}var h,b,g,k=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],q=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],j=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],C=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],P=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],F=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],S=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],W=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],L=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],y=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],z=new s;this.setCurrent=function(e){z.setCurrent(e)},this.getCurrent=function(){return z.getCurrent()},this.stem=function(){var r=z.cursor;return e(),z.cursor=r,a(),z.limit_backward=r,z.cursor=z.limit,_(),z.cursor=z.limit,p(),z.cursor=z.limit_backward,u(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.ro.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.ro.min.js new file mode 100644 index 00000000..72771401 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.ro.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Romanian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=function(){var i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(e,i){L.eq_s(1,e)&&(L.ket=L.cursor,L.in_grouping(W,97,259)&&L.slice_from(i))}function n(){for(var i,r;;){if(i=L.cursor,L.in_grouping(W,97,259)&&(r=L.cursor,L.bra=r,e("u","U"),L.cursor=r,e("i","I")),L.cursor=i,L.cursor>=L.limit)break;L.cursor++}}function t(){if(L.out_grouping(W,97,259)){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}return!0}function a(){if(L.in_grouping(W,97,259))for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}function o(){var e,i,r=L.cursor;if(L.in_grouping(W,97,259)){if(e=L.cursor,!t())return void(h=L.cursor);if(L.cursor=e,!a())return void(h=L.cursor)}L.cursor=r,L.out_grouping(W,97,259)&&(i=L.cursor,t()&&(L.cursor=i,L.in_grouping(W,97,259)&&L.cursor=L.limit)return!1;L.cursor++}for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!1;L.cursor++}return!0}function c(){var e=L.cursor;h=L.limit,k=h,g=h,o(),L.cursor=e,u()&&(k=L.cursor,u()&&(g=L.cursor))}function s(){for(var e;;){if(L.bra=L.cursor,e=L.find_among(z,3))switch(L.ket=L.cursor,e){case 1:L.slice_from("i");continue;case 2:L.slice_from("u");continue;case 3:if(L.cursor>=L.limit)break;L.cursor++;continue}break}}function w(){return h<=L.cursor}function m(){return k<=L.cursor}function l(){return g<=L.cursor}function f(){var e,i;if(L.ket=L.cursor,(e=L.find_among_b(C,16))&&(L.bra=L.cursor,m()))switch(e){case 1:L.slice_del();break;case 2:L.slice_from("a");break;case 3:L.slice_from("e");break;case 4:L.slice_from("i");break;case 5:i=L.limit-L.cursor,L.eq_s_b(2,"ab")||(L.cursor=L.limit-i,L.slice_from("i"));break;case 6:L.slice_from("at");break;case 7:L.slice_from("aţi")}}function p(){var e,i=L.limit-L.cursor;if(L.ket=L.cursor,(e=L.find_among_b(P,46))&&(L.bra=L.cursor,m())){switch(e){case 1:L.slice_from("abil");break;case 2:L.slice_from("ibil");break;case 3:L.slice_from("iv");break;case 4:L.slice_from("ic");break;case 5:L.slice_from("at");break;case 6:L.slice_from("it")}return _=!0,L.cursor=L.limit-i,!0}return!1}function d(){var e,i;for(_=!1;;)if(i=L.limit-L.cursor,!p()){L.cursor=L.limit-i;break}if(L.ket=L.cursor,(e=L.find_among_b(F,62))&&(L.bra=L.cursor,l())){switch(e){case 1:L.slice_del();break;case 2:L.eq_s_b(1,"ţ")&&(L.bra=L.cursor,L.slice_from("t"));break;case 3:L.slice_from("ist")}_=!0}}function b(){var e,i,r;if(L.cursor>=h){if(i=L.limit_backward,L.limit_backward=h,L.ket=L.cursor,e=L.find_among_b(q,94))switch(L.bra=L.cursor,e){case 1:if(r=L.limit-L.cursor,!L.out_grouping_b(W,97,259)&&(L.cursor=L.limit-r,!L.eq_s_b(1,"u")))break;case 2:L.slice_del()}L.limit_backward=i}}function v(){var e;L.ket=L.cursor,(e=L.find_among_b(S,5))&&(L.bra=L.cursor,w()&&1==e&&L.slice_del())}var _,g,k,h,z=[new i("",-1,3),new i("I",0,1),new i("U",0,2)],C=[new i("ea",-1,3),new i("aţia",-1,7),new i("aua",-1,2),new i("iua",-1,4),new i("aţie",-1,7),new i("ele",-1,3),new i("ile",-1,5),new i("iile",6,4),new i("iei",-1,4),new i("atei",-1,6),new i("ii",-1,4),new i("ului",-1,1),new i("ul",-1,1),new i("elor",-1,3),new i("ilor",-1,4),new i("iilor",14,4)],P=[new i("icala",-1,4),new i("iciva",-1,4),new i("ativa",-1,5),new i("itiva",-1,6),new i("icale",-1,4),new i("aţiune",-1,5),new i("iţiune",-1,6),new i("atoare",-1,5),new i("itoare",-1,6),new i("ătoare",-1,5),new i("icitate",-1,4),new i("abilitate",-1,1),new i("ibilitate",-1,2),new i("ivitate",-1,3),new i("icive",-1,4),new i("ative",-1,5),new i("itive",-1,6),new i("icali",-1,4),new i("atori",-1,5),new i("icatori",18,4),new i("itori",-1,6),new i("ători",-1,5),new i("icitati",-1,4),new i("abilitati",-1,1),new i("ivitati",-1,3),new i("icivi",-1,4),new i("ativi",-1,5),new i("itivi",-1,6),new i("icităi",-1,4),new i("abilităi",-1,1),new i("ivităi",-1,3),new i("icităţi",-1,4),new i("abilităţi",-1,1),new i("ivităţi",-1,3),new i("ical",-1,4),new i("ator",-1,5),new i("icator",35,4),new i("itor",-1,6),new i("ător",-1,5),new i("iciv",-1,4),new i("ativ",-1,5),new i("itiv",-1,6),new i("icală",-1,4),new i("icivă",-1,4),new i("ativă",-1,5),new i("itivă",-1,6)],F=[new i("ica",-1,1),new i("abila",-1,1),new i("ibila",-1,1),new i("oasa",-1,1),new i("ata",-1,1),new i("ita",-1,1),new i("anta",-1,1),new i("ista",-1,3),new i("uta",-1,1),new i("iva",-1,1),new i("ic",-1,1),new i("ice",-1,1),new i("abile",-1,1),new i("ibile",-1,1),new i("isme",-1,3),new i("iune",-1,2),new i("oase",-1,1),new i("ate",-1,1),new i("itate",17,1),new i("ite",-1,1),new i("ante",-1,1),new i("iste",-1,3),new i("ute",-1,1),new i("ive",-1,1),new i("ici",-1,1),new i("abili",-1,1),new i("ibili",-1,1),new i("iuni",-1,2),new i("atori",-1,1),new i("osi",-1,1),new i("ati",-1,1),new i("itati",30,1),new i("iti",-1,1),new i("anti",-1,1),new i("isti",-1,3),new i("uti",-1,1),new i("işti",-1,3),new i("ivi",-1,1),new i("ităi",-1,1),new i("oşi",-1,1),new i("ităţi",-1,1),new i("abil",-1,1),new i("ibil",-1,1),new i("ism",-1,3),new i("ator",-1,1),new i("os",-1,1),new i("at",-1,1),new i("it",-1,1),new i("ant",-1,1),new i("ist",-1,3),new i("ut",-1,1),new i("iv",-1,1),new i("ică",-1,1),new i("abilă",-1,1),new i("ibilă",-1,1),new i("oasă",-1,1),new i("ată",-1,1),new i("ită",-1,1),new i("antă",-1,1),new i("istă",-1,3),new i("ută",-1,1),new i("ivă",-1,1)],q=[new i("ea",-1,1),new i("ia",-1,1),new i("esc",-1,1),new i("ăsc",-1,1),new i("ind",-1,1),new i("ând",-1,1),new i("are",-1,1),new i("ere",-1,1),new i("ire",-1,1),new i("âre",-1,1),new i("se",-1,2),new i("ase",10,1),new i("sese",10,2),new i("ise",10,1),new i("use",10,1),new i("âse",10,1),new i("eşte",-1,1),new i("ăşte",-1,1),new i("eze",-1,1),new i("ai",-1,1),new i("eai",19,1),new i("iai",19,1),new i("sei",-1,2),new i("eşti",-1,1),new i("ăşti",-1,1),new i("ui",-1,1),new i("ezi",-1,1),new i("âi",-1,1),new i("aşi",-1,1),new i("seşi",-1,2),new i("aseşi",29,1),new i("seseşi",29,2),new i("iseşi",29,1),new i("useşi",29,1),new i("âseşi",29,1),new i("işi",-1,1),new i("uşi",-1,1),new i("âşi",-1,1),new i("aţi",-1,2),new i("eaţi",38,1),new i("iaţi",38,1),new i("eţi",-1,2),new i("iţi",-1,2),new i("âţi",-1,2),new i("arăţi",-1,1),new i("serăţi",-1,2),new i("aserăţi",45,1),new i("seserăţi",45,2),new i("iserăţi",45,1),new i("userăţi",45,1),new i("âserăţi",45,1),new i("irăţi",-1,1),new i("urăţi",-1,1),new i("ârăţi",-1,1),new i("am",-1,1),new i("eam",54,1),new i("iam",54,1),new i("em",-1,2),new i("asem",57,1),new i("sesem",57,2),new i("isem",57,1),new i("usem",57,1),new i("âsem",57,1),new i("im",-1,2),new i("âm",-1,2),new i("ăm",-1,2),new i("arăm",65,1),new i("serăm",65,2),new i("aserăm",67,1),new i("seserăm",67,2),new i("iserăm",67,1),new i("userăm",67,1),new i("âserăm",67,1),new i("irăm",65,1),new i("urăm",65,1),new i("ârăm",65,1),new i("au",-1,1),new i("eau",76,1),new i("iau",76,1),new i("indu",-1,1),new i("ându",-1,1),new i("ez",-1,1),new i("ească",-1,1),new i("ară",-1,1),new i("seră",-1,2),new i("aseră",84,1),new i("seseră",84,2),new i("iseră",84,1),new i("useră",84,1),new i("âseră",84,1),new i("iră",-1,1),new i("ură",-1,1),new i("âră",-1,1),new i("ează",-1,1)],S=[new i("a",-1,1),new i("e",-1,1),new i("ie",1,1),new i("i",-1,1),new i("ă",-1,1)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var e=L.cursor;return n(),L.cursor=e,c(),L.limit_backward=e,L.cursor=L.limit,f(),L.cursor=L.limit,d(),L.cursor=L.limit,_||(L.cursor=L.limit,b(),L.cursor=L.limit),v(),L.cursor=L.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.ru.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.ru.min.js new file mode 100644 index 00000000..186cc485 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.ru.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Russian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){function e(){for(;!W.in_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function t(){for(;!W.out_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function w(){b=W.limit,_=b,e()&&(b=W.cursor,t()&&e()&&t()&&(_=W.cursor))}function i(){return _<=W.cursor}function u(e,n){var r,t;if(W.ket=W.cursor,r=W.find_among_b(e,n)){switch(W.bra=W.cursor,r){case 1:if(t=W.limit-W.cursor,!W.eq_s_b(1,"а")&&(W.cursor=W.limit-t,!W.eq_s_b(1,"я")))return!1;case 2:W.slice_del()}return!0}return!1}function o(){return u(h,9)}function s(e,n){var r;return W.ket=W.cursor,!!(r=W.find_among_b(e,n))&&(W.bra=W.cursor,1==r&&W.slice_del(),!0)}function c(){return s(g,26)}function m(){return!!c()&&(u(C,8),!0)}function f(){return s(k,2)}function l(){return u(P,46)}function a(){s(v,36)}function p(){var e;W.ket=W.cursor,(e=W.find_among_b(F,2))&&(W.bra=W.cursor,i()&&1==e&&W.slice_del())}function d(){var e;if(W.ket=W.cursor,e=W.find_among_b(q,4))switch(W.bra=W.cursor,e){case 1:if(W.slice_del(),W.ket=W.cursor,!W.eq_s_b(1,"н"))break;W.bra=W.cursor;case 2:if(!W.eq_s_b(1,"н"))break;case 3:W.slice_del()}}var _,b,h=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],g=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],C=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],k=[new n("сь",-1,1),new n("ся",-1,1)],P=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],v=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],F=[new n("ост",-1,1),new n("ость",-1,1)],q=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],S=[33,65,8,232],W=new r;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){return w(),W.cursor=W.limit,!(W.cursor=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.sv.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.sv.min.js new file mode 100644 index 00000000..3e5eb640 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.sv.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Swedish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.th.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.th.min.js new file mode 100644 index 00000000..dee3aac6 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.th.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.tr.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.tr.min.js new file mode 100644 index 00000000..563f6ec1 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.tr.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Turkish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=function(){var i=r.stemmerSupport.Among,e=r.stemmerSupport.SnowballProgram,n=new function(){function r(r,i,e){for(;;){var n=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(r,i,e)){Dr.cursor=Dr.limit-n;break}if(Dr.cursor=Dr.limit-n,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function n(){var i,e;i=Dr.limit-Dr.cursor,r(Wr,97,305);for(var n=0;nDr.limit_backward&&(Dr.cursor--,e=Dr.limit-Dr.cursor,i()))?(Dr.cursor=Dr.limit-e,!0):(Dr.cursor=Dr.limit-n,r()?(Dr.cursor=Dr.limit-n,!1):(Dr.cursor=Dr.limit-n,!(Dr.cursor<=Dr.limit_backward)&&(Dr.cursor--,!!i()&&(Dr.cursor=Dr.limit-n,!0))))}function u(r){return t(r,function(){return Dr.in_grouping_b(Wr,97,305)})}function o(){return u(function(){return Dr.eq_s_b(1,"n")})}function s(){return u(function(){return Dr.eq_s_b(1,"s")})}function c(){return u(function(){return Dr.eq_s_b(1,"y")})}function l(){return t(function(){return Dr.in_grouping_b(Lr,105,305)},function(){return Dr.out_grouping_b(Wr,97,305)})}function a(){return Dr.find_among_b(ur,10)&&l()}function m(){return n()&&Dr.in_grouping_b(Lr,105,305)&&s()}function d(){return Dr.find_among_b(or,2)}function f(){return n()&&Dr.in_grouping_b(Lr,105,305)&&c()}function b(){return n()&&Dr.find_among_b(sr,4)}function w(){return n()&&Dr.find_among_b(cr,4)&&o()}function _(){return n()&&Dr.find_among_b(lr,2)&&c()}function k(){return n()&&Dr.find_among_b(ar,2)}function p(){return n()&&Dr.find_among_b(mr,4)}function g(){return n()&&Dr.find_among_b(dr,2)}function y(){return n()&&Dr.find_among_b(fr,4)}function z(){return n()&&Dr.find_among_b(br,2)}function v(){return n()&&Dr.find_among_b(wr,2)&&c()}function h(){return Dr.eq_s_b(2,"ki")}function q(){return n()&&Dr.find_among_b(_r,2)&&o()}function C(){return n()&&Dr.find_among_b(kr,4)&&c()}function P(){return n()&&Dr.find_among_b(pr,4)}function F(){return n()&&Dr.find_among_b(gr,4)&&c()}function S(){return Dr.find_among_b(yr,4)}function W(){return n()&&Dr.find_among_b(zr,2)}function L(){return n()&&Dr.find_among_b(vr,4)}function x(){return n()&&Dr.find_among_b(hr,8)}function A(){return Dr.find_among_b(qr,2)}function E(){return n()&&Dr.find_among_b(Cr,32)&&c()}function j(){return Dr.find_among_b(Pr,8)&&c()}function T(){return n()&&Dr.find_among_b(Fr,4)&&c()}function Z(){return Dr.eq_s_b(3,"ken")&&c()}function B(){var r=Dr.limit-Dr.cursor;return!(T()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,Z()))))}function D(){if(A()){var r=Dr.limit-Dr.cursor;if(S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T())return!1}return!0}function G(){if(W()){Dr.bra=Dr.cursor,Dr.slice_del();var r=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,x()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,T()||(Dr.cursor=Dr.limit-r)))),nr=!1,!1}return!0}function H(){if(!L())return!0;var r=Dr.limit-Dr.cursor;return!E()&&(Dr.cursor=Dr.limit-r,!j())}function I(){var r,i=Dr.limit-Dr.cursor;return!(S()||(Dr.cursor=Dr.limit-i,F()||(Dr.cursor=Dr.limit-i,P()||(Dr.cursor=Dr.limit-i,C()))))||(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,T()||(Dr.cursor=Dr.limit-r),!1)}function J(){var r,i=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,nr=!0,B()&&(Dr.cursor=Dr.limit-i,D()&&(Dr.cursor=Dr.limit-i,G()&&(Dr.cursor=Dr.limit-i,H()&&(Dr.cursor=Dr.limit-i,I()))))){if(Dr.cursor=Dr.limit-i,!x())return;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T()||(Dr.cursor=Dr.limit-r)}Dr.bra=Dr.cursor,Dr.slice_del()}function K(){var r,i,e,n;if(Dr.ket=Dr.cursor,h()){if(r=Dr.limit-Dr.cursor,p())return Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,a()&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))),!0;if(Dr.cursor=Dr.limit-r,w()){if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,e=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-e,!m()&&(Dr.cursor=Dr.limit-e,!K())))return!0;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}return!0}if(Dr.cursor=Dr.limit-r,g()){if(n=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-n,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-n,!K())return!1;return!0}}return!1}function M(r){if(Dr.ket=Dr.cursor,!g()&&(Dr.cursor=Dr.limit-r,!k()))return!1;var i=Dr.limit-Dr.cursor;if(d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-i,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-i,!K())return!1;return!0}function N(r){if(Dr.ket=Dr.cursor,!z()&&(Dr.cursor=Dr.limit-r,!b()))return!1;var i=Dr.limit-Dr.cursor;return!(!m()&&(Dr.cursor=Dr.limit-i,!d()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)}function O(){var r,i=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,!(!w()&&(Dr.cursor=Dr.limit-i,!v()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,!(!W()||(Dr.bra=Dr.cursor,Dr.slice_del(),!K()))||(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!(a()||(Dr.cursor=Dr.limit-r,m()||(Dr.cursor=Dr.limit-r,K())))||(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)))}function Q(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,!p()&&(Dr.cursor=Dr.limit-e,!f()&&(Dr.cursor=Dr.limit-e,!_())))return!1;if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,a())Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()||(Dr.cursor=Dr.limit-i);else if(Dr.cursor=Dr.limit-r,!W())return!0;return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,K(),!0}function R(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,W())return Dr.bra=Dr.cursor,Dr.slice_del(),void K();if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,q())if(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-r,!m())){if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!W())return;if(Dr.bra=Dr.cursor,Dr.slice_del(),!K())return}Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}else if(Dr.cursor=Dr.limit-e,!M(e)&&(Dr.cursor=Dr.limit-e,!N(e))){if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,y())return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,i=Dr.limit-Dr.cursor,void(a()?(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())):(Dr.cursor=Dr.limit-i,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,K())));if(Dr.cursor=Dr.limit-e,!O()){if(Dr.cursor=Dr.limit-e,d())return Dr.bra=Dr.cursor,void Dr.slice_del();Dr.cursor=Dr.limit-e,K()||(Dr.cursor=Dr.limit-e,Q()||(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,(a()||(Dr.cursor=Dr.limit-e,m()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))))}}}function U(){var r;if(Dr.ket=Dr.cursor,r=Dr.find_among_b(Sr,4))switch(Dr.bra=Dr.cursor,r){case 1:Dr.slice_from("p");break;case 2:Dr.slice_from("ç");break;case 3:Dr.slice_from("t");break;case 4:Dr.slice_from("k")}}function V(){for(;;){var r=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(Wr,97,305)){Dr.cursor=Dr.limit-r;break}if(Dr.cursor=Dr.limit-r,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function X(r,i,e){if(Dr.cursor=Dr.limit-r,V()){var n=Dr.limit-Dr.cursor;if(!Dr.eq_s_b(1,i)&&(Dr.cursor=Dr.limit-n,!Dr.eq_s_b(1,e)))return!0;Dr.cursor=Dr.limit-r;var t=Dr.cursor;return Dr.insert(Dr.cursor,Dr.cursor,e),Dr.cursor=t,!1}return!0}function Y(){var r=Dr.limit-Dr.cursor;(Dr.eq_s_b(1,"d")||(Dr.cursor=Dr.limit-r,Dr.eq_s_b(1,"g")))&&X(r,"a","ı")&&X(r,"e","i")&&X(r,"o","u")&&X(r,"ö","ü")}function $(){for(var r,i=Dr.cursor,e=2;;){for(r=Dr.cursor;!Dr.in_grouping(Wr,97,305);){if(Dr.cursor>=Dr.limit)return Dr.cursor=r,!(e>0)&&(Dr.cursor=i,!0);Dr.cursor++}e--}}function rr(r,i,e){for(;!Dr.eq_s(i,e);){if(Dr.cursor>=Dr.limit)return!0;Dr.cursor++}return(tr=i)!=Dr.limit||(Dr.cursor=r,!1)}function ir(){var r=Dr.cursor;return!rr(r,2,"ad")||(Dr.cursor=r,!rr(r,5,"soyad"))}function er(){var r=Dr.cursor;return!ir()&&(Dr.limit_backward=r,Dr.cursor=Dr.limit,Y(),Dr.cursor=Dr.limit,U(),!0)}var nr,tr,ur=[new i("m",-1,-1),new i("n",-1,-1),new i("miz",-1,-1),new i("niz",-1,-1),new i("muz",-1,-1),new i("nuz",-1,-1),new i("müz",-1,-1),new i("nüz",-1,-1),new i("mız",-1,-1),new i("nız",-1,-1)],or=[new i("leri",-1,-1),new i("ları",-1,-1)],sr=[new i("ni",-1,-1),new i("nu",-1,-1),new i("nü",-1,-1),new i("nı",-1,-1)],cr=[new i("in",-1,-1),new i("un",-1,-1),new i("ün",-1,-1),new i("ın",-1,-1)],lr=[new i("a",-1,-1),new i("e",-1,-1)],ar=[new i("na",-1,-1),new i("ne",-1,-1)],mr=[new i("da",-1,-1),new i("ta",-1,-1),new i("de",-1,-1),new i("te",-1,-1)],dr=[new i("nda",-1,-1),new i("nde",-1,-1)],fr=[new i("dan",-1,-1),new i("tan",-1,-1),new i("den",-1,-1),new i("ten",-1,-1)],br=[new i("ndan",-1,-1),new i("nden",-1,-1)],wr=[new i("la",-1,-1),new i("le",-1,-1)],_r=[new i("ca",-1,-1),new i("ce",-1,-1)],kr=[new i("im",-1,-1),new i("um",-1,-1),new i("üm",-1,-1),new i("ım",-1,-1)],pr=[new i("sin",-1,-1),new i("sun",-1,-1),new i("sün",-1,-1),new i("sın",-1,-1)],gr=[new i("iz",-1,-1),new i("uz",-1,-1),new i("üz",-1,-1),new i("ız",-1,-1)],yr=[new i("siniz",-1,-1),new i("sunuz",-1,-1),new i("sünüz",-1,-1),new i("sınız",-1,-1)],zr=[new i("lar",-1,-1),new i("ler",-1,-1)],vr=[new i("niz",-1,-1),new i("nuz",-1,-1),new i("nüz",-1,-1),new i("nız",-1,-1)],hr=[new i("dir",-1,-1),new i("tir",-1,-1),new i("dur",-1,-1),new i("tur",-1,-1),new i("dür",-1,-1),new i("tür",-1,-1),new i("dır",-1,-1),new i("tır",-1,-1)],qr=[new i("casına",-1,-1),new i("cesine",-1,-1)],Cr=[new i("di",-1,-1),new i("ti",-1,-1),new i("dik",-1,-1),new i("tik",-1,-1),new i("duk",-1,-1),new i("tuk",-1,-1),new i("dük",-1,-1),new i("tük",-1,-1),new i("dık",-1,-1),new i("tık",-1,-1),new i("dim",-1,-1),new i("tim",-1,-1),new i("dum",-1,-1),new i("tum",-1,-1),new i("düm",-1,-1),new i("tüm",-1,-1),new i("dım",-1,-1),new i("tım",-1,-1),new i("din",-1,-1),new i("tin",-1,-1),new i("dun",-1,-1),new i("tun",-1,-1),new i("dün",-1,-1),new i("tün",-1,-1),new i("dın",-1,-1),new i("tın",-1,-1),new i("du",-1,-1),new i("tu",-1,-1),new i("dü",-1,-1),new i("tü",-1,-1),new i("dı",-1,-1),new i("tı",-1,-1)],Pr=[new i("sa",-1,-1),new i("se",-1,-1),new i("sak",-1,-1),new i("sek",-1,-1),new i("sam",-1,-1),new i("sem",-1,-1),new i("san",-1,-1),new i("sen",-1,-1)],Fr=[new i("miş",-1,-1),new i("muş",-1,-1),new i("müş",-1,-1),new i("mış",-1,-1)],Sr=[new i("b",-1,1),new i("c",-1,2),new i("d",-1,3),new i("ğ",-1,4)],Wr=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],Lr=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],xr=[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],Ar=[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],Er=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],jr=[17],Tr=[65],Zr=[65],Br=[["a",xr,97,305],["e",Ar,101,252],["ı",Er,97,305],["i",jr,101,105],["o",Tr,111,117],["ö",Zr,246,252],["u",Tr,111,117]],Dr=new e;this.setCurrent=function(r){Dr.setCurrent(r)},this.getCurrent=function(){return Dr.getCurrent()},this.stem=function(){return!!($()&&(Dr.limit_backward=Dr.cursor,Dr.cursor=Dr.limit,J(),Dr.cursor=Dr.limit,nr&&(R(),Dr.cursor=Dr.limit_backward,er())))}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.vi.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.vi.min.js new file mode 100644 index 00000000..22aed28c --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.vi.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/min/lunr.zh.min.js b/2.6.0/assets/javascripts/lunr/min/lunr.zh.min.js new file mode 100644 index 00000000..7727bbe2 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/min/lunr.zh.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("nodejieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 以 于 上 他 而 后 之 来 及 了 因 下 可 到 由 这 与 也 此 但 并 个 其 已 无 小 我 们 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/tinyseg.js b/2.6.0/assets/javascripts/lunr/tinyseg.js new file mode 100644 index 00000000..167fa6dd --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/tinyseg.js @@ -0,0 +1,206 @@ +/** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ +;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like environments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + factory()(root.lunr); + } +}(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + + return function(lunr) { + // TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript + // (c) 2008 Taku Kudo + // TinySegmenter is freely distributable under the terms of a new BSD licence. + // For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt + + function TinySegmenter() { + var patterns = { + "[一二三四五六七八九十百千万億兆]":"M", + "[一-龠々〆ヵヶ]":"H", + "[ぁ-ん]":"I", + "[ァ-ヴーア-ン゙ー]":"K", + "[a-zA-Za-zA-Z]":"A", + "[0-90-9]":"N" + } + this.chartype_ = []; + for (var i in patterns) { + var regexp = new RegExp(i); + this.chartype_.push([regexp, patterns[i]]); + } + + this.BIAS__ = -332 + this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378}; + this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920}; + this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266}; + this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352}; + this.BP2__ = {"BO":60,"OO":-1762}; + this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965}; + this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146}; + this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699}; + this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973}; + this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682}; + this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669}; + this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990}; + this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832}; + this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649}; + this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393}; + this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841}; + this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68}; + this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591}; + this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685}; + this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156}; + this.TW1__ = {"につい":-4681,"東京都":2026}; + this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216}; + this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287}; + this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865}; + this.UC1__ = {"A":484,"K":93,"M":645,"O":-505}; + this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646}; + this.UC3__ = {"A":-1370,"I":2311}; + this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646}; + this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831}; + this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387}; + this.UP1__ = {"O":-214}; + this.UP2__ = {"B":69,"O":935}; + this.UP3__ = {"B":189}; + this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422}; + this.UQ2__ = {"BH":216,"BI":113,"OK":1759}; + this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212}; + this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135}; + this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568}; + this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278}; + this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637}; + this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343}; + this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496}; + + return this; + } + TinySegmenter.prototype.ctype_ = function(str) { + for (var i in this.chartype_) { + if (str.match(this.chartype_[i][0])) { + return this.chartype_[i][1]; + } + } + return "O"; + } + + TinySegmenter.prototype.ts_ = function(v) { + if (v) { return v; } + return 0; + } + + TinySegmenter.prototype.segment = function(input) { + if (input == null || input == undefined || input == "") { + return []; + } + var result = []; + var seg = ["B3","B2","B1"]; + var ctype = ["O","O","O"]; + var o = input.split(""); + for (i = 0; i < o.length; ++i) { + seg.push(o[i]); + ctype.push(this.ctype_(o[i])) + } + seg.push("E1"); + seg.push("E2"); + seg.push("E3"); + ctype.push("O"); + ctype.push("O"); + ctype.push("O"); + var word = seg[3]; + var p1 = "U"; + var p2 = "U"; + var p3 = "U"; + for (var i = 4; i < seg.length - 3; ++i) { + var score = this.BIAS__; + var w1 = seg[i-3]; + var w2 = seg[i-2]; + var w3 = seg[i-1]; + var w4 = seg[i]; + var w5 = seg[i+1]; + var w6 = seg[i+2]; + var c1 = ctype[i-3]; + var c2 = ctype[i-2]; + var c3 = ctype[i-1]; + var c4 = ctype[i]; + var c5 = ctype[i+1]; + var c6 = ctype[i+2]; + score += this.ts_(this.UP1__[p1]); + score += this.ts_(this.UP2__[p2]); + score += this.ts_(this.UP3__[p3]); + score += this.ts_(this.BP1__[p1 + p2]); + score += this.ts_(this.BP2__[p2 + p3]); + score += this.ts_(this.UW1__[w1]); + score += this.ts_(this.UW2__[w2]); + score += this.ts_(this.UW3__[w3]); + score += this.ts_(this.UW4__[w4]); + score += this.ts_(this.UW5__[w5]); + score += this.ts_(this.UW6__[w6]); + score += this.ts_(this.BW1__[w2 + w3]); + score += this.ts_(this.BW2__[w3 + w4]); + score += this.ts_(this.BW3__[w4 + w5]); + score += this.ts_(this.TW1__[w1 + w2 + w3]); + score += this.ts_(this.TW2__[w2 + w3 + w4]); + score += this.ts_(this.TW3__[w3 + w4 + w5]); + score += this.ts_(this.TW4__[w4 + w5 + w6]); + score += this.ts_(this.UC1__[c1]); + score += this.ts_(this.UC2__[c2]); + score += this.ts_(this.UC3__[c3]); + score += this.ts_(this.UC4__[c4]); + score += this.ts_(this.UC5__[c5]); + score += this.ts_(this.UC6__[c6]); + score += this.ts_(this.BC1__[c2 + c3]); + score += this.ts_(this.BC2__[c3 + c4]); + score += this.ts_(this.BC3__[c4 + c5]); + score += this.ts_(this.TC1__[c1 + c2 + c3]); + score += this.ts_(this.TC2__[c2 + c3 + c4]); + score += this.ts_(this.TC3__[c3 + c4 + c5]); + score += this.ts_(this.TC4__[c4 + c5 + c6]); + // score += this.ts_(this.TC5__[c4 + c5 + c6]); + score += this.ts_(this.UQ1__[p1 + c1]); + score += this.ts_(this.UQ2__[p2 + c2]); + score += this.ts_(this.UQ3__[p3 + c3]); + score += this.ts_(this.BQ1__[p2 + c2 + c3]); + score += this.ts_(this.BQ2__[p2 + c3 + c4]); + score += this.ts_(this.BQ3__[p3 + c2 + c3]); + score += this.ts_(this.BQ4__[p3 + c3 + c4]); + score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]); + score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]); + score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]); + score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]); + var p = "O"; + if (score > 0) { + result.push(word); + word = ""; + p = "B"; + } + p1 = p2; + p2 = p3; + p3 = p; + word += seg[i]; + } + result.push(word); + + return result; + } + + lunr.TinySegmenter = TinySegmenter; + }; + +})); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/lunr/wordcut.js b/2.6.0/assets/javascripts/lunr/wordcut.js new file mode 100644 index 00000000..146f4b44 --- /dev/null +++ b/2.6.0/assets/javascripts/lunr/wordcut.js @@ -0,0 +1,6708 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.lunr || (g.lunr = {})).wordcut = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1; + }) + this.addWords(words, false) + } + if(finalize){ + this.finalizeDict(); + } + }, + + dictSeek: function (l, r, ch, strOffset, pos) { + var ans = null; + while (l <= r) { + var m = Math.floor((l + r) / 2), + dict_item = this.dict[m], + len = dict_item.length; + if (len <= strOffset) { + l = m + 1; + } else { + var ch_ = dict_item[strOffset]; + if (ch_ < ch) { + l = m + 1; + } else if (ch_ > ch) { + r = m - 1; + } else { + ans = m; + if (pos == LEFT) { + r = m - 1; + } else { + l = m + 1; + } + } + } + } + return ans; + }, + + isFinal: function (acceptor) { + return this.dict[acceptor.l].length == acceptor.strOffset; + }, + + createAcceptor: function () { + return { + l: 0, + r: this.dict.length - 1, + strOffset: 0, + isFinal: false, + dict: this, + transit: function (ch) { + return this.dict.transit(this, ch); + }, + isError: false, + tag: "DICT", + w: 1, + type: "DICT" + }; + }, + + transit: function (acceptor, ch) { + var l = this.dictSeek(acceptor.l, + acceptor.r, + ch, + acceptor.strOffset, + LEFT); + if (l !== null) { + var r = this.dictSeek(l, + acceptor.r, + ch, + acceptor.strOffset, + RIGHT); + acceptor.l = l; + acceptor.r = r; + acceptor.strOffset++; + acceptor.isFinal = this.isFinal(acceptor); + } else { + acceptor.isError = true; + } + return acceptor; + }, + + sortuniq: function(a){ + return a.sort().filter(function(item, pos, arr){ + return !pos || item != arr[pos - 1]; + }) + }, + + flatten: function(a){ + //[[1,2],[3]] -> [1,2,3] + return [].concat.apply([], a); + } +}; +module.exports = WordcutDict; + +}).call(this,"/dist/tmp") +},{"glob":16,"path":22}],3:[function(require,module,exports){ +var WordRule = { + createAcceptor: function(tag) { + if (tag["WORD_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + var lch = ch.toLowerCase(); + if (lch >= "a" && lch <= "z") { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "WORD_RULE", + type: "WORD_RULE", + w: 1}; + } +}; + +var NumberRule = { + createAcceptor: function(tag) { + if (tag["NUMBER_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (ch >= "0" && ch <= "9") { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "NUMBER_RULE", + type: "NUMBER_RULE", + w: 1}; + } +}; + +var SpaceRule = { + tag: "SPACE_RULE", + createAcceptor: function(tag) { + + if (tag["SPACE_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (ch == " " || ch == "\t" || ch == "\r" || ch == "\n" || + ch == "\u00A0" || ch=="\u2003"//nbsp and emsp + ) { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: SpaceRule.tag, + w: 1, + type: "SPACE_RULE"}; + } +} + +var SingleSymbolRule = { + tag: "SINSYM", + createAcceptor: function(tag) { + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (this.strOffset == 0 && ch.match(/^[\@\(\)\/\,\-\."`]$/)) { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "SINSYM", + w: 1, + type: "SINSYM"}; + } +} + + +var LatinRules = [WordRule, SpaceRule, SingleSymbolRule, NumberRule]; + +module.exports = LatinRules; + +},{}],4:[function(require,module,exports){ +var _ = require("underscore") + , WordcutCore = require("./wordcut_core"); +var PathInfoBuilder = { + + /* + buildByPartAcceptors: function(path, acceptors, i) { + var + var genInfos = partAcceptors.reduce(function(genInfos, acceptor) { + + }, []); + + return genInfos; + } + */ + + buildByAcceptors: function(path, finalAcceptors, i) { + var self = this; + var infos = finalAcceptors.map(function(acceptor) { + var p = i - acceptor.strOffset + 1 + , _info = path[p]; + + var info = {p: p, + mw: _info.mw + (acceptor.mw === undefined ? 0 : acceptor.mw), + w: acceptor.w + _info.w, + unk: (acceptor.unk ? acceptor.unk : 0) + _info.unk, + type: acceptor.type}; + + if (acceptor.type == "PART") { + for(var j = p + 1; j <= i; j++) { + path[j].merge = p; + } + info.merge = p; + } + + return info; + }); + return infos.filter(function(info) { return info; }); + }, + + fallback: function(path, leftBoundary, text, i) { + var _info = path[leftBoundary]; + if (text[i].match(/[\u0E48-\u0E4E]/)) { + if (leftBoundary != 0) + leftBoundary = path[leftBoundary].p; + return {p: leftBoundary, + mw: 0, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; +/* } else if(leftBoundary > 0 && path[leftBoundary].type !== "UNK") { + leftBoundary = path[leftBoundary].p; + return {p: leftBoundary, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; */ + } else { + return {p: leftBoundary, + mw: _info.mw, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; + } + }, + + build: function(path, finalAcceptors, i, leftBoundary, text) { + var basicPathInfos = this.buildByAcceptors(path, finalAcceptors, i); + if (basicPathInfos.length > 0) { + return basicPathInfos; + } else { + return [this.fallback(path, leftBoundary, text, i)]; + } + } +}; + +module.exports = function() { + return _.clone(PathInfoBuilder); +} + +},{"./wordcut_core":8,"underscore":25}],5:[function(require,module,exports){ +var _ = require("underscore"); + + +var PathSelector = { + selectPath: function(paths) { + var path = paths.reduce(function(selectedPath, path) { + if (selectedPath == null) { + return path; + } else { + if (path.unk < selectedPath.unk) + return path; + if (path.unk == selectedPath.unk) { + if (path.mw < selectedPath.mw) + return path + if (path.mw == selectedPath.mw) { + if (path.w < selectedPath.w) + return path; + } + } + return selectedPath; + } + }, null); + return path; + }, + + createPath: function() { + return [{p:null, w:0, unk:0, type: "INIT", mw:0}]; + } +}; + +module.exports = function() { + return _.clone(PathSelector); +}; + +},{"underscore":25}],6:[function(require,module,exports){ +function isMatch(pat, offset, ch) { + if (pat.length <= offset) + return false; + var _ch = pat[offset]; + return _ch == ch || + (_ch.match(/[กข]/) && ch.match(/[ก-ฮ]/)) || + (_ch.match(/[มบ]/) && ch.match(/[ก-ฮ]/)) || + (_ch.match(/\u0E49/) && ch.match(/[\u0E48-\u0E4B]/)); +} + +var Rule0 = { + pat: "เหก็ม", + createAcceptor: function(tag) { + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (isMatch(Rule0.pat, this.strOffset,ch)) { + this.isFinal = (this.strOffset + 1 == Rule0.pat.length); + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "THAI_RULE", + type: "THAI_RULE", + w: 1}; + } +}; + +var PartRule = { + createAcceptor: function(tag) { + return {strOffset: 0, + patterns: [ + "แก", "เก", "ก้", "กก์", "กา", "กี", "กิ", "กืก" + ], + isFinal: false, + transit: function(ch) { + var offset = this.strOffset; + this.patterns = this.patterns.filter(function(pat) { + return isMatch(pat, offset, ch); + }); + + if (this.patterns.length > 0) { + var len = 1 + offset; + this.isFinal = this.patterns.some(function(pat) { + return pat.length == len; + }); + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "PART", + type: "PART", + unk: 1, + w: 1}; + } +}; + +var ThaiRules = [Rule0, PartRule]; + +module.exports = ThaiRules; + +},{}],7:[function(require,module,exports){ +var sys = require("sys") + , WordcutDict = require("./dict") + , WordcutCore = require("./wordcut_core") + , PathInfoBuilder = require("./path_info_builder") + , PathSelector = require("./path_selector") + , Acceptors = require("./acceptors") + , latinRules = require("./latin_rules") + , thaiRules = require("./thai_rules") + , _ = require("underscore"); + + +var Wordcut = Object.create(WordcutCore); +Wordcut.defaultPathInfoBuilder = PathInfoBuilder; +Wordcut.defaultPathSelector = PathSelector; +Wordcut.defaultAcceptors = Acceptors; +Wordcut.defaultLatinRules = latinRules; +Wordcut.defaultThaiRules = thaiRules; +Wordcut.defaultDict = WordcutDict; + + +Wordcut.initNoDict = function(dict_path) { + var self = this; + self.pathInfoBuilder = new self.defaultPathInfoBuilder; + self.pathSelector = new self.defaultPathSelector; + self.acceptors = new self.defaultAcceptors; + self.defaultLatinRules.forEach(function(rule) { + self.acceptors.creators.push(rule); + }); + self.defaultThaiRules.forEach(function(rule) { + self.acceptors.creators.push(rule); + }); +}; + +Wordcut.init = function(dict_path, withDefault, additionalWords) { + withDefault = withDefault || false; + this.initNoDict(); + var dict = _.clone(this.defaultDict); + dict.init(dict_path, withDefault, additionalWords); + this.acceptors.creators.push(dict); +}; + +module.exports = Wordcut; + +},{"./acceptors":1,"./dict":2,"./latin_rules":3,"./path_info_builder":4,"./path_selector":5,"./thai_rules":6,"./wordcut_core":8,"sys":28,"underscore":25}],8:[function(require,module,exports){ +var WordcutCore = { + + buildPath: function(text) { + var self = this + , path = self.pathSelector.createPath() + , leftBoundary = 0; + self.acceptors.reset(); + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + self.acceptors.transit(ch); + + var possiblePathInfos = self + .pathInfoBuilder + .build(path, + self.acceptors.getFinalAcceptors(), + i, + leftBoundary, + text); + var selectedPath = self.pathSelector.selectPath(possiblePathInfos) + + path.push(selectedPath); + if (selectedPath.type !== "UNK") { + leftBoundary = i; + } + } + return path; + }, + + pathToRanges: function(path) { + var e = path.length - 1 + , ranges = []; + + while (e > 0) { + var info = path[e] + , s = info.p; + + if (info.merge !== undefined && ranges.length > 0) { + var r = ranges[ranges.length - 1]; + r.s = info.merge; + s = r.s; + } else { + ranges.push({s:s, e:e}); + } + e = s; + } + return ranges.reverse(); + }, + + rangesToText: function(text, ranges, delimiter) { + return ranges.map(function(r) { + return text.substring(r.s, r.e); + }).join(delimiter); + }, + + cut: function(text, delimiter) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + return this + .rangesToText(text, ranges, + (delimiter === undefined ? "|" : delimiter)); + }, + + cutIntoRanges: function(text, noText) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + + if (!noText) { + ranges.forEach(function(r) { + r.text = text.substring(r.s, r.e); + }); + } + return ranges; + }, + + cutIntoArray: function(text) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + + return ranges.map(function(r) { + return text.substring(r.s, r.e) + }); + } +}; + +module.exports = WordcutCore; + +},{}],9:[function(require,module,exports){ +// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 +// +// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! +// +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// when used in node, this will actually load the util module we depend on +// versus loading the builtin util module as happens otherwise +// this is a bug in node module loading as far as I am concerned +var util = require('util/'); + +var pSlice = Array.prototype.slice; +var hasOwn = Object.prototype.hasOwnProperty; + +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + if (options.message) { + this.message = options.message; + this.generatedMessage = false; + } else { + this.message = getMessage(this); + this.generatedMessage = true; + } + var stackStartFunction = options.stackStartFunction || fail; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } + else { + // non v8 browsers so we can have a stacktrace + var err = new Error(); + if (err.stack) { + var out = err.stack; + + // try to strip useless frames + var fn_name = stackStartFunction.name; + var idx = out.indexOf('\n' + fn_name); + if (idx >= 0) { + // once we have located the function frame + // we need to strip out everything before it (and its line) + var next_line = out.indexOf('\n', idx + 1); + out = out.substring(next_line + 1); + } + + this.stack = out; + } + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function replacer(key, value) { + if (util.isUndefined(value)) { + return '' + value; + } + if (util.isNumber(value) && !isFinite(value)) { + return value.toString(); + } + if (util.isFunction(value) || util.isRegExp(value)) { + return value.toString(); + } + return value; +} + +function truncate(s, n) { + if (util.isString(s)) { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} + +function getMessage(self) { + return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + + self.operator + ' ' + + truncate(JSON.stringify(self.expected, replacer), 128); +} + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, !!guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +function _deepEqual(actual, expected) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (util.isBuffer(actual) && util.isBuffer(expected)) { + if (actual.length != expected.length) return false; + + for (var i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) return false; + } + + return true; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (util.isDate(actual) && util.isDate(expected)) { + return actual.getTime() === expected.getTime(); + + // 7.3 If the expected value is a RegExp object, the actual value is + // equivalent if it is also a RegExp object with the same source and + // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). + } else if (util.isRegExp(actual) && util.isRegExp(expected)) { + return actual.source === expected.source && + actual.global === expected.global && + actual.multiline === expected.multiline && + actual.lastIndex === expected.lastIndex && + actual.ignoreCase === expected.ignoreCase; + + // 7.4. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!util.isObject(actual) && !util.isObject(expected)) { + return actual == expected; + + // 7.5 For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected); + } +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b) { + if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + // if one is a primitive, the other must be same + if (util.isPrimitive(a) || util.isPrimitive(b)) { + return a === b; + } + var aIsArgs = isArguments(a), + bIsArgs = isArguments(b); + if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) + return false; + if (aIsArgs) { + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b); + } + var ka = objectKeys(a), + kb = objectKeys(b), + key, i; + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key])) return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (Object.prototype.toString.call(expected) == '[object RegExp]') { + return expected.test(actual); + } else if (actual instanceof expected) { + return true; + } else if (expected.call({}, actual) === true) { + return true; + } + + return false; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (util.isString(expected)) { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail(actual, expected, 'Missing expected exception' + message); + } + + if (!shouldThrow && expectedException(actual, expected)) { + fail(actual, expected, 'Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [true].concat(pSlice.call(arguments))); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/message) { + _throws.apply(this, [false].concat(pSlice.call(arguments))); +}; + +assert.ifError = function(err) { if (err) {throw err;}}; + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + if (hasOwn.call(obj, key)) keys.push(key); + } + return keys; +}; + +},{"util/":28}],10:[function(require,module,exports){ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} + +},{}],11:[function(require,module,exports){ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + + +},{"balanced-match":10,"concat-map":13}],12:[function(require,module,exports){ + +},{}],13:[function(require,module,exports){ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],14:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } + throw TypeError('Uncaught, unspecified "error" event.'); + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + handler.apply(this, args); + } + } else if (isObject(handler)) { + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + var m; + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.listenerCount = function(emitter, type) { + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (isFunction(emitter._events[type])) + ret = 1; + else + ret = emitter._events[type].length; + return ret; +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],15:[function(require,module,exports){ +(function (process){ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern) + } + + return { + matcher: new Minimatch(pattern), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = options.cwd + self.changedCwd = path.resolve(options.cwd) !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + self.nomount = !!options.nomount + + // disable comments and negation unless the user explicitly + // passes in false as the option. + options.nonegate = options.nonegate === false ? false : true + options.nocomment = options.nocomment === false ? false : true + deprecationWarning(options) + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +// TODO(isaacs): remove entirely in v6 +// exported to reset in tests +exports.deprecationWarned +function deprecationWarning(options) { + if (!options.nonegate || !options.nocomment) { + if (process.noDeprecation !== true && !exports.deprecationWarned) { + var msg = 'glob WARNING: comments and negation will be disabled in v6' + if (process.throwDeprecation) + throw new Error(msg) + else if (process.traceDeprecation) + console.trace(msg) + else + console.error(msg) + + exports.deprecationWarned = true + } + } +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + return !(/\/$/.test(e)) + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +}).call(this,require('_process')) +},{"_process":24,"minimatch":20,"path":22,"path-is-absolute":23}],16:[function(require,module,exports){ +(function (process){ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +glob.hasMagic = function (pattern, options_) { + var options = util._extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + var n = this.minimatch.set.length + this._processing = 0 + this.matches = new Array(n) + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + + function done () { + --self._processing + if (self._processing <= 0) + self._finish() + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + fs.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (this.matches[index][e]) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = this._makeAbs(e) + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + if (this.mark) + e = this._mark(e) + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er) + return cb() + + var isSym = lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && !stat.isDirectory()) + return cb(null, false, stat) + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return cb() + + return cb(null, c, stat) +} + +}).call(this,require('_process')) +},{"./common.js":15,"./sync.js":17,"_process":24,"assert":9,"events":14,"fs":12,"inflight":18,"inherits":19,"minimatch":20,"once":21,"path":22,"path-is-absolute":23,"util":28}],17:[function(require,module,exports){ +(function (process){ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = fs.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this.matches[index][e] = true + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + var abs = this._makeAbs(e) + if (this.mark) + e = this._mark(e) + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[this._makeAbs(e)] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + // lstat failed, doesn't exist + return null + } + + var isSym = lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this.matches[index][prefix] = true +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + return false + } + + if (lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +}).call(this,require('_process')) +},{"./common.js":15,"./glob.js":16,"_process":24,"assert":9,"fs":12,"minimatch":20,"path":22,"path-is-absolute":23,"util":28}],18:[function(require,module,exports){ +(function (process){ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} + +}).call(this,require('_process')) +},{"_process":24,"once":21,"wrappy":29}],19:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],20:[function(require,module,exports){ +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = { sep: '/' } +try { + path = require('path') +} catch (er) {} + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + // "" only matches "" + if (pattern.trim() === '') return p === '' + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } + + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) + + this.debug('matchOne', file.length, pattern.length) + + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') + return emptyFileEnd + } + + // should be unreachable. + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} + +},{"brace-expansion":11,"path":22}],21:[function(require,module,exports){ +var wrappy = require('wrappy') +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) + +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) + + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) + } + f.called = false + return f +} + +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) + } + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f +} + +},{"wrappy":29}],22:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":24}],23:[function(require,module,exports){ +(function (process){ +'use strict'; + +function posix(path) { + return path.charAt(0) === '/'; +} + +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); + + // UNC paths are always absolute + return Boolean(result[2] || isUnc); +} + +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; + +}).call(this,require('_process')) +},{"_process":24}],24:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],25:[function(require,module,exports){ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}.call(this)); + +},{}],26:[function(require,module,exports){ +arguments[4][19][0].apply(exports,arguments) +},{"dup":19}],27:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],28:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./support/isBuffer":27,"_process":24,"inherits":26}],29:[function(require,module,exports){ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} + +},{}]},{},[7])(7) +}); \ No newline at end of file diff --git a/2.6.0/assets/javascripts/workers/search.ecf98df9.min.js b/2.6.0/assets/javascripts/workers/search.ecf98df9.min.js new file mode 100644 index 00000000..f8c73991 --- /dev/null +++ b/2.6.0/assets/javascripts/workers/search.ecf98df9.min.js @@ -0,0 +1,48 @@ +"use strict";(()=>{var ge=Object.create;var W=Object.defineProperty,ye=Object.defineProperties,me=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyDescriptors,xe=Object.getOwnPropertyNames,G=Object.getOwnPropertySymbols,Se=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable;var J=(t,e,r)=>e in t?W(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,M=(t,e)=>{for(var r in e||(e={}))X.call(e,r)&&J(t,r,e[r]);if(G)for(var r of G(e))Qe.call(e,r)&&J(t,r,e[r]);return t},Z=(t,e)=>ye(t,ve(e));var K=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var be=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of xe(e))!X.call(t,i)&&i!==r&&W(t,i,{get:()=>e[i],enumerable:!(n=me(e,i))||n.enumerable});return t};var H=(t,e,r)=>(r=t!=null?ge(Se(t)):{},be(e||!t||!t.__esModule?W(r,"default",{value:t,enumerable:!0}):r,t));var z=(t,e,r)=>new Promise((n,i)=>{var s=u=>{try{a(r.next(u))}catch(c){i(c)}},o=u=>{try{a(r.throw(u))}catch(c){i(c)}},a=u=>u.done?n(u.value):Promise.resolve(u.value).then(s,o);a((r=r.apply(t,e)).next())});var re=K((ee,te)=>{/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var h=t.utils.clone(r)||{};h.position=[a,c],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(r+=n[c+1]*i[h+1],c+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),y=s.str.charAt(1),g;y in s.node.edges?g=s.node.edges[y]:(g=new t.TokenSet,s.node.edges[y]=g),s.str.length==1&&(g.final=!0),i.push({node:g,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof ee=="object"?te.exports=r():e.lunr=r()}(this,function(){return t})})()});var q=K((Re,ne)=>{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var Le=/["'&<>]/;ne.exports=we;function we(t){var e=""+t,r=Le.exec(e);if(!r)return e;var n,i="",s=0,o=0;for(s=r.index;s=0;r--){let n=t[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?e.insertBefore(this.previousSibling,n):e.replaceChild(n,this)}}}));var ie=H(q());function se(t){let e=new Map,r=new Set;for(let n of t){let[i,s]=n.location.split("#"),o=n.location,a=n.title,u=n.tags,c=(0,ie.default)(n.text).replace(/\s+(?=[,.:;!?])/g,"").replace(/\s+/g," ");if(s){let h=e.get(i);r.has(h)?e.set(o,{location:o,title:a,text:c,parent:h}):(h.title=n.title,h.text=c,r.add(h))}else e.set(o,M({location:o,title:a,text:c},u&&{tags:u}))}return e}var oe=H(q());function ae(t,e){let r=new RegExp(t.separator,"img"),n=(i,s,o)=>`${s}${o}`;return i=>{i=i.replace(/[\s*+\-:~^]+/g," ").trim();let s=new RegExp(`(^|${t.separator})(${i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return o=>(e?(0,oe.default)(o):o).replace(s,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function ue(t){let e=new lunr.Query(["title","text"]);return new lunr.QueryParser(t,e).parse(),e.clauses}function ce(t,e){var i;let r=new Set(t),n={};for(let s=0;s!n.has(i)))]}var U=class{constructor({config:e,docs:r,options:n}){this.options=n,this.documents=se(r),this.highlight=ae(e,!1),lunr.tokenizer.separator=new RegExp(e.separator),this.index=lunr(function(){e.lang.length===1&&e.lang[0]!=="en"?this.use(lunr[e.lang[0]]):e.lang.length>1&&this.use(lunr.multiLanguage(...e.lang));let i=Ee(["trimmer","stopWordFilter","stemmer"],n.pipeline);for(let s of e.lang.map(o=>o==="en"?lunr:lunr[o]))for(let o of i)this.pipeline.remove(s[o]),this.searchPipeline.remove(s[o]);this.ref("location"),this.field("title",{boost:1e3}),this.field("text"),this.field("tags",{boost:1e6,extractor:s=>{let{tags:o=[]}=s;return o.reduce((a,u)=>[...a,...lunr.tokenizer(u)],[])}});for(let s of r)this.add(s,{boost:s.boost})})}search(e){if(e)try{let r=this.highlight(e),n=ue(e).filter(o=>o.presence!==lunr.Query.presence.PROHIBITED),i=this.index.search(`${e}*`).reduce((o,{ref:a,score:u,matchData:c})=>{let h=this.documents.get(a);if(typeof h!="undefined"){let{location:y,title:g,text:b,tags:m,parent:Q}=h,p=ce(n,Object.keys(c.metadata)),d=+!Q+ +Object.values(p).every(w=>w);o.push(Z(M({location:y,title:r(g),text:r(b)},m&&{tags:m.map(r)}),{score:u*(1+d),terms:p}))}return o},[]).sort((o,a)=>a.score-o.score).reduce((o,a)=>{let u=this.documents.get(a.location);if(typeof u!="undefined"){let c="parent"in u?u.parent.location:u.location;o.set(c,[...o.get(c)||[],a])}return o},new Map),s;if(this.options.suggestions){let o=this.index.query(a=>{for(let u of n)a.term(u.term,{fields:["title"],presence:lunr.Query.presence.REQUIRED,wildcard:lunr.Query.wildcard.TRAILING})});s=o.length?Object.keys(o[0].matchData.metadata):[]}return M({items:[...i.values()]},typeof s!="undefined"&&{suggestions:s})}catch(r){console.warn(`Invalid query: ${e} \u2013 see https://bit.ly/2s3ChXG`)}return{items:[]}}};var Y;function ke(t){return z(this,null,function*(){let e="../lunr";if(typeof parent!="undefined"&&"IFrameWorker"in parent){let n=document.querySelector("script[src]"),[i]=n.src.split("/worker");e=e.replace("..",i)}let r=[];for(let n of t.lang){switch(n){case"ja":r.push(`${e}/tinyseg.js`);break;case"hi":case"th":r.push(`${e}/wordcut.js`);break}n!=="en"&&r.push(`${e}/min/lunr.${n}.min.js`)}t.lang.length>1&&r.push(`${e}/min/lunr.multi.min.js`),r.length&&(yield importScripts(`${e}/min/lunr.stemmer.support.min.js`,...r))})}function Te(t){return z(this,null,function*(){switch(t.type){case 0:return yield ke(t.data.config),Y=new U(t.data),{type:1};case 2:return{type:3,data:Y?Y.search(t.data):{items:[]}};default:throw new TypeError("Invalid message type")}})}self.lunr=le.default;addEventListener("message",t=>z(void 0,null,function*(){postMessage(yield Te(t.data))}));})(); +//# sourceMappingURL=search.ecf98df9.min.js.map + diff --git a/2.6.0/assets/javascripts/workers/search.ecf98df9.min.js.map b/2.6.0/assets/javascripts/workers/search.ecf98df9.min.js.map new file mode 100644 index 00000000..eada3e64 --- /dev/null +++ b/2.6.0/assets/javascripts/workers/search.ecf98df9.min.js.map @@ -0,0 +1,8 @@ +{ + "version": 3, + "sources": ["node_modules/lunr/lunr.js", "node_modules/escape-html/index.js", "src/assets/javascripts/integrations/search/worker/main/index.ts", "src/assets/javascripts/polyfills/index.ts", "src/assets/javascripts/integrations/search/document/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/search/query/_/index.ts", "src/assets/javascripts/integrations/search/_/index.ts"], + "sourceRoot": "../../../..", + "sourcesContent": ["/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9\n * Copyright (C) 2020 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.9\"\n/*!\n * lunr.utils\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function () {\n return this\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2020 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.empty\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport lunr from \"lunr\"\n\nimport \"~/polyfills\"\n\nimport { Search, SearchIndexConfig } from \"../../_\"\nimport {\n SearchMessage,\n SearchMessageType\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Add support for usage with `iframe-worker` polyfill\n *\n * While `importScripts` is synchronous when executed inside of a web worker,\n * it's not possible to provide a synchronous polyfilled implementation. The\n * cool thing is that awaiting a non-Promise is a noop, so extending the type\n * definition to return a `Promise` shouldn't break anything.\n *\n * @see https://bit.ly/2PjDnXi - GitHub comment\n */\ndeclare global {\n function importScripts(...urls: string[]): Promise | void\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nlet index: Search\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch (= import) multi-language support through `lunr-languages`\n *\n * This function automatically imports the stemmers necessary to process the\n * languages, which are defined through the search index configuration.\n *\n * If the worker runs inside of an `iframe` (when using `iframe-worker` as\n * a shim), the base URL for the stemmers to be loaded must be determined by\n * searching for the first `script` element with a `src` attribute, which will\n * contain the contents of this script.\n *\n * @param config - Search index configuration\n *\n * @returns Promise resolving with no result\n */\nasync function setupSearchLanguages(\n config: SearchIndexConfig\n): Promise {\n let base = \"../lunr\"\n\n /* Detect `iframe-worker` and fix base URL */\n if (typeof parent !== \"undefined\" && \"IFrameWorker\" in parent) {\n const worker = document.querySelector(\"script[src]\")!\n const [path] = worker.src.split(\"/worker\")\n\n /* Prefix base with path */\n base = base.replace(\"..\", path)\n }\n\n /* Add scripts for languages */\n const scripts = []\n for (const lang of config.lang) {\n switch (lang) {\n\n /* Add segmenter for Japanese */\n case \"ja\":\n scripts.push(`${base}/tinyseg.js`)\n break\n\n /* Add segmenter for Hindi and Thai */\n case \"hi\":\n case \"th\":\n scripts.push(`${base}/wordcut.js`)\n break\n }\n\n /* Add language support */\n if (lang !== \"en\")\n scripts.push(`${base}/min/lunr.${lang}.min.js`)\n }\n\n /* Add multi-language support */\n if (config.lang.length > 1)\n scripts.push(`${base}/min/lunr.multi.min.js`)\n\n /* Load scripts synchronously */\n if (scripts.length)\n await importScripts(\n `${base}/min/lunr.stemmer.support.min.js`,\n ...scripts\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Message handler\n *\n * @param message - Source message\n *\n * @returns Target message\n */\nexport async function handler(\n message: SearchMessage\n): Promise {\n switch (message.type) {\n\n /* Search setup message */\n case SearchMessageType.SETUP:\n await setupSearchLanguages(message.data.config)\n index = new Search(message.data)\n return {\n type: SearchMessageType.READY\n }\n\n /* Search query message */\n case SearchMessageType.QUERY:\n return {\n type: SearchMessageType.RESULT,\n data: index ? index.search(message.data) : { items: [] }\n }\n\n /* All other messages */\n default:\n throw new TypeError(\"Invalid message type\")\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Worker\n * ------------------------------------------------------------------------- */\n\n/* @ts-expect-error - expose Lunr.js in global scope, or stemmers won't work */\nself.lunr = lunr\n\n/* Handle messages */\naddEventListener(\"message\", async ev => {\n postMessage(await handler(ev.data))\n})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Polyfills\n * ------------------------------------------------------------------------- */\n\n/* Polyfill `Object.entries` */\nif (!Object.entries)\n Object.entries = function (obj: object) {\n const data: [string, string][] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push([key, obj[key]])\n\n /* Return entries */\n return data\n }\n\n/* Polyfill `Object.values` */\nif (!Object.values)\n Object.values = function (obj: object) {\n const data: string[] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push(obj[key])\n\n /* Return values */\n return data\n }\n\n/* ------------------------------------------------------------------------- */\n\n/* Polyfills for `Element` */\nif (typeof Element !== \"undefined\") {\n\n /* Polyfill `Element.scrollTo` */\n if (!Element.prototype.scrollTo)\n Element.prototype.scrollTo = function (\n x?: ScrollToOptions | number, y?: number\n ): void {\n if (typeof x === \"object\") {\n this.scrollLeft = x.left!\n this.scrollTop = x.top!\n } else {\n this.scrollLeft = x!\n this.scrollTop = y!\n }\n }\n\n /* Polyfill `Element.replaceWith` */\n if (!Element.prototype.replaceWith)\n Element.prototype.replaceWith = function (\n ...nodes: Array\n ): void {\n const parent = this.parentNode\n if (parent) {\n if (nodes.length === 0)\n parent.removeChild(this)\n\n /* Replace children and create text nodes */\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i]\n if (typeof node !== \"object\")\n node = document.createTextNode(node)\n else if (node.parentNode)\n node.parentNode.removeChild(node)\n\n /* Replace child or insert before previous sibling */\n if (!i)\n parent.replaceChild(node, this)\n else\n parent.insertBefore(this.previousSibling!, node)\n }\n }\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport interface SearchDocument extends SearchIndexDocument {\n parent?: SearchIndexDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @returns Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n const parents = new Set()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location, title and tags */\n const location = doc.location\n const title = doc.title\n const tags = doc.tags\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path)!\n\n /* Ignore first section, override article */\n if (!parents.has(parent)) {\n parent.title = doc.title\n parent.text = text\n\n /* Remember that we processed the article */\n parents.add(parent)\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n ...tags && { tags }\n })\n }\n }\n return documents\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexConfig } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @param value - Value\n *\n * @returns Highlighted value\n */\nexport type SearchHighlightFn = (value: string) => string\n\n/**\n * Search highlight factory function\n *\n * @param query - Query value\n *\n * @returns Search highlight function\n */\nexport type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n * @param escape - Whether to escape HTML\n *\n * @returns Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig, escape: boolean\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+\\-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\")\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight string value */\n return value => (\n escape\n ? escapeHTML(value)\n : value\n )\n .replace(match, highlight)\n .replace(/<\\/mark>(\\s+)]*>/img, \"$1\")\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query clause\n */\nexport interface SearchQueryClause {\n presence: lunr.Query.presence /* Clause presence */\n term: string /* Clause term */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search query terms\n */\nexport type SearchQueryTerms = Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Parse a search query for analysis\n *\n * @param value - Query value\n *\n * @returns Search query clauses\n */\nexport function parseSearchQuery(\n value: string\n): SearchQueryClause[] {\n const query = new (lunr as any).Query([\"title\", \"text\"])\n const parser = new (lunr as any).QueryParser(value, query)\n\n /* Parse and return query clauses */\n parser.parse()\n return query.clauses\n}\n\n/**\n * Analyze the search query clauses in regard to the search terms found\n *\n * @param query - Search query clauses\n * @param terms - Search terms\n *\n * @returns Search query terms\n */\nexport function getSearchQueryTerms(\n query: SearchQueryClause[], terms: string[]\n): SearchQueryTerms {\n const clauses = new Set(query)\n\n /* Match query clauses against terms */\n const result: SearchQueryTerms = {}\n for (let t = 0; t < terms.length; t++)\n for (const clause of clauses)\n if (terms[t].startsWith(clause.term)) {\n result[clause.term] = true\n clauses.delete(clause)\n }\n\n /* Annotate unmatched non-stopword query clauses */\n for (const clause of clauses)\n if (lunr.stopWordFilter?.(clause.term as any))\n result[clause.term] = false\n\n /* Return query terms */\n return result\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n SearchDocument,\n SearchDocumentMap,\n setupSearchDocumentMap\n} from \"../document\"\nimport {\n SearchHighlightFactoryFn,\n setupSearchHighlighter\n} from \"../highlighter\"\nimport { SearchOptions } from \"../options\"\nimport {\n SearchQueryTerms,\n getSearchQueryTerms,\n parseSearchQuery\n} from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index configuration\n */\nexport interface SearchIndexConfig {\n lang: string[] /* Search languages */\n separator: string /* Search separator */\n}\n\n/**\n * Search index document\n */\nexport interface SearchIndexDocument {\n location: string /* Document location */\n title: string /* Document title */\n text: string /* Document text */\n tags?: string[] /* Document tags */\n boost?: number /* Document boost */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index\n *\n * This interfaces describes the format of the `search_index.json` file which\n * is automatically built by the MkDocs search plugin.\n */\nexport interface SearchIndex {\n config: SearchIndexConfig /* Search index configuration */\n docs: SearchIndexDocument[] /* Search index documents */\n options: SearchOptions /* Search options */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search metadata\n */\nexport interface SearchMetadata {\n score: number /* Score (relevance) */\n terms: SearchQueryTerms /* Search query terms */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result document\n */\nexport type SearchResultDocument = SearchDocument & SearchMetadata\n\n/**\n * Search result item\n */\nexport type SearchResultItem = SearchResultDocument[]\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result\n */\nexport interface SearchResult {\n items: SearchResultItem[] /* Search result items */\n suggestions?: string[] /* Search suggestions */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute the difference of two lists of strings\n *\n * @param a - 1st list of strings\n * @param b - 2nd list of strings\n *\n * @returns Difference\n */\nfunction difference(a: string[], b: string[]): string[] {\n const [x, y] = [new Set(a), new Set(b)]\n return [\n ...new Set([...x].filter(value => !y.has(value)))\n ]\n}\n\n/* ----------------------------------------------------------------------------\n * Class\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nexport class Search {\n\n /**\n * Search document mapping\n *\n * A mapping of URLs (including hash fragments) to the actual articles and\n * sections of the documentation. The search document mapping must be created\n * regardless of whether the index was prebuilt or not, as Lunr.js itself\n * only stores the actual index.\n */\n protected documents: SearchDocumentMap\n\n /**\n * Search highlight factory function\n */\n protected highlight: SearchHighlightFactoryFn\n\n /**\n * The underlying Lunr.js search index\n */\n protected index: lunr.Index\n\n /**\n * Search options\n */\n protected options: SearchOptions\n\n /**\n * Create the search integration\n *\n * @param data - Search index\n */\n public constructor({ config, docs, options }: SearchIndex) {\n this.options = options\n\n /* Set up document map and highlighter factory */\n this.documents = setupSearchDocumentMap(docs)\n this.highlight = setupSearchHighlighter(config, false)\n\n /* Set separator for tokenizer */\n lunr.tokenizer.separator = new RegExp(config.separator)\n\n /* Create search index */\n this.index = lunr(function () {\n\n /* Set up multi-language support */\n if (config.lang.length === 1 && config.lang[0] !== \"en\") {\n this.use((lunr as any)[config.lang[0]])\n } else if (config.lang.length > 1) {\n this.use((lunr as any).multiLanguage(...config.lang))\n }\n\n /* Compute functions to be removed from the pipeline */\n const fns = difference([\n \"trimmer\", \"stopWordFilter\", \"stemmer\"\n ], options.pipeline)\n\n /* Remove functions from the pipeline for registered languages */\n for (const lang of config.lang.map(language => (\n language === \"en\" ? lunr : (lunr as any)[language]\n ))) {\n for (const fn of fns) {\n this.pipeline.remove(lang[fn])\n this.searchPipeline.remove(lang[fn])\n }\n }\n\n /* Set up reference */\n this.ref(\"location\")\n\n /* Set up fields */\n this.field(\"title\", { boost: 1e3 })\n this.field(\"text\")\n this.field(\"tags\", { boost: 1e6, extractor: doc => {\n const { tags = [] } = doc as SearchDocument\n return tags.reduce((list, tag) => [\n ...list,\n ...lunr.tokenizer(tag)\n ], [] as lunr.Token[])\n } })\n\n /* Index documents */\n for (const doc of docs)\n this.add(doc, { boost: doc.boost })\n })\n }\n\n /**\n * Search for matching documents\n *\n * The search index which MkDocs provides is divided up into articles, which\n * contain the whole content of the individual pages, and sections, which only\n * contain the contents of the subsections obtained by breaking the individual\n * pages up at `h1` ... `h6`. As there may be many sections on different pages\n * with identical titles (for example within this very project, e.g. \"Usage\"\n * or \"Installation\"), they need to be put into the context of the containing\n * page. For this reason, section results are grouped within their respective\n * articles which are the top-level results that are returned.\n *\n * @param query - Query value\n *\n * @returns Search results\n */\n public search(query: string): SearchResult {\n if (query) {\n try {\n const highlight = this.highlight(query)\n\n /* Parse query to extract clauses for analysis */\n const clauses = parseSearchQuery(query)\n .filter(clause => (\n clause.presence !== lunr.Query.presence.PROHIBITED\n ))\n\n /* Perform search and post-process results */\n const groups = this.index.search(`${query}*`)\n\n /* Apply post-query boosts based on title and search query terms */\n .reduce((item, { ref, score, matchData }) => {\n const document = this.documents.get(ref)\n if (typeof document !== \"undefined\") {\n const { location, title, text, tags, parent } = document\n\n /* Compute and analyze search query terms */\n const terms = getSearchQueryTerms(\n clauses,\n Object.keys(matchData.metadata)\n )\n\n /* Highlight title and text and apply post-query boosts */\n const boost = +!parent + +Object.values(terms).every(t => t)\n item.push({\n location,\n title: highlight(title),\n text: highlight(text),\n ...tags && { tags: tags.map(highlight) },\n score: score * (1 + boost),\n terms\n })\n }\n return item\n }, [])\n\n /* Sort search results again after applying boosts */\n .sort((a, b) => b.score - a.score)\n\n /* Group search results by page */\n .reduce((items, result) => {\n const document = this.documents.get(result.location)\n if (typeof document !== \"undefined\") {\n const ref = \"parent\" in document\n ? document.parent!.location\n : document.location\n items.set(ref, [...items.get(ref) || [], result])\n }\n return items\n }, new Map())\n\n /* Generate search suggestions, if desired */\n let suggestions: string[] | undefined\n if (this.options.suggestions) {\n const titles = this.index.query(builder => {\n for (const clause of clauses)\n builder.term(clause.term, {\n fields: [\"title\"],\n presence: lunr.Query.presence.REQUIRED,\n wildcard: lunr.Query.wildcard.TRAILING\n })\n })\n\n /* Retrieve suggestions for best match */\n suggestions = titles.length\n ? Object.keys(titles[0].matchData.metadata)\n : []\n }\n\n /* Return items and suggestions */\n return {\n items: [...groups.values()],\n ...typeof suggestions !== \"undefined\" && { suggestions }\n }\n\n /* Log errors to console (for now) */\n } catch {\n console.warn(`Invalid query: ${query} \u2013 see https://bit.ly/2s3ChXG`)\n }\n }\n\n /* Return nothing in case of error or empty query */\n return { items: [] }\n }\n}\n"], + "mappings": "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L,CAAI,KACrDD,EAAIC,EAER,CAEA,OAAAG,EAAKP,EACLQ,EAAMzB,EACFwB,EAAG,KAAKJ,CAAC,GAAKK,EAAI,KAAKL,CAAC,IAC1BI,EAAKjB,EACLa,EAAIA,EAAE,QAAQI,EAAG,EAAE,GAKjBD,GAAW,MACbH,EAAIG,EAAQ,YAAY,EAAIH,EAAE,OAAO,CAAC,GAGjCA,CACT,EAEA,OAAO,SAAUhD,EAAO,CACtB,OAAOA,EAAM,OAAO+C,CAAa,CACnC,CACF,EAAG,EAEHpG,EAAK,SAAS,iBAAiBA,EAAK,QAAS,SAAS,EACtD;AAAA;AAAA;AAAA,GAkBAA,EAAK,uBAAyB,SAAU8G,EAAW,CACjD,IAAIC,EAAQD,EAAU,OAAO,SAAU7D,EAAM+D,EAAU,CACrD,OAAA/D,EAAK+D,GAAYA,EACV/D,CACT,EAAG,CAAC,CAAC,EAEL,OAAO,SAAUI,EAAO,CACtB,GAAIA,GAAS0D,EAAM1D,EAAM,SAAS,KAAOA,EAAM,SAAS,EAAG,OAAOA,CACpE,CACF,EAeArD,EAAK,eAAiBA,EAAK,uBAAuB,CAChD,IACA,OACA,QACA,SACA,QACA,MACA,SACA,OACA,KACA,QACA,KACA,MACA,MACA,MACA,KACA,KACA,KACA,UACA,OACA,MACA,KACA,MACA,SACA,QACA,OACA,MACA,KACA,OACA,SACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,KACA,MACA,OACA,MACA,MACA,MACA,UACA,IACA,KACA,KACA,OACA,KACA,KACA,MACA,OACA,QACA,MACA,OACA,SACA,MACA,KACA,QACA,OACA,OACA,KACA,UACA,KACA,MACA,MACA,KACA,MACA,QACA,KACA,OACA,KACA,QACA,MACA,MACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,KACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,KACA,MACA,OACA,KACA,QACA,MACA,KACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,QACA,MACA,MACA,MACF,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", + "names": ["require_lunr", "__commonJSMin", "exports", "module", "lunr", "config", "builder", "global", "message", "obj", "clone", "keys", "key", "val", "docRef", "fieldName", "stringValue", "s", "n", "fieldRef", "elements", "i", "other", "object", "a", "b", "intersection", "element", "posting", "documentCount", "documentsWithTerm", "x", "str", "metadata", "fn", "t", "len", "tokens", "sliceEnd", "sliceStart", "char", "sliceLength", "tokenMetadata", "label", "isRegistered", "serialised", "pipeline", "fnName", "fns", "existingFn", "newFn", "pos", "stackLength", "memo", "j", "result", "k", "token", "index", "start", "end", "pivotPoint", "pivotIndex", "insertIdx", "position", "sumOfSquares", "elementsLength", "otherVector", "dotProduct", "aLen", "bLen", "aVal", "bVal", "output", "step2list", "step3list", "c", "v", "C", "V", "mgr0", "meq1", "mgr1", "s_v", "re_mgr0", "re_mgr1", "re_meq1", "re_s_v", "re_1a", "re2_1a", "re_1b", "re2_1b", "re_1b_2", "re2_1b_2", "re3_1b_2", "re4_1b_2", "re_1c", "re_2", "re_3", "re_4", "re2_4", "re_5", "re_5_1", "re3_5", "porterStemmer", "w", "stem", "suffix", "firstch", "re", "re2", "re3", "re4", "fp", "stopWords", "words", "stopWord", "arr", "clause", "editDistance", "root", "stack", "frame", "noEditNode", "insertionNode", "substitutionNode", "charA", "charB", "transposeNode", "node", "final", "next", "edges", "edge", "labels", "qEdges", "qLen", "nEdges", "nLen", "q", "qEdge", "nEdge", "qNode", "word", "commonPrefix", "nextNode", "downTo", "childKey", "attrs", "queryString", "query", "parser", "matchingFields", "queryVectors", "termFieldCache", "requiredMatches", "prohibitedMatches", "terms", "clauseMatches", "m", "term", "termTokenSet", "expandedTerms", "field", "expandedTerm", "termIndex", "fieldPosting", "matchingDocumentRefs", "termField", "matchingDocumentsSet", "l", "matchingDocumentRef", "matchingFieldRef", "fieldMatch", "allRequiredMatches", "allProhibitedMatches", "matchingFieldRefs", "results", "matches", "fieldVector", "score", "docMatch", "match", "invertedIndex", "fieldVectors", "ref", "serializedIndex", "serializedVectors", "serializedInvertedIndex", "tokenSetBuilder", "tuple", "attributes", "number", "doc", "fields", "extractor", "fieldTerms", "metadataKey", "fieldRefs", "numberOfFields", "accumulator", "documentsWithField", "fieldRefsLength", "termIdfCache", "fieldLength", "termFrequencies", "termsLength", "fieldBoost", "docBoost", "tf", "idf", "scoreWithPrecision", "args", "clonedMetadata", "metadataKeys", "otherMatchData", "allFields", "options", "state", "subSlices", "type", "charCode", "lexer", "lexeme", "completedClause", "errorMessage", "nextLexeme", "possibleFields", "f", "boost", "factory", "require_escape_html", "__commonJSMin", "exports", "module", "matchHtmlRegExp", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "import_lunr", "obj", "data", "key", "x", "y", "nodes", "parent", "i", "node", "import_escape_html", "setupSearchDocumentMap", "docs", "documents", "parents", "doc", "path", "hash", "location", "title", "tags", "text", "escapeHTML", "parent", "__spreadValues", "import_escape_html", "setupSearchHighlighter", "config", "escape", "separator", "highlight", "_", "data", "term", "query", "match", "value", "escapeHTML", "parseSearchQuery", "value", "query", "getSearchQueryTerms", "terms", "_a", "clauses", "result", "t", "clause", "difference", "a", "b", "x", "y", "value", "Search", "config", "docs", "options", "setupSearchDocumentMap", "setupSearchHighlighter", "fns", "lang", "language", "fn", "doc", "tags", "list", "tag", "query", "highlight", "clauses", "parseSearchQuery", "clause", "groups", "item", "ref", "score", "matchData", "document", "location", "title", "text", "parent", "terms", "getSearchQueryTerms", "boost", "t", "__spreadProps", "__spreadValues", "items", "result", "suggestions", "titles", "builder", "e", "index", "setupSearchLanguages", "config", "__async", "base", "worker", "path", "scripts", "lang", "handler", "message", "Search", "lunr", "ev"] +} diff --git a/2.6.0/assets/stylesheets/main.2e8b5541.min.css b/2.6.0/assets/stylesheets/main.2e8b5541.min.css new file mode 100644 index 00000000..a9e69565 --- /dev/null +++ b/2.6.0/assets/stylesheets/main.2e8b5541.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:transparent;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root,[data-md-color-scheme=default]{--md-default-fg-color:rgba(0,0,0,.87);--md-default-fg-color--light:rgba(0,0,0,.54);--md-default-fg-color--lighter:rgba(0,0,0,.32);--md-default-fg-color--lightest:rgba(0,0,0,.07);--md-default-bg-color:#fff;--md-default-bg-color--light:hsla(0,0%,100%,.7);--md-default-bg-color--lighter:hsla(0,0%,100%,.3);--md-default-bg-color--lightest:hsla(0,0%,100%,.12);--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7);--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:rgba(255,255,0,.5);--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(255,255,0,.5);--md-typeset-del-color:rgba(245,80,61,.15);--md-typeset-ins-color:rgba(11,213,112,.15);--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:rgba(0,0,0,.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-fg-color:#fff;--md-footer-fg-color--light:hsla(0,0%,100%,.7);--md-footer-fg-color--lighter:hsla(0,0%,100%,.3);--md-footer-bg-color:rgba(0,0,0,.87);--md-footer-bg-color--dark:rgba(0,0,0,.32);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.1),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.35)}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}body,input{font-feature-settings:"kern","liga";font-family:var(--md-text-font-family)}body,code,input,kbd,pre{color:var(--md-typeset-color)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr{position:relative}.md-typeset abbr[title]:-webkit-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}.md-typeset abbr[title]:-moz-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}[dir=ltr] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:is(:focus,:hover):after{left:0}[dir=rtl] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:is(:focus,:hover):after{right:0}.md-typeset abbr[title]:is(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li :-webkit-any(ul,ol),.md-typeset ul li :-webkit-any(ul,ol){margin-bottom:.5em;margin-top:.5em}.md-typeset ol li :-moz-any(ul,ol),.md-typeset ul li :-moz-any(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset ol li :-webkit-any(ul,ol),[dir=ltr] .md-typeset ul li :-webkit-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :-moz-any(ul,ol),[dir=ltr] .md-typeset ul li :-moz-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :is(ul,ol),[dir=ltr] .md-typeset ul li :is(ul,ol){margin-left:.625em}[dir=rtl] .md-typeset ol li :-webkit-any(ul,ol),[dir=rtl] .md-typeset ul li :-webkit-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :-moz-any(ul,ol),[dir=rtl] .md-typeset ul li :-moz-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :is(ul,ol),[dir=rtl] .md-typeset ul li :is(ul,ol){margin-right:.625em}.md-typeset ol li :is(ul,ol),.md-typeset ul li :is(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset img[src$="#gh-dark-mode-only"],.md-typeset img[src$="#only-dark"]{display:none}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) :-webkit-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-moz-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :is(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-webkit-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-moz-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :is(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :is(th,td):not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :is(th,td):not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background:var(--md-typeset-mark-color);color:var(--md-default-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:-webkit-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:-moz-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:is(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@-webkit-keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@-webkit-keyframes overlay{0%{opacity:0}to{opacity:1}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{-webkit-animation:overlay .25s both;animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:rgba(0,0,0,.54);height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{-webkit-animation:consent .5s cubic-bezier(.1,.7,.1,1) both;animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.9375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{display:flex;flex-grow:0.01;outline-color:var(--md-accent-fg-color);overflow:hidden;padding-bottom:.4rem;padding-top:1.4rem;transition:opacity .25s}.md-footer__link:-webkit-any(:focus,:hover){opacity:.7}.md-footer__link:-moz-any(:focus,:hover){opacity:.7}.md-footer__link:is(:focus,:hover){opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;line-height:2.4rem;max-width:calc(100% - 2.4rem);padding:0 1rem;position:relative;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;left:0;margin-top:-1rem;opacity:.7;padding:0 1rem;position:absolute;right:0}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:-webkit-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:-moz-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:is(:focus,:hover){color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:is(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:-webkit-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:-moz-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:is(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem transparent,0 .2rem .4rem transparent;color:var(--md-primary-bg-color);display:block;left:0;position:-webkit-sticky;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;justify-content:space-between;margin-top:.625em;overflow:hidden;scroll-snap-align:start;text-overflow:ellipsis;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary :-webkit-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :-moz-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :is(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.9375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:-webkit-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:-moz-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:is(:checked,:indeterminate)~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s,transform .25s;width:.9rem}[dir=rtl] .md-nav__icon{transform:rotate(180deg)}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:-.1rem;width:100%}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);font-weight:700;margin-top:0;padding:0 .6rem;position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link--index [href]{pointer-events:auto}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:rgba(0,0,0,.54);cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem transparent;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:rgba(0,0,0,.26);border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:hsla(0,0%,100%,.12)}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem rgba(0,0,0,.07);color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:transparent;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::-ms-input-placeholder{-ms-transition:color .25s;transition:color .25s}.md-search__input::placeholder{transition:color .25s}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>*{margin-left:.2rem}[dir=rtl] .md-search__options>*{margin-right:.2rem}.md-search__options>*{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>*{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more summary{color:var(--md-typeset-a-color);cursor:pointer;display:block;font-size:.64rem;outline:none;padding:.75em .8rem;scroll-snap-align:start;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more summary{padding-left:2.2rem}[dir=rtl] .md-search-result__more summary{padding-right:2.2rem}}.md-search-result__more summary:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary::marker{display:none}.md-search-result__more summary::-webkit-details-marker{display:none}.md-search-result__more summary~*>*{opacity:.65}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}.md-search-result__article--document .md-search-result__title{font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result__title{font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result__teaser{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--md-default-fg-color--light);display:-webkit-box;font-size:.64rem;line-height:1.6;margin:.5em 0;max-height:2rem;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:44.9375em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}.md-search-result__teaser mark{background-color:initial;text-decoration:underline}.md-search-result__terms{font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color)}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:-webkit-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-webkit-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:-moz-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-moz-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:is(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid transparent;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid transparent;border-right:.2rem solid transparent;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:-webkit-sticky;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;-ms-scroll-snap-type:none;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@media screen and (max-width:76.1875em){.md-overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@-webkit-keyframes facts{0%{height:0}to{height:.65rem}}@keyframes facts{0%{height:0}to{height:.65rem}}@-webkit-keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{-webkit-animation:facts .25s ease-in;animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{-webkit-animation:fact .4s ease-out;animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;padding:0;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:-webkit-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:-moz-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:is(:focus,:hover){color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags{margin-bottom:.75em;margin-top:-.125em}[dir=ltr] .md-typeset .md-tag{margin-right:.5em}[dir=rtl] .md-typeset .md-tag{margin-left:.5em}.md-typeset .md-tag{background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-block;font-size:.64rem;font-weight:700;letter-spacing:normal;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em;vertical-align:middle}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;margin-right:.4em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon:-webkit-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:-moz-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:is(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}@-webkit-keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}:-webkit-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:-moz-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:is(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation__index{cursor:pointer;font-family:var(--md-code-font-family);font-size:.85em;margin:0 1ch;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0}.md-annotation .md-annotation__index{color:#fff;transition:z-index .25s}.md-annotation .md-annotation__index:-webkit-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:-moz-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:is(:focus,:hover){color:#fff}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.125em;margin:0 -.4ch;padding:0 .4ch;position:absolute;top:0;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{-webkit-animation:pulse 2s infinite;animation:pulse 2s infinite}}.md-tooltip--active+.md-annotation__index:after{-webkit-animation:none;animation:none;transition:color .25s,background-color .25s}code .md-annotation__index{font-family:var(--md-code-font-family);font-size:inherit}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}.md-tooltip--active+.md-annotation__index{-webkit-animation:none;animation:none;transition:none;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:is(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@-webkit-keyframes hoverfix{0%{pointer-events:none}}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:-webkit-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-webkit-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:-moz-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-moz-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:is(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{-webkit-animation:hoverfix .25s forwards;animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{-webkit-animation:none;animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset :-webkit-any(.admonition,details){background-color:var(--md-admonition-bg-color);border:0 solid #448aff;border-radius:.1rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}.md-typeset :-moz-any(.admonition,details){background-color:var(--md-admonition-bg-color);border:0 solid #448aff;border-radius:.1rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}[dir=ltr] .md-typeset :-webkit-any(.admonition,details){border-left-width:.2rem}[dir=ltr] .md-typeset :-moz-any(.admonition,details){border-left-width:.2rem}[dir=ltr] .md-typeset :is(.admonition,details){border-left-width:.2rem}[dir=rtl] .md-typeset :-webkit-any(.admonition,details){border-right-width:.2rem}[dir=rtl] .md-typeset :-moz-any(.admonition,details){border-right-width:.2rem}[dir=rtl] .md-typeset :is(.admonition,details){border-right-width:.2rem}.md-typeset :is(.admonition,details){background-color:var(--md-admonition-bg-color);border:0 solid #448aff;border-radius:.1rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset :-webkit-any(.admonition,details){box-shadow:none}.md-typeset :-moz-any(.admonition,details){box-shadow:none}.md-typeset :is(.admonition,details){box-shadow:none}}.md-typeset :-webkit-any(.admonition,details)>*{box-sizing:border-box}.md-typeset :-moz-any(.admonition,details)>*{box-sizing:border-box}.md-typeset :is(.admonition,details)>*{box-sizing:border-box}.md-typeset :-webkit-any(.admonition,details) :-webkit-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset :-moz-any(.admonition,details) :-moz-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset :is(.admonition,details) :is(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset :-webkit-any(.admonition,details) .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset :-moz-any(.admonition,details) .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset :is(.admonition,details) .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset :-webkit-any(.admonition,details) .md-typeset__table{padding:0 .6rem}.md-typeset :-moz-any(.admonition,details) .md-typeset__table{padding:0 .6rem}.md-typeset :is(.admonition,details) .md-typeset__table{padding:0 .6rem}.md-typeset :-webkit-any(.admonition,details)>.tabbed-set:only-child{margin-top:0}.md-typeset :-moz-any(.admonition,details)>.tabbed-set:only-child{margin-top:0}.md-typeset :is(.admonition,details)>.tabbed-set:only-child{margin-top:0}html .md-typeset :-webkit-any(.admonition,details)>:last-child{margin-bottom:.6rem}html .md-typeset :-moz-any(.admonition,details)>:last-child{margin-bottom:.6rem}html .md-typeset :is(.admonition,details)>:last-child{margin-bottom:.6rem}.md-typeset :-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin-bottom:0;margin-top:0;padding-bottom:.4rem;padding-top:.4rem;position:relative}.md-typeset :-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin-bottom:0;margin-top:0;padding-bottom:.4rem;padding-top:.4rem;position:relative}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){margin-left:-.8rem;margin-right:-.6rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){margin-left:-.8rem;margin-right:-.6rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){margin-left:-.8rem;margin-right:-.6rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){margin-left:-.6rem;margin-right:-.8rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){margin-left:-.6rem;margin-right:-.8rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){margin-left:-.6rem;margin-right:-.8rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){padding-left:2.2rem;padding-right:.6rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){padding-left:2.2rem;padding-right:.6rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){padding-left:2.2rem;padding-right:.6rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){padding-left:.6rem;padding-right:2.2rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){padding-left:.6rem;padding-right:2.2rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){padding-left:.6rem;padding-right:2.2rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){border-left-width:.2rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){border-left-width:.2rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){border-left-width:.2rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){border-right-width:.2rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){border-right-width:.2rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){border-right-width:.2rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){border-top-left-radius:.1rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){border-top-right-radius:.1rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){border-top-right-radius:.1rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){border-top-left-radius:.1rem}.md-typeset :is(.admonition-title,summary){background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin-bottom:0;margin-top:0;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset :-webkit-any(.admonition-title,summary):last-child{margin-bottom:0}html .md-typeset :-moz-any(.admonition-title,summary):last-child{margin-bottom:0}html .md-typeset :is(.admonition-title,summary):last-child{margin-bottom:0}.md-typeset :-webkit-any(.admonition-title,summary):before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset :-moz-any(.admonition-title,summary):before{background-color:#448aff;content:"";height:1rem;mask-image:var(--md-admonition-icon--note);mask-position:center;mask-repeat:no-repeat;mask-size:contain;position:absolute;top:.625em;width:1rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary):before{left:.8rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary):before{left:.8rem}[dir=ltr] .md-typeset :is(.admonition-title,summary):before{left:.8rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary):before{right:.8rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary):before{right:.8rem}[dir=rtl] .md-typeset :is(.admonition-title,summary):before{right:.8rem}.md-typeset :is(.admonition-title,summary):before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.note){border-color:#448aff}.md-typeset :-moz-any(.admonition,details):-moz-any(.note){border-color:#448aff}.md-typeset :is(.admonition,details):is(.note){border-color:#448aff}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :is(.note)>:is(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):before{background-color:#448aff;mask-image:var(--md-admonition-icon--note)}.md-typeset :is(.note)>:is(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-moz-any(.admonition,details):-moz-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :is(.admonition,details):is(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):before{background-color:#00b0ff;mask-image:var(--md-admonition-icon--abstract)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.info,.todo){border-color:#00b8d4}.md-typeset :-moz-any(.admonition,details):-moz-any(.info,.todo){border-color:#00b8d4}.md-typeset :is(.admonition,details):is(.info,.todo){border-color:#00b8d4}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):before{background-color:#00b8d4;mask-image:var(--md-admonition-icon--info)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-moz-any(.admonition,details):-moz-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :is(.admonition,details):is(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):before{background-color:#00bfa5;mask-image:var(--md-admonition-icon--tip)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.success,.check,.done){border-color:#00c853}.md-typeset :-moz-any(.admonition,details):-moz-any(.success,.check,.done){border-color:#00c853}.md-typeset :is(.admonition,details):is(.success,.check,.done){border-color:#00c853}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):before{background-color:#00c853;mask-image:var(--md-admonition-icon--success)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :-moz-any(.admonition,details):-moz-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :is(.admonition,details):is(.question,.help,.faq){border-color:#64dd17}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):before{background-color:#64dd17;mask-image:var(--md-admonition-icon--question)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-moz-any(.admonition,details):-moz-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :is(.admonition,details):is(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):before{background-color:#ff9100;mask-image:var(--md-admonition-icon--warning)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-moz-any(.admonition,details):-moz-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :is(.admonition,details):is(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):before{background-color:#ff5252;mask-image:var(--md-admonition-icon--failure)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.danger,.error){border-color:#ff1744}.md-typeset :-moz-any(.admonition,details):-moz-any(.danger,.error){border-color:#ff1744}.md-typeset :is(.admonition,details):is(.danger,.error){border-color:#ff1744}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):before{background-color:#ff1744;mask-image:var(--md-admonition-icon--danger)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.bug){border-color:#f50057}.md-typeset :-moz-any(.admonition,details):-moz-any(.bug){border-color:#f50057}.md-typeset :is(.admonition,details):is(.bug){border-color:#f50057}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :is(.bug)>:is(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):before{background-color:#f50057;mask-image:var(--md-admonition-icon--bug)}.md-typeset :is(.bug)>:is(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.example){border-color:#7c4dff}.md-typeset :-moz-any(.admonition,details):-moz-any(.example){border-color:#7c4dff}.md-typeset :is(.admonition,details):is(.example){border-color:#7c4dff}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :is(.example)>:is(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):before{background-color:#7c4dff;mask-image:var(--md-admonition-icon--example)}.md-typeset :is(.example)>:is(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :-moz-any(.admonition,details):-moz-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :is(.admonition,details):is(.quote,.cite){border-color:#9e9e9e}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):before{background-color:#9e9e9e;mask-image:var(--md-admonition-icon--quote)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:-webkit-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:-moz-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:is(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :-webkit-any(:hover,:target)>.headerlink{opacity:1;-webkit-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :-moz-any(:hover,:target)>.headerlink{opacity:1;-moz-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :is(:hover,:target)>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:-webkit-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:-moz-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:is(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset :-webkit-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :-moz-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :is(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:-moz-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset :-webkit-any(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset :-moz-any(del,ins,.comment).critic{box-decoration-break:clone}.md-typeset :is(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :is(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :is(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight :-webkit-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :-moz-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :is(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight :-webkit-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-moz-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :is(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-webkit-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-moz-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :is(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-webkit-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-moz-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :is(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-webkit-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :is(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-moz-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :is(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-webkit-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-moz-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :is(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-webkit-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-moz-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :is(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-webkit-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :is(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-moz-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :is(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-webkit-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-moz-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :is(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-webkit-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-moz-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :is(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-webkit-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :-moz-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :is(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:-webkit-sticky;position:sticky;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable :-webkit-any(tbody,td){display:block;padding:0}.highlighttable :-moz-any(tbody,td){display:block;padding:0}.highlighttable :is(tbody,td){display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:-webkit-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:-moz-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:is(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid transparent;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,transparent);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,transparent);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/2.6.0/assets/stylesheets/main.2e8b5541.min.css.map b/2.6.0/assets/stylesheets/main.2e8b5541.min.css.map new file mode 100644 index 00000000..27145f85 --- /dev/null +++ b/2.6.0/assets/stylesheets/main.2e8b5541.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss","../../../src/assets/stylesheets/main.scss","src/assets/stylesheets/main/_resets.scss","src/assets/stylesheets/main/_colors.scss","src/assets/stylesheets/main/_icons.scss","src/assets/stylesheets/main/_typeset.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/main/layout/_banner.scss","src/assets/stylesheets/main/layout/_base.scss","src/assets/stylesheets/main/layout/_clipboard.scss","src/assets/stylesheets/main/layout/_consent.scss","src/assets/stylesheets/main/layout/_content.scss","src/assets/stylesheets/main/layout/_dialog.scss","src/assets/stylesheets/main/layout/_feedback.scss","src/assets/stylesheets/main/layout/_footer.scss","src/assets/stylesheets/main/layout/_form.scss","src/assets/stylesheets/main/layout/_header.scss","src/assets/stylesheets/main/layout/_nav.scss","src/assets/stylesheets/main/layout/_search.scss","src/assets/stylesheets/main/layout/_select.scss","src/assets/stylesheets/main/layout/_sidebar.scss","src/assets/stylesheets/main/layout/_source.scss","src/assets/stylesheets/main/layout/_tabs.scss","src/assets/stylesheets/main/layout/_tag.scss","src/assets/stylesheets/main/layout/_tooltip.scss","src/assets/stylesheets/main/layout/_top.scss","src/assets/stylesheets/main/layout/_version.scss","src/assets/stylesheets/main/extensions/markdown/_admonition.scss","node_modules/material-design-color/material-color.scss","src/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/assets/stylesheets/main/extensions/markdown/_toc.scss","src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/assets/stylesheets/main/integrations/_mermaid.scss","src/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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0C1B+yFN,C0B1zFE,iFACE,oB1B6zFJ,C0B9zFE,2EACE,oB1B6zFJ,C0B9zFE,+DACE,oB1B6zFJ,C0BzzFE,wFACE,mC1B4zFJ,C0B7zFE,kFACE,mC1B4zFJ,C0B7zFE,sEACE,mC1B4zFJ,C0BzzFI,+FACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1B2zFN,C0B7zFI,yFACE,wBAnBG,CAoBH,yC1B2zFN,C0B7zFI,6EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1B2zFN,C0Bt0FE,iFACE,oB1By0FJ,C0B10FE,2EACE,oB1By0FJ,C0B10FE,+DACE,oB1By0FJ,C0Br0FE,wFACE,kC1Bw0FJ,C0Bz0FE,kFACE,kC1Bw0FJ,C0Bz0FE,sEACE,kC1Bw0FJ,C0Br0FI,+FACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bu0FN,C0Bz0FI,yFACE,wBAnBG,CAoBH,6C1Bu0FN,C0Bz0FI,6EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bu0FN,C0Bl1FE,gFACE,oB1Bq1FJ,C0Bt1FE,0EACE,oB1Bq1FJ,C0Bt1FE,8DACE,oB1Bq1FJ,C0Bj1FE,uFACE,oC1Bo1FJ,C0Br1FE,iFACE,oC1Bo1FJ,C0Br1FE,qEACE,oC1Bo1FJ,C0Bj1FI,8FACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bm1FN,C0Br1FI,wFACE,wBAnBG,CAoBH,8C1Bm1FN,C0Br1FI,4EACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bm1FN,C0B91FE,wFACE,oB1Bi2FJ,C0Bl2FE,kFACE,oB1Bi2FJ,C0Bl2FE,sEACE,oB1Bi2FJ,C0B71FE,+FACE,mC1Bg2FJ,C0Bj2FE,yFACE,mC1Bg2FJ,C0Bj2FE,6EACE,mC1Bg2FJ,C0B71FI,sGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1B+1FN,C0Bj2FI,gGACE,wBAnBG,CAoBH,6C1B+1FN,C0Bj2FI,oFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1B+1FN,C0B12FE,mFACE,oB1B62FJ,C0B92FE,6EACE,oB1B62FJ,C0B92FE,iEACE,oB1B62FJ,C0Bz2FE,0FACE,mC1B42FJ,C0B72FE,oFACE,mC1B42FJ,C0B7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1rGI,4CACE,YhC4rGN,CiC/wGE,qDACE,mBAAA,CACA,cAAA,CACA,uBjCkxGJ,CiCrxGE,kDACE,mBAAA,CACA,cAAA,CACA,uBjCkxGJ,CiCrxGE,4CACE,mBAAA,CACA,cAAA,CACA,uBjCkxGJ,CiC/wGI,yDAGE,iBAAA,CADA,eAAA,CADA,ajCmxGN,CiCpxGI,sDAGE,iBAAA,CADA,eAAA,CADA,ajCmxGN,CiCpxGI,gDAGE,iBAAA,CADA,eAAA,CADA,ajCmxGN,CkCzxGE,gCACE,sClC4xGJ,CkC7xGE,6BACE,sClC4xGJ,CkC7xGE,uBACE,sClC4xGJ,CkCzxGE,cACE,yClC2xGJ,CkC/wGE,4DACE,oClCixGJ,CkClxGE,yDACE,oClCixGJ,CkClxGE,mDACE,oClCixGJ,CkCzwGE,6CACE,qClC2wGJ,CkC5wGE,0CACE,qClC2wGJ,CkC5wGE,oCACE,qClC2wGJ,CkCjwGE,oDACE,oClCmwGJ,CkCpwGE,iDACE,oClCmwGJ,CkCpwGE,2CACE,oClCmwGJ,CkC1vGE,gDACE,qClC4vGJ,CkC7vGE,6CACE,qClC4vGJ,CkC7vGE,uCACE,qClC4vGJ,CkCvvGE,gCACE,kClCyvGJ,CkC1vGE,6BACE,kClCyvGJ,CkC1vGE,uBACE,kClCyvGJ,CkCnvGE,qCACE,sClCqvGJ,CkCtvGE,kCACE,sClCqvGJ,CkCtvGE,4BACE,sClCqvGJ,CkC9uGE,yCACE,sClCgvGJ,CkCjvGE,sCACE,sClCgvGJ,CkCjvGE,gCACE,sClCgvGJ,CkCzuGE,yCACE,qClC2uGJ,CkC5uGE,sCACE,qClC2uGJ,CkC5uGE,gCACE,qClC2uGJ,CkCluGE,gDACE,qClCouGJ,CkCruGE,6CACE,qClCouGJ,CkCruGE,uCACE,qClCouGJ,CkC5tGE,6CACE,sClC8tGJ,CkC/tGE,0CACE,sClC8tGJ,CkC/tGE,oCACE,sClC8tGJ,CkCntGE,yDACE,qClCqtGJ,CkCttGE,sDACE,qClCqtGJ,CkCttGE,gDACE,qClCqtGJ,CkChtGE,iCAGE,mBAAA,CAFA,gBAAA,CACA,gBlCmtGJ,CkCrtGE,8BAGE,mBAAA,CAFA,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","file":"main.css"} \ No newline at end of file diff --git a/2.6.0/assets/stylesheets/palette.cbb835fc.min.css b/2.6.0/assets/stylesheets/palette.cbb835fc.min.css new file mode 100644 index 00000000..30f9264c --- /dev/null +++ b/2.6.0/assets/stylesheets/palette.cbb835fc.min.css @@ -0,0 +1 @@ +@media screen{[data-md-color-scheme=slate]{--md-hue:232;--md-default-fg-color:hsla(var(--md-hue),75%,95%,1);--md-default-fg-color--light:hsla(var(--md-hue),75%,90%,0.62);--md-default-fg-color--lighter:hsla(var(--md-hue),75%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),75%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,21%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,21%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,21%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,21%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,1);--md-code-bg-color:hsla(var(--md-hue),15%,15%,1);--md-code-hl-color:rgba(66,135,255,.15);--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(66,135,255,.3);--md-typeset-kbd-color:hsla(var(--md-hue),15%,94%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,94%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-table-color:hsla(var(--md-hue),75%,95%,0.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,12%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,10%,1);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.3),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.4),0 0 0.05rem rgba(0,0,0,.35)}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=slate] img[src$="#only-dark"]{display:initial}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#bd78c9}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a682e3}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#6c91d5}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff9575}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c7846b}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#6c91d5}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:rgba(255,25,71,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:rgba(245,0,86,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:rgba(223,65,251,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:rgba(124,77,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:rgba(66,135,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:rgba(0,145,235,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:rgba(0,186,214,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:rgba(0,189,164,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:rgba(0,199,83,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:rgba(99,222,23,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:rgba(176,235,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:rgba(255,213,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:rgba(255,170,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:rgba(255,145,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:rgba(255,110,66,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:#fff;--md-primary-fg-color--light:hsla(0,0%,100%,.7);--md-primary-fg-color--dark:rgba(0,0,0,.07);--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54);--md-typeset-a-color:#4051b5}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__form:hover{background-color:rgba(0,0,0,.32)}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:rgba(0,0,0,.87)}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07)}}[data-md-color-primary=black]{--md-primary-fg-color:#000;--md-primary-fg-color--light:rgba(0,0,0,.54);--md-primary-fg-color--dark:#000;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-header{background-color:#000}@media screen and (max-width:59.9375em){[data-md-color-primary=black] .md-nav__source{background-color:rgba(0,0,0,.87)}}@media screen and (min-width:60em){[data-md-color-primary=black] .md-search__form{background-color:hsla(0,0%,100%,.12)}[data-md-color-primary=black] .md-search__form:hover{background-color:hsla(0,0%,100%,.3)}}@media screen and (max-width:76.1875em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:#000}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:#000}} \ No newline at end of file diff --git a/2.6.0/assets/stylesheets/palette.cbb835fc.min.css.map b/2.6.0/assets/stylesheets/palette.cbb835fc.min.css.map new file mode 100644 index 00000000..96e380c8 --- /dev/null +++ b/2.6.0/assets/stylesheets/palette.cbb835fc.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"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","file":"palette.css"} \ No newline at end of file diff --git a/2.6.0/concepts/index.html b/2.6.0/concepts/index.html new file mode 100644 index 00000000..09a4e448 --- /dev/null +++ b/2.6.0/concepts/index.html @@ -0,0 +1,1196 @@ + + + + + + + + + + + + + + + + Concepts - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Concepts#

    +

    This page presents the concepts used in Stork. +When using Stork in a managed environment, such as Quarkus, all these concepts are hidden, as you only configure the lookup and selection. +However, when using the programmatic API, you will use these concepts directly.

    +

    concepts +concepts

    +

    Process overview#

    +

    When using the programmatic API of Stork, you can:

    +
      +
    1. Retrieve the singleton Stork instance. This instance is configured with the set of Service it manages.
    2. +
    3. Retrieve the Service you want to use. Each Service is associated with a name.
    4. +
    5. Retrieve the ServiceInstance which will provide the metadata to access the actual service.
    6. +
    +

    service discovery and selection +service discovery and selection

    +

    Behind the scenes, Stork will handle the service lookup and selection.

    +
    +

    Note

    +

    The service lookup and selection are asynchronous operations. +Thus, the API returns instances of Uni.

    +
    +

    Stork#

    +

    io.smallrye.stork.Stork is the entry-point of the API. +The Stork instance is a singleton. +It needs to be initialized once (when the application starts) and shutdown when the application stops:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +
    +public class StorkEntryPointExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +        // ...
    +        Stork.shutdown();
    +    }
    +
    +}
    +
    +

    During the initialization, Stork looks for io.smallrye.stork.config.ConfigProvider SPI provider and CDI beans (from 2.x version) and retrieves the list of managed services:

    +
      +
    • A service is identified by a name.
    • +
    • A service has a service discovery configuration indicating how Stork will look for service instances
    • +
    • A service can have a load-balancer configuration indicating how Stork can select the most appropriate instance.
    • +
    +

    Service#

    +

    A io.smallrye.stork.Service is the structure representing a service used by the application. +Services are pre-configured with their name, service discovery, and optionally, their load-balancer. +You retrieve a Service using the Stork#getService(String name) method.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    package examples;
    +
    +import io.smallrye.stork.api.Service;
    +import io.smallrye.stork.Stork;
    +
    +public class StorkServiceExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +
    +        Service service = stork.getService("my-service");
    +
    +        // ...
    +        Stork.shutdown();
    +    }
    +
    +}
    +
    +

    The Service lets you retrieve the list of ServiceInstance, or select a single one, when a load-balancer is configured.

    +

    Service Instance#

    +

    The io.smallrye.stork.api.ServiceInstance represents an actual instance of the service. +It provides the metadata to configure a client to interact with that specific instance of service.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    package examples;
    +
    +import java.time.Duration;
    +import java.util.List;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.Service;
    +import io.smallrye.stork.api.ServiceInstance;
    +
    +public class StorkServiceLookupExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +
    +        Service service = stork.getService("my-service");
    +        List<ServiceInstance> instances = service.getInstances()
    +                .await().atMost(Duration.ofSeconds(5));
    +
    +        // ...
    +        Stork.shutdown();
    +    }
    +
    +}
    +
    +

    The service selection is a two-steps process:

    +
      +
    1. Service lookup - using the service discovery
    2. +
    3. Service selection - using the load balancer
    4. +
    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    package examples;
    +
    +import java.time.Duration;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.Service;
    +import io.smallrye.stork.api.ServiceInstance;
    +
    +public class StorkServiceSelectionExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +
    +        Service service = stork.getService("my-service");
    +        ServiceInstance instance = service.selectInstance()
    +                .await().atMost(Duration.ofSeconds(5));
    +
    +        System.out.println(instance.getHost() + ":" + instance.getPort());
    +
    +        // ...
    +        Stork.shutdown();
    +    }
    +
    +}
    +
    +

    Service Discovery#

    +

    The io.smallrye.stork.api.ServiceDiscovery represents a service discovery mechanism, such as DNS, Consul, or Eureka.

    +

    You can implement a custom service discovery for Stork by implementing the ServiceDiscoveryProvider interface. +The corresponding ServiceRegistrarProviderLoader and RegistrarConfiguration classes will be automatically generated during compilation time.

    +

    Please note that the ServiceDiscovery implementation must be non-blocking.

    +

    Load Balancer#

    +

    The io.smallrye.stork.api.LoadBalancer represents a load-balancer strategy, such as round-robin.

    +

    To implement a custom load balancer for Stork, implement the LoadBalancerProvider interface. +The corresponding LoadBalancerProviderLoader and Configuration classes will be automatically generated during compilation time.

    +

    Please note that the LoadBalancer implementation, similarly to ServiceDiscovery +must be non-blocking.

    +

    Service registration#

    +

    The io.smallrye.stork.api.ServiceRegistrar represents a service registration mechanism for Consul and Eureka.

    +

    You can implement a custom service registrar for Stork by implementing the ServiceRegistrarProvider interface. +The corresponding ServiceRegistrarProviderLoader and RegistrarConfiguration classes will be automatically generated during compilation time.

    +

    Please note that the ServiceRegistrar implementation must be non-blocking.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/diagrams/includes/themes/dark.puml b/2.6.0/diagrams/includes/themes/dark.puml new file mode 100644 index 00000000..bb4b2ef1 --- /dev/null +++ b/2.6.0/diagrams/includes/themes/dark.puml @@ -0,0 +1,10 @@ +!define BG_MAIN_COLOR #1A618C +!define BG_SECONDARY_COLOR #616768 +!define BG_PACKAGE_COLOR #7a209f +!define BORDER_COLOR #EEEEEE +!define FONT_COLOR #EEEEEE +!define ARROW_COLOR #EEEEEE + +' include the general skinparams for both, light and dark +' to overwrite with the given settings +!include general.puml \ No newline at end of file diff --git a/2.6.0/diagrams/includes/themes/general.puml b/2.6.0/diagrams/includes/themes/general.puml new file mode 100644 index 00000000..f041d34d --- /dev/null +++ b/2.6.0/diagrams/includes/themes/general.puml @@ -0,0 +1,98 @@ +!define BORDER_THICKNESS 3 +skinparam backgroundColor transparent + +skinparam classFontSize 30 + +skinparam Padding 4 +skinparam RoundCorner 4 +skinparam Shadowing false + +skinparam Default { + FontColor FONT_COLOR + FontSize 30 +} + +skinparam class { + BackgroundColor BG_MAIN_COLOR + ArrowColor FONT_COLOR + BorderColor FONT_COLOR + FontSize 30 +} + +skinparam Arrow { + Color FONT_COLOR + FontColor FONT_COLOR + FontStyle Bold + FontSize 30 +} + +skinparam package { + FontColor FONT_COLOR + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR +} +skinparam node { + FontColor FONT_COLOR + BackgroundColor BG_PACKAGE_COLOR + BorderColor BORDER_COLOR +} +skinparam component { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR + Style uml2 +} + +skinparam database { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR +} + +skinparam cloud { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR +} + +skinparam collections { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR +} +skinparam Control { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR +} +skinparam Boundary { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR +} +skinparam Entity { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR +} +skinparam interface { + BackgroundColor BG_MAIN_COLOR + BorderColor BORDER_COLOR + FontColor FONT_COLOR +} +skinparam SequenceParticipantBorderThickness 3 +skinparam sequence { + ParticipantBackgroundColor BG_MAIN_COLOR + ParticipantBorderColor BORDER_COLOR + ParticipantFontStyle normal + ParticipantFontColor FONT_COLOR + LifeLineBorderColor BORDER_COLOR + LifeLineBackgroundColor BG_MAIN_COLOR + ArrowColor FONT_COLOR + ArrowBorderColor BORDER_COLOR + ArrowFontColor FONT_COLOR + ArrowThickness 3 + ActorBackgroundColor BG_MAIN_COLOR + ActorBorderColor BORDER_COLOR + ActorFontColor FONT_COLOR +} \ No newline at end of file diff --git a/2.6.0/diagrams/includes/themes/light.puml b/2.6.0/diagrams/includes/themes/light.puml new file mode 100644 index 00000000..7f71afcf --- /dev/null +++ b/2.6.0/diagrams/includes/themes/light.puml @@ -0,0 +1,11 @@ +!define BG_MAIN_COLOR AliceBlue +!define BG_SECONDARY_COLOR #B4BCBE +!define BG_PACKAGE_COLOR #eeb291 +!define BORDER_COLOR #444444 +!define FONT_COLOR #444444 +!define ARROW_COLOR DarkGrey + + +' include the general skinparams for both, light and dark +' to overwrite with the given settings +!include general.puml \ No newline at end of file diff --git a/2.6.0/diagrams/observability_sequence.puml b/2.6.0/diagrams/observability_sequence.puml new file mode 100644 index 00000000..43b65234 --- /dev/null +++ b/2.6.0/diagrams/observability_sequence.puml @@ -0,0 +1,24 @@ +@startuml + +!include diagrams/includes/themes/light.puml + +skinparam sequenceMessageAlign center +autonumber "(0)" + + +participant Application +participant ObservableStorkInfrastructure +participant ObservationCollector +participant Stork +participant Service + +Application -> ObservableStorkInfrastructure : instantiates +ObservableStorkInfrastructure -> ObservationCollector : instantiates +ObservationCollector -> ObservableStorkInfrastructure: ObservationCollector +ObservableStorkInfrastructure -> Application: ObservableStorkInfrastructure + +... ... + +Application -> Stork : initialize(observableInfrastructure) +Stork -> Service : instantiates (..., ObservationCollector, ...) +@enduml \ No newline at end of file diff --git a/2.6.0/diagrams/observation_sequence.puml b/2.6.0/diagrams/observation_sequence.puml new file mode 100644 index 00000000..18257e3c --- /dev/null +++ b/2.6.0/diagrams/observation_sequence.puml @@ -0,0 +1,37 @@ +@startuml + +!include diagrams/includes/themes/light.puml + +skinparam sequenceMessageAlign center +autonumber "(0)" + + +participant Service +participant ObservationCollector +participant StorkObservation +participant StorkEventHandler + +Service -> ObservationCollector : create("serviceName", sd type, ss type) +ObservationCollector -> StorkObservation : instantiates +StorkObservation -> StorkObservation: Registers start time +ObservationCollector -> Service : StorkObservation + +... ... + +Service -> StorkObservation : onServiceDiscoverySuccess(List) +StorkObservation -> StorkObservation : Registers end service\ndiscovery time.\nRegisters instances count\n +... ... + +Service -> StorkObservation : onServiceDiscoveryFailure(Throwable) +StorkObservation -> StorkObservation : Registers end service\ndiscovery time.\nRegisters failure cause\n +... ... + +Service -> StorkObservation : onServiceSelectionSuccess(instanceId) +StorkObservation -> StorkObservation : Registers end service\nselection time.\nRegisters instance id\nRegisters overall duration\n +StorkObservation -> StorkEventHandler: complete(this) +... ... + +Service -> StorkObservation : onServiceSelectionFailure(Throwable)) +StorkObservation -> StorkObservation : Registers overall duration.\nRegisters failure cause\n +StorkObservation -> StorkEventHandler: complete(this) +@enduml \ No newline at end of file diff --git a/2.6.0/diagrams/sequence.puml b/2.6.0/diagrams/sequence.puml new file mode 100644 index 00000000..40cd5228 --- /dev/null +++ b/2.6.0/diagrams/sequence.puml @@ -0,0 +1,35 @@ +@startuml + +!include diagrams/includes/themes/light.puml + +skinparam sequenceMessageAlign center +autonumber "(0)" + + +participant Application +participant Stork +participant ConfigProvider +participant Service +participant "Service Discovery" +participant "Load Balancer" + +Application -> Stork : initialize() +Stork -> ConfigProvider : getConfig() +ConfigProvider -> Stork : : List + +... ... + +Application -> Stork : getService("name") +Stork -> Application: Service + +... ... + + +Application -> Service : selectServiceInstance() +Service -> "Service Discovery" : getServiceInstances() +"Service Discovery" ---> Service : Uni> +Service -> "Load Balancer" : selectServiceInstance() +"Load Balancer" ---> Service : Uni +Service ---> Application : Uni + +@enduml \ No newline at end of file diff --git a/2.6.0/diagrams/srv_sequence.puml b/2.6.0/diagrams/srv_sequence.puml new file mode 100644 index 00000000..2fba0d59 --- /dev/null +++ b/2.6.0/diagrams/srv_sequence.puml @@ -0,0 +1,19 @@ +@startuml +!include diagrams/includes/themes/light.puml + +skinparam sequenceMessageAlign center + + +participant Application +participant Stork +participant "DNS Server" + +Application -> Stork : get service instances +Stork -> "DNS Server" : get SRV records for hostname +"DNS Server" -> Stork : list of SRV records +Stork -> Application : list of SRV record targets if no resolution desired +Stork -> "DNS Server" : get A/AAAA records for each SRV record target +"DNS Server" -> Stork : list of A/AAAA +Stork -> Application : list of ServiceInstances + +@enduml diff --git a/2.6.0/diagrams/stork.puml b/2.6.0/diagrams/stork.puml new file mode 100644 index 00000000..2d70c8e9 --- /dev/null +++ b/2.6.0/diagrams/stork.puml @@ -0,0 +1,24 @@ +@startuml +!include diagrams/includes/themes/light.puml +hide members +class Stork <> +interface ServiceDiscovery +interface ServiceInstance +interface LoadBalancer +class Service <> + +Stork -- "*" Service +Service -- ServiceDiscovery +Service -- LoadBalancer + +Service --[dotted] ServiceInstance: selectServiceInstance + +class Kubernetes implements ServiceDiscovery +class Consul implements ServiceDiscovery +class "Custom Service Discovery" implements ServiceDiscovery + +class RoundRobin<> implements LoadBalancer +class LeastResponseTime implements LoadBalancer +class "Custom Load Balancer" implements LoadBalancer + +@enduml \ No newline at end of file diff --git a/2.6.0/extra.css b/2.6.0/extra.css new file mode 100644 index 00000000..3c436545 --- /dev/null +++ b/2.6.0/extra.css @@ -0,0 +1,10 @@ +.md-header__title { + margin-left: 0 !important; +} + +img { + margin-left: auto; + margin-right: auto; + max-width: 80% !important; +} + diff --git a/2.6.0/images/problem-dark.png b/2.6.0/images/problem-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4c601386a0e921af9b060fe5b7fdff4d320a0bc1 GIT binary patch literal 401154 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 qmehJu_sFX(PT?vIOOj!~2MJBZHL!$y# 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

    oRhE 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%0DrHX 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 @;h zaIbtc5OBuB*J_U^$bH^UnqNZjB|Q<$u#?)C;|NoQKBDW905Yp zyz3Xb8m!&-G3R#JMSxK@Tcn}*z0lGJaLvtk;<3c{@i6gyaPX8u=x{!?byC1TE)KnY z0Lis%6>Xe!6^Ew;Als6-y4g3Bew}tNb>kydf5Y_7mG?b(Kl?2xV;_KCtCVAz3^f?( zreZcX+l+Ag3kr@!ZlRSL&bbbx9_>t%*IuRNgC!ee@du*T5f3MdLz@=woE?<{_WuCK zj&E@%-&2o$07{IYtdDhnd2#eYcU1e=!!H%uqWi#{1l^X|KB0(#y&$?^~W1O>}i z%bEr(wOIBRvHQyU z&jWkDO8icFTW1|+WDR7gH2Q38jgcZUSWrB)p9m|%llx%?51DJWdG|JdGL>;d^? zQ;$uSbf;sFZw>g4H8;V&Zwb9X#Ybp8KRQ2L75wA*rC4~t`~wj+34b+ABrVw_Sq$CT z>t|I0AOiZj;RI^3^y1(8Q`2FD{v|$npemMFPK3~7!^V@#%jo51G_8|vtyK}Ljgx5f zTfzf<@<-{-e#W`(k}|aIoP%#YB(iycFRR^-U!uOb)VsWN!}JV^qE)WbwBcjK*$^QW zr1HQD1n6N_F7vH<(DB4 z3yx!`&C5O--W2Tx#ai}advCXjYS9tU!0*BXs&#X##ZuzX>tmLz`^+=tMFcyY9?%Ws zJB~z~TWy+K`vEydE9?7gK5)q56lE++Hj^nA)jKZ`_@lC-V=`koG!m0I#cGs-=O>_m zu9m{pUe=a~3Xqu-m$*%tHa95G19ahP%}9Z;zn`b~#!xqyrdHx^MliqpzK*;D?7xcZ z8>rEqfd)e_;EU z=Dts@?dwoVKaDJmKH3dyON3FJTdxmsj)Dwko0iZ>jA@DpM`_dn1e!>73YK|wve@k$ zic7(U|3}5A_i{EsSBc+WMSvWYF;1gOoboy20`@6_2sxj|fj-7+sqpuJ*ukp$27pHv23jY%S5k)NT;?z8g#Ae0`coE4R~dFV%!BXuA6*=9Q4?W8$}E?+JafX#mD7F zO;2?e3sbbsvQTNA4xm$fX#4k4A$r!n$DwfA949p@_8pfzlh0)5i?T83n^{#3JdTY$ zSN}-qVrBOmL+g7YF==gkJPvlB`^A%!%}O6@@Z!3?Y0Li_IPvLza2eo3hqnfMS1m?1F)&~hUqrRL~D(L5A*j%`nC2O+oq5lOS9;> zQU|bNf8wn@+r-4#Mf2>k+?NMm+g~*xMi*N7a;jD(=S$puG=keqTOZ9ullvoN`o$Ii zh_vs4Eo(9Hfe(;(9@IA(L>On_Nb@HpP$+ye(`>+AV6pI=$$W%oZ_C7G0MO*&aohhG5zXOiro?*@B+$C?s z!(cR8!K|tXs4Y*=d+;}z)s?wunq2r%_u@ct<|QH*pc7?mifsGPpugp`VBxdbw`DsC z@2(Q2dIihuF-f_|9O@a8Zjj}%{K*v4v#3Q>nBu^d=dr$Tn>FTsLR34i1{Wy4+onUY zbHb$i(#HgCPL80$E)-k>9FIJ~shX9Rh#Z2XK&ss0PVch^>lgauZNkkHs3jxc-hVq| zBTuNxfIhmcoW%-FS1PxPFeYn#CGY(Ni?hDUaC?-9?12kdd5hwS<_)NqViV;3+rjcp zx|h{-w-#5%0$$yy$Y4Gg3&=3X0s!zC#Y6L8dVmT%c-Q>#;3++s0hB-@n%zPj(g_Z2 zhHWaCkMiT404&jUDy=z{TpzD%^N5q=3yUB_@l=Hn%Yux_#!Yv+%Uhf}G`L;u_q%XG_(L}=5QN8j{KBO(F2g)FE8Z+-Lgi5M2~nb+%ESkmrVXdu%}}`oLE2q zmGGeYkC_{P`Cxg1*=JUFqO%Z;&(l{Eg#R5~zVQNCEDqA^;h)ZqEwLWWw^>2xL4gP7 zEQLuI*(iO~@YhV^Rp3k;&w}REMjDuo^hc&J?IZd+9P36E9Q?BpZRuC=)p0gxivREJ zc1(ZQo}v%gg{(^YDt^qMW?l-aku$GnSNS>6;RRiYT%<6eEIatI(_AahqR3!Y;ZhoLG)r1Ac^Zp~=LaJ0 zEI-kPCo7*j$B>5hyzf%foM2=W95<7bMk!6=zrl~<%RQ~Ua@IFct}4e(ffd4s8z&_9 z@{0n$~qBc-F2#0Z@>RUi}nxT^3F-n82xWS z&fXA#i|GIwgpbfbxJB?7fR=xX@b@sFz4MR*V0enxC6>DT#dc7q<&EG}M>2lN_K@t? z)Ym2+S_z4RhzvA~4z!xnZj)WHs050V?tA7k+j~c5mM59D#lzl8&gd;UIy|3^uPIA0K6Kzo2t;Pb}2APhgQs^wb4}CU=G&PH( zG|c4iRr5UsB7M(Qj-inLBd@<_#Rzc9LH3E!0H`6hoIh8`dG8zp0{;iv_yWN3C$#|| zNBR27K|{lob8q`%4Cfw-a5O~spDrgQoH4UdD)c!lLV>wWcbY6?*u8!6&FiCcu75QK zDbb9XI7+8~KA~>dRv=nExaieLsA^w23|A zqrno}6Dk&3Kvn(ki>G{Ve%LHiclt;V{r_{_#lQuI#4A(Bm|C3uExWS-^>8BGM0&VI_!YFeO+rLNxx}WmjSF&S>VTQpWZ)YBRS$W)${m_2H zy`~TLb%#y{AK9G$9E*nxk%Tin$^Bqoti&CQQ9EnFc>&}F%iE{V=*uF^Woe&}p_2Yp z(R`cd2zt%jtO2W4P(_T@NrI15+B=S>X`b%?Z!jqIbE6lyFP9UjJgKN?7hH5(94C{)uYFW{$e)n zGQ>33esjDp%bY*U+~Hw=k(^6dt?72E0xxYcZd@34)Bo#B;Oaqr<`)b7OwAz7_gS^6 zz*>3IWW!j;ZYi8<<&wvuGXCD%IaY0ypY~eqcSXNEOMCE1X$1Si_TXs!3TW6;kWl3x zq!@F$?h)Cz!6pga%X3RR&r9g>=DO&&2nzr6>Oh+9W|RJ@8?k@1?OctHFU$A>?)bB3f8D+g#Rq^SyPdTDY`opB7<0B9ebPd3c*xS@&ntCEE^1|Qps}!tjr<0ydTR?i4=y}Rl z53c@L-h$0JW3=RVe;;^^gX_VYJ_`M*m%RMy)Pg}O%GYUigovJFE$zkWOF^X*hPSKC zS18F>>gJM>W+mv*$Y#-Ev(8D$3x9lf{)60q$VR-+bR<4VCm)|O#C%kIvL%dZxvxP1 zRQ%$-wUf}))UF2sG|ss`#e*knfNh@a#?wawj-+phOzCi|%dv6_0FyokMv zEBC8Iz`!v~K$$U8cPkwz13h)#D&rkVcvTiT} zQa3H&{)>&k-gD@eKKKzif2O3(2C$Oc4z-4*LvjK>%TdkwQqp#9wEaGbPXmpcNPRMW z9grKl_k|>ku9v&G>wO9}q=}J%*!hIRWU3nBW3 zaV9dj(GVfM4ubtg+%mY;i zAqO#4&=~3zebU?92;AA6@1MWX_KfzNoJ#2BY*zWPqIQ*(=EIr-N(wdK@;A-f?Bcm- zF*6;IIKIUGDWYd~q2(;Yl7q{r5K_^^nx{Vp8w9-QH~%6A0F3#){?AZWqIqfUBNy+v zxZa8+3&X9h8IrqC?6fZD&x+q;9;d}>QcEcb{Clca5S6Xk%Xke~OEzth{B!BX(Gm3? zUzp0+uLvJjZL-skoWGyj0-A1+D+${Jpm`ui9Zy{2%jTbyEE>C%Bdmf9k+&UIuuR6` zR;Jn#NqwX-QSmlaSkuh2Rx@;9pjLLy;%LqVzsFSI1Ky!9z!`*HC7-5EsuwCHoL z>9l_?mv4-SdL%1eLjv~O4A9na9P2sJs8~lpI53WjG`zZ>zI}RdTyO7Sdnl4R=!38R zsMAz?_+<0AdFH3~>xPSe0Yu@X2vGgBZ6EZ_lS${Qf`8=&MHE<(K>^eh_ra7OF{I0Q z9?T778-V3j#>~7u;3-f7C4)1!C+srivEBXhQ}cyYvyI*0(}V-QY;PJ}>hpfKtNW>+ zeeCmGYRV0~KSV+1wT-r^G^)!oEx-(pww>{K?yFQd`y!k!h5^wo{q`m3x=QhbEP`+U zv=KQjle{M$7Ew&6BdlMDaOAxac2+Jn#kck^Wo+0PCGA3OOA>PB#JbGJ{1^#ys*}Z( zyh*sEmUjg>WV2=dcHoj9a?ez1=OVkq45qBZ9T*o_g)DwBgQChhIFR=tbHwJSG>_n^ zeFbBgZYPMwCPooVYZsX0_}oiJgK#YZbiOyBF+#Zpg`XztA+MB}DqJRY$F_$e3neoHU5Jb9*bbnYH@kn!D_;e~#E#y74X!Uce=c0Do?dn2@UO@0b* zcm=aOiZ7v>_#lMRfTW9;0eqxdI{W*lv5y;zp4OSmnbT;R8R9R>U>dCow(_`t59qXv zvngrR-Lp2TTff%DLY&K~3+(IgFC<;1Y0?yeh41F~8=-so3i|B$ZNTm^sy{8Jz6^eM zlt)&dDX}xPo++u=gk{>?3iR_e?dD3f5#~qbuhE*VIU;J842UG_IU$fL-$2}^XM&Ab zsGji6@S}svBY6hErs#D5Q`_|caxr&~u?9qE6UUP?-2#49zJ_MEolbAf8?>OrX!Qyp z&mMOAS`(_0Xj?i|kg~6Yz+7EY)`C_v;~`Dm>lk-}1G$+}Tm3}@CI~F=Km&4;`-sax z_P&(NOgf=ul87`lmu{U>DjJ#q&dQ6LOxyv-h!iZ)L`UkC&gRwY+1Lnz%#QV0u`GXa zYbJg09J33%tvQXI?&_g+eJXTvSdxmi1jAwI{^@A`eg6a{NtvzIfiF`XOTeVV7V0K} z6E%sNzc|lp1OUQh`I<=Rw`Sp_#sl?W?+g(a zOv$b%w?rOa2M@}Fx%K>WjamT-w<*^a$BZRXwbRUl(gEJpw_a6`*=S>*^V1~V2e1%m3`Za*}5!fwP;5CUctHOQVJr5%Qg#t4#-CP~3RI!?>WXtS8 zX${kqnQY5$_*-a1@LRc+x`ygkTJzCejGz{V!p(sMDh0MGwd6sOYNP(4t@%ue(AH+W z*F3fJrv{dkaNP2rJNdQEio^DOVEIG(s);T%v&cK`VX=W<7i7&~N7t(L942t7$stL@ z%)mI1sggx3d}w4EBX4LhgJf#6N!kfY?GxQ+`VB-OOGRz)kPDaQ%^n0)_5jQ8UK=IZ z>TM3MnOY`P;Dyfx#gz9i2TW7BSjip*YdNxY4RS7YN<<)M5I0iQWtF6ZJE)ulBNb*w z7v?%@*AL8UhOFa`YqitUUzdwn+MhoWt7<85kDa}1Z9Ov2Fh1TSGrhUia0|*KM)ho} z{bIotI}(6l$wJ+A+cmXHv(;BUPbx6Dx@=lP+l(pb(Q`aGjJw3u-K^o@-TIr6NNdlU z-G|OqY@Q%z5ORL4!ZI?$+w`H{Eqsfo2oETpmjO7h!|J}Pf%?)JBq7mmjWD_pv9Uu@ z{6UWmK6-_B`51?q(!pr#>Pfe6&{La{&P?dQ5B!qD<3uK0z+Q;al3MAfP=}`T)y>p< zW%C+WI3H5>&4Z0HkzA_+_f~K3$|}F}A1i&h*WXlWFjgoVp|+3m8x2mEmP!1$+3?e2 zm-1$0p?a~wGYREcd*^BSGuybY-B3GCd;aiBmCX5E9MxZQ+5?_Xq%EN(^|&e$D6*IE z1s|1R2zHZeM`MO37)UpMRhtlTW9Eic_X4M&=1E-5YMsG1`hryykNRI8FccvCt4UJzey0U&z^8jpDe3FlvaGcW}%d9x>;Cs-idPc+< zUpT)IqKJmmA-HVW3Is0_q%!wYG$x7HY60e8SJf?&h8x_xO&7-5?Z0dgOe6mLqUqs+ z0)GdJ3pLnkNxUD>aOF6wsAmtWa?)qj0$k~?)+kh#S6-7^^lN>-d!t)_IE@4O985gmx7JM~qhrB_8dxDPm!up`ZP#5^(2?fj2LwhM56T2OQ8tNLzxtzJs?l z9V*^kmt58^k=JLfdSP<=ti_Ke^SQg8j!KtudU}8?JbKLM7lUaPbzOh1inb?3mRoCB zXZgdTArA&{3jorEWf54>i`(;`<+YFrX4=50EWS}YdaHH99Y`-U&FmA!668mw)_Z3@)Zya3?(e(T|ITf&K9IOiIJXKLp)? zJQ29>{{Bzhj6LO94oRFe8Mvgh|9!Y^HYHXfsCq`g!`k#5SXvOirqL^(I{i-Rh7@Ug zfY@fW6-*$?+kAYsb+=|)!2>6}(0dO)`HFjje6{qXeWZ_&X09AEdet6-bu%9bJ276*zxNi1Tk||Lww*Sr3SFrf@$gECB*ik z5-pw$rm1yRWATZe@ezubNvo9ud*{eO0r0Dw6w3Y;ce(OsWIE$Euh74*WPl9@7mD{` z4%#5OEd!xC2d6r!8Xiw^G^OB}YgsmltAIok%nnJyqH7V7Sn=sFbA}|w+@hvG>3Z1Q z>_iVo&HVGI{-v0mJyxc}Y=3C-$hX4)H^kRtSgU`#Wx658F(^tk_u6lz`V#n&<^7n` zVQaiDqtS^6HSmVg%j6OTpkG@pig^Xz1U5wP_yoPjD{#&Yo#X zUz~E`+7BNCQxNA5P{36V+4uJ$^L-O50Wm$h+n3bR)+j_iot0fI;$($HDDMP9uO-&A zf0_kb+htFM((~hKLrO!9Tje z+p=$TDT-|!RORbC^?ABmah9Nad%GthmU3RK|mGi3QCdJ-Ujh4&1hvsve z5QNk2ofy(3x{9&0*sCT`NWF8reHS>6|0I1%Z}(tZ|E4YPY~HKY0RA|xwiC}T9+%3@ zvM6XK&ob+EN&|94sQg|!t?#6cvvRGrte8cpnb`%wwgT_Q zhaj1@ry3BNAs=H~)wXC$_B!VrtLbPZ|SCrirejA32;;tms4~+`czl z=5lQ!RWFv;@gursHJM*cXE&MrEh9+qFTyK^PGw$#r(TV|$$j@`4Ba_=Oo zqh~yOznE-dq@(g9ziWq<&>~2Vv>tD}Y;bn}n{>f@jyb&LYEaEgt_wt06z-G^9w$Kl zhtML$&-%xOTt=W;I*_GY7KtIK&w=&@#c{dzVwlsv_Y!CQ(qE);6+>Yynd?o2NWS1d z`nxRaJ3-5vRUVt$F7&+^FtJvX66_o)j1Y-2oa3*+l@Zto-8luN1Y;%Loivm`mo*oH@T3a75kzcyO zjWg|3E^N%B47cjJT{-f#rA!=sFU#O2ohn6iqk2v1d-g zyTTP|`kHtB0SNv>>AizU=3O@UF>K5W7Z%eQ$`=LIN3jI^0GZqQlj65SV$2VW| zO-4yTPC(Af`WD|@;|;zk{pd5fnJTLzi*axc}u|)GPQU}QY<7j`H~LrGQMtS2U$Kt%=9(2+7Qq535_Lh zo>h!9W}ZXly+#7xZvWL>@3B#iuf0w)9OF5LXfqXeSC?sSj!ea7@mx{=hUu|djbu)D zNi7jG<7A=e!aEma7K+~wjF^9ss;U`YDcY3`xfb2^LWQe$=*d@^Yf&D}-hT<~O0as_ ztLTKMCv1a!f*)Kx3OrA7XIyw<`=um@HOI9gdVx)-A_l4XohSZva315p;BM=Wb_bi5 zFXudC7c-_NUc&GrLHDLJck&Wn%07*c3;QQ8@Fh&)3)`)hOTrpP69$nB`@cRg_S5PG z{;A4eH_UNRyr$!#$tl#~y|6w&F3mLcD^=BuUu(?XGb$){c^Q54X|W53kY*ml(&&kE z`jawk5tqd=v?kzIuC9He=0vG5@8FogxPX6RXHnFw{<@P>QdIb0Wu2zw@JwQ1cH@9c zL6?twnaaV{L8Z#lIA` zJrq!s*@jM|EN zP&6^}$39zsL{!J1_Nr0B#c1gq-Q36bi;c#Zv`*b}`4nTEm+iXPf!RM_J3H}YO{F;D zL;5+ARKV88tU~>2m61^FQj&5VTi8UjyTQ}@M-ATV@1+7ShVjF9D+=9A8y=X|V{=7kF`f~yV20alI~X19uWAOS3Jtt!n!N^+Wd5%1GaUrWPUD+DL?`z^CW$1TfBgXHH+NyC?Zu3U@`EF?=u&ZkMuHI@$78w5J$W)_Jxc3UhI zRw|nl26szgIJ0YqzLa9464|7j&Nk81OviG!SA9o^tpGu&11M>aNabOOqJW>>K?|_;-n4 zDN@~@ryE>mUfKHc+PgZR&yy~zbuJS(xhv%!U7>7M@upJFO0uFh=x&oeu}LH4dAPKd zOoX=}8+rgdxm@+dsvF~fQ1R-^hg$c!x}5c4ynH+KX#m?qwu?#H`P9lS8nV-f{lzGx z!PRa4RYS$vN6Ec z$Ldb!TF1(&bqg8PAM^&%U!J#$u7Mu zWjx#vvowz1x;5tl($P0beWjF$aji6Y^F`1#(KG7XrNp%Rl{%}VIfZFWMNGr_0wwYJ zF=(og-l`H4xvvs(;S}DYy5yzX=lIHiyO>QolXD} zTP7?C(r}mM%GVI3x7zdP?oN#CFunV!S-w6z;mzqSsxRBB%-(fXaRj+?F3u+Q=9H)Z zE228@RCBdbbMF1aPxkA{iaG^J8xa!%4g6c_Vk$?ZPGOn?-+aa|j|ZPo3{rm3=o^+d zM~)7804g!W-H8dvWGoIoYvLZ&@VxA_B=$Aqz)6P?&XW?ZPesMR%9=7fY(SNf1^ z80jk|P8J#bWmAPENo4D#f_L91CF<9QXA`$2!1&zqg64-{qK%@f($~kp&QbD@VPhkA zgGQ@`ZDZccRr;u1tNlLv=$J;^xJLf^Av1mrtRdI?8O@b7*c&n7p6 zlhu0nnmmf7-*Xv`cEz|zw;?gtNMn8sDzz75CtUn_w_gk+<3)WwSHxslea_oelPj~$ zUI1{deR#t(QVDocV|hK*I}9U2kjVs2xwQ7-oSzc!j>9tIEm-BszLQf%pKLg^j}3Dk-}+% z!V*g+cBGQ_G%xBVuerZEqh%!bs9S_551Gze>@<&c{>)dL%bT=jI!89o__^=DQ*QGy zKe=#~$?4K-=;jCO#5?#E>$V~7xYm*ML=%Nd)SUZS6MOF_m-$O!-9EIy9!H@4pU{03}B?E1M__=nR+^kC!i$)YSFn;p4qvZFpj7_uVu^z92lu#XZ|PsMa)MQ+%AI`RUi2V&gMsw9MsH;~FFKy#2hs zPM|Hyc4L2UPvrwVu{y(bcb4kPiNWL2f=~;G!5H+1WLVqm?V5jD9?lWxVAQff>T zHTRgmyZtjF`d5uEONp|Xoop+s)@jMgzdqyP&{Q*Tl^P&+C*lNSe)?;rRpl%0u$#Ms zx}0pQD$P2G#pw}QN+i&bOY98g~DUF| zKvRey??mf;EyjlypW6S^xCU+x*%pl(cLfH+xHhm%+Ml44*FPTQYZ1SZQ;%V)yG(@R`kapYPkOTa zEsPX(7k(q#WE9G6tYLN#FM4Gki>;9T2`o?J=;Cj9=zVR9@xLUcbS$70GXJHsB@v_V zZT?V6YXR#$Ci_T2JQ0Qwy5(;;T=Vu445{hl^u%(v_rm_Ff88Bd$WugD&kOYHUU^m}yE*F(HnwSW+SvFl9-ACQl}Gc$@9w5&|NRb%yG~_PV+59rh19CH zeAL2y6wx(fjdSG~Wd03SIa>g@mrD$=B^h9?wN#e?d)hVmX|+S zSSxbAgt!&A#LZH2=BcFFO>h63Ppi{J^!-{SKg-vqOmpIzY-O)up2b#2pE7d@3R<6C z{WU^feJ-W7Hh$CfqhZ8orc3C2yGsQ@-^SD7rC-g+ie7vkUuV2iu1l@VX32P09)`xp zd*^=2?c7Rh1@ubU&EjZe-ZX&sS*-L{spp6DRUhx_giw=5jP}7?=<2^WGgu*S1Q?RZ zDIdCq(iN2a2nbg7ci&-;zjt>?s_*I~iVpMh9B9f}J5KWyfFy-pIk$wunyF24Y1I8G zK1J;xe_(`1)jI#hMLjZMG%nN9O(iYR1i|X;g9~fhm!AB5wu6tnq<((*_gT3s0*ylO z_)WQpKnubCE#sO$>MdE$_ag7Ut%L=XnNDx+-kgnBODwDH8u}Th?m6-CG@tX>;>#MP zXY-R!G{9Ho-(Q=0Aqgtmlc_qDb1G+;c9U;Bu5~xVVqxujjwpsxt@flE3+icgnTpv& z_4UD!Gq)aAv`DO31bNljx++=(j704ud0Ho0)vhKz0n*v)A}j zH+M4gon{0%RV@=fg_QjKeGr##mHXtk{95$Vg!=P_CP3`ONC+m`sH)Yp+b2dfw_{xW z!AL@WbjSo^46GinWz4^Mg_m!*1owVjvA1V=|NSsO4Ug8y9WU9D*j%lx_V4=BPE*s1 zGW~Pfa!3>FC zTK@-IZy6Rxw{#5;3?AHF0zndFaF+xN8r+>=!QCym2Y0vN?l!>_+zC2Ba2wp=CHMVZ z=R4;~e)f;vU0r+ETC1w|?v^Z_J}0nQtl&d?aLAN=e#qv_rF+D? zpyT)JDp=h=UC5|NP0+%=PRiHukbRdh?z?*J;O68M|JmR5a{5k^Kvlw9!-z^&n}>ZGdXX~B(U@~meqb-n+cWfh(DwUAny zZtfI4`kWqm$>m7Zt6TV%UZa*|di4bztL96D0hA0&tvc~s#`CVGs`R~5P0%ch&cSP9 zOVZcR$n8%g0%j?2gtK3Ot~OmWXNo>{e9iK%VCA`=sp_!rTOg|LMP`CAbbHrqj{3(& z(i9RnwaV7K1qw2uFHGbbm0z21@OVAFGE4_dq#P39Vt`IYRq_#`vwe!UqMKF8fo*!u z;n#AWwdIOY1!+b0S~9gCIf$Z;Chiuv$`^gMgUi%1I~}>OPGv3-*h*$%UxvIf?yiOn z!ieSZ@l!d0=}`Dk)geR1Q~~(Zq4L4(BYm8PDhflAOqa8s=0)5WX0>Sc*(aS!OMg86 z63?%p1|IBzw!uTDsaMZE;^1EcuVD;wQneJ&(U;LqcZv zY*#Vzc^+h`$sSj_DegZ$nCOyQvNOE+IrP@;W=RjWfd5ZAX~fbfbPTLI;SI9ADXP)?%lhNRvS-(V?S1NRq2(Xb2?p% z>+B!O5X-#QbjW#`Pas8_RpmSuU%pti0lK9*zmz&ZOe9>&r{CDZ!VL!`g_25Hp456g#Y?Isd0mDNnsRd6k8J0(HNAs>UNP4U8xl;R7?w0+eA^C|~a ze&IK>@-oteZ`R_N@z1)y^w8H_tgWq_tF?S+W7Bm#>|CRHKd0Q%e#BjS#k9CoUbD`X zs5`c>M-gl>bkK=+C9&vPtJWbz`OT@)wob!0KcTc?dvGSiWh$0yuV=*KTv0bmd{^3g z%hNJ(C7?0m=BrHpP~OE=>ZPLZgb}QN$$C=O;6^)k`d6gAzx$&+3QA!AvY1qr zpR~C*GsF9xRVlIW19k;p9dWcC6Opyt?Q% zD9DGN=l-!5b@h^*Mu&&3+T6g*+K#f~oL&}mh!>s3Bjri6GOI*Zk~_cliTZN) zhXtqfMtFAso+8;@`Fffdby#0m-v&9EHkH5Nkz%zS(-`~fvm5U1D+LwFgSIQIfk^ejiH~!W?x3BVE84Z5l^;jixG`Ik__XM|jtj|=Uwmbn((0#CdDzD> z&?)!T(kgdgwsfB74AFL%8e#1Zo=V1RJv`cr$IbYW7G4ozuFKuDwwKhvW*ntjY4+CG zoS55QrK2rce9e+8QxHd$!{h8mT}IbaX&J>EUuBz8-M414*qH3K(D7VHPb`ZEbHW^K zddW6M9iQ+`(sX@-O4X`WM7l;%2%;pZ=NDXWJ`3!kjQpXvonm360+gLwh3su(ZbyRpq?X`^DZV`jOl zNPgP?fbPA>s~LnOfjNqQN@40auch=mA2uZSO}KA!Hnpv_&P=MPt+ZV@=9w>|sW&(! zP2Kl*7Fla~E^GXhqT{S;T6I?Tg7$y%+HS8%j4c)0?Eg07|M-dXStA*D<+D_%*JXKd zR$i$Wz^F@Xv`+R8sB=tN6)4W^pTtQljo09EGK?xt4iZN*sM$3Yn3niBzp+r_^u7!_ zpK4ZA#dKKsQeK2z+*v%LP0z${^WM3xblE&nYxQ!cg=<7;Wb;loa*M|%zHx!(sAS(X z(@8r!dks-+LC2AF>`?vYm1fUmxv7)h2UW++h2Y7pcj+ZV4W{02CUDWo_zyp;Wzw8% zUB_7$nrZ8hTAI`>8riQ;I}0@!C#RG*a7>C7nYGMFSXb~CzpmxA$hynriV8-TQhePq z_PPWA*U5C<%xv0Mar>C$?4JCuW@kQaC4J8zmbN{L3>|UC@7>b1v~^~XG1~pAl^m>O ztr1guORt4OR#(G!Xj5K6j^ZtxTjk^Qz8Txs*MLD?UsTMZgHtarsQ4B*-p;PoTK(cn zBP6p-XCy)HoKK3OB~AAgZQg*Kpf~q2*NH$B<4pXH^DWWY*_>B(_d)_~Np`SG-5nO* z`um%3F+Isu$yDk+Jk9J&ONp-C3dw*Ab512cRRYPg`nf&}e5NTlnG4GhnBAUENjb=E z@r7{lsYPu;DFu8a`W@q5p_BbC=c3cfJ^JQ|*0>**? z>*Yrms#mPYqP*C)igNKS;gU%>N+_+D2p=0!e5GmJp%AYAyhr0Zzo>MRX_S?>_fXMl zMHc+KffdCxq7LurfxVrKkBg^?CrSFN38X$EoGXp(+?oniv=33zZ1eMJ)1L8eD+<_G z1&IZfqHl+O~Zx{JQH zB>K?}Ly5dLtw)_LYz_M-Zr-H{QZ&lm`WyxA5tAOIb9=8H{R&TAwk@3_j<9E5^L4fg zO%7Yq=*H|VI14ITtLp`5@+H(VCMuw8e%-U2El6zDnQKUs<_H;@<|0;XxozvzERrUW zfkaB`rqq>k82Bk4eQ`9L?(LFtLch5bj-RO(>Hw0 zt8G?VF4Qx%nL-Uk>-eGcmf_supw*`0Sz@WDD<1aO-A-fgHfq)danZvITJH2(i7%Pv zk6d;$G|aL0qjjiH7F$>jIK#J-80EQKOdHjn>lfyu6^7fpdU~_7CaHO*Z7Omwb~LJ+ z^t8@(hO}wR={sIOz9H3jt7Z!HbPgF`e&XFEccAX7du|qcqBA z7#uXRabkSa&AnuHUr~z&sQaE>3|Rg2zGC0s6XG^AWr~^kOS7}O36A`#vTVCA(S68L z5QveG;g|-OSXZz>nnT~l|LR_kiFMO6ilc15{d0hdkUmNrZo-cd>YjYdS?ksM%LP?B z8NHt0_wgI04_h`gjxv--F%lszOQq1gr)l-q$rvk+Ju&LfWtlF^lvtNzbpmz=cg8;j zHNd}v%5KFySU#8uTEf6WcxFH}s@@OA+jD_MINVa{8V#;SKB-6y@;04`zxXm*0=yihjB{|Me+OKxN>) zfLKVxlD?!YX+h}v4Y3SMpi0;yq4a3x&N$g3ohq8{uIex7>`YYsN!Hh<+xV)kUtfrB z*!W%s^RGz1{<9!cmn`xmvI**F+a>Kl-)9sL&ZK-0MS1TLkhg0yewRHfO*wIr;qyVW z{%uuktL4D>Y(vAh6}dXsfpXGk>qH{J!IsCPN!hn`R@=}K#Se%39?mN$9gI*cKIxlS zKB4Vi=?}hLqt0pxRq`H${Iu>$<5A*hF*{>cUJkEHI&&tV5v2Jnaz7yP0!Uar@u&%F ze~PrbG_VDMSwoM+kzNt?%h9+Mdz&k6maJ6yA&i_tbAUz6GU z6)Pn;BdKmB9q)n~J&z`FQD5_Bq1!cETR|`D`q#5pcI*S^o0Naq?gZ9(S#2;>fw)6A z93#E)(L^OICSG6-T&+Dt)2hmnv^XA`U!S|dNpjJDD?#0nuNcK`5|!B_YRN@2QHok& zz$}P*@I2Ax*w;o*YvYjnZxkHs3zDVJn`jl&9?PZ|wP~>TedEG5HD>#gg7A`UM zYuYqEwlXb^x7#-78TH1P?z-sW7D1fhNk!{K zT>qg=w5xFr_+cFo|0?LidK}^30$q>_+I%>7j)6*Q_w*@2NF@(iqU4J4g|J33w#Stt z&Ri6qyK%Q^L{v$rkxtXw41X^1FpRh-Dl>%KyL+@u50@I{7}@Ri*~GeVu!*mCufefk zdL>aMhtT}{sfcxsyVSgpyJQ+kec!2R_*S1%36|>=LS#Am zw!fzs+YX2ju4sQgf3EWWpXE4=1X~uj0})5uMV!D$JhDsr6(#P`w3PGQhkb3)S{Wz4 zAJ4H^lr1BJ7Hui@N`Aedrp3%@vH#Uo+bYE5Lxgj4U;)t)X%PrMearA z!Onj{dXPP=Ccf~lAUC76isgXx$QSyI%<`0aIs2rQS6FVD=* zbUn2bR2>`4G8bdJx2~4PG+O!g+;aW%p8Wm4-miMLq1^tZ{Z>5yH~IjP6O7vX9FMzp zi4@j7K)+W}G{5SMO*LDf=_08TCb4JVsDi_&?B3ST+PP&_7D95bc ze9wDu9sR-4WEW+V91rFR63H@@vo+Y04ov9#I$0exjMk5Y)M4yhNF021S{3CQEqmca zSmhC*c5c_C&Ob|3L?V>rrOdJP_m~WX7|EeE8tXlc^dqwjpRR3~Y+RxnWbP}amY$cNAW}P#AOU1dBG^A`NL5G~o)b|o z;x`t!{$wr^?TtZ5Op&LPj7hygTmE`6shu8Ne_4{e%6T zBVGp)SU6ZJWJ)AB@y##P{%{I#eI#O=NRV~pouks`$Jnc*+YSDA?h0{xCH67517sXBh z3DDG+DgM6Mj}Q}RB!U|H&q%*7qS&jA4Ts%^LvB#KUhW!9b0MsBr&A#{QMbR?B3OZ0 zV^v^x2p!1iIg-Y~)pKH(->!?#X5v_B{q)Z`kxB^AajOFx8S)^rV{GGL{WI-ZXJVu_ z6Z_^-R>w}GF~?f#4MqRdb+{uR+b)NjXfiS~(V{VQ%^qi^uSWl4$bT*XggmER>J28R z{6`35bsem7y(`h%TaY0H42YfWHOz*piJ5+Ry<5LP(7_Yx(mDzYboMT2{NO={q~0j? z-`6W(t%lZ5!LqQM1|cuK;u%;8@k-Z`XP5|mONt(m8NJ2hN{tO172TFUH~ z>9D$%njib$u`W%sb$U;sZi|etED=7uW@Ut;xKbP{=FTK;>#l0_Dn6$ut`Pm%j*;}nY9Kq3<^}|;(7w@5LrU<+F;8~xtqQ} z%=zsee{0n1&eYJD?}tE&HMRF>mM6I_jAFr=m?5^Wg0w01e#Lrbo@5lm(s?m!BXKpR zw{PLENaViz=T;w91<>e}8_C9pJ|iDqm9@O>8U8z9f}ub~z?!AYR$?@c?EX@<$6(QA zENH1}q)PTbOXR;z2}T1R9Yk+p24w2mDGS4Abyq0halyjOE-sBnB2r?fC&zB{y5Uq^ zMjS=xLCBhaeZ~CVL_g3AtYSgs>hb#C}c90c*oj9{>F9I zm0y*t%Khkg7|;7|!rdF*{3U*ja?lZ=6D_l|WLhT^ytdNj8Ou~i%9P{*rFx%P7CsI0 z3Vc7gXGjq;qTZ_Z`i7A?BG25E3u4x|YI|{YSeh?|hxL2SS}QpZ3y)? zv9()OvI_B_!NVKP5gl)KKbZRN2T@^#yh7z}BvRG-ulW6sPekGgK}S@p{&aR<$PncW zv5A-ADKZyfvMi0)I8hb9=~_nKq5cZa1V!~ee~Z>eEQ>&P#}+jrl?gj2y*_n1^4S~t z(J)!U$F1gLbRfC04W6;i$d+IdV(RwjOpqT&?MCDU+tHha&!f5|rPZU|*uncW@_m2e z$+JBi@&3vmbaxK%%Sri#+DzU-Qjx#l^@BY}&T5&^w>qr?u71i~LzdW^Cn#R9tY=aZ z+dAlO2Z8ssY(L|j;@WKWD``KE5-EWoYcPD4Yy7Bru+ZucblT6fY+h%LeBB?|FU!!H ziY)pzC2%d*K-W6_KVbGBXZR6*jrEr_9frP0e~~iJ#xAsx!T?2DA<|DhBOMC}sE!ZV zCTbu1%GI3VJMStBeL1VX-D5CSn`9Qw$yI#t?=S|ee#iYCky8ipp?bQ~-BV2-BT%QP znDNx{kf6 znacX(3K?Q5jGh^7$ozn`KJOgZIjIqEkT_)Ofk%+pLHut>woRB>TVkV=EFY+CF{=!2cZ;sF=X?(^1-C z_IsMqs>BkSy?8a5V(a^FVeaMjpLaEmI7D>IOVVyV^p$abF#atzMNp^5{OpS=M_Sgd zXJxtK`$9H{qxayT5OupM|;MC^h_U$MtqXbpgn04c|NDA zO21!id<49lz2dHHHo+KD1h%s+}5OB4t`@sLEo0rHMUyE)CxF2BbCVh5+cZ%o7f zZTbJtum4^sU;wpUe>D5lgklWeZ0K$rA-(-vMbRXpZPx=r0yXrixm7p3r6&g}x}hZm zH7)qZ|TYrRM!{TURLiu?)|^dagEgu{u&u<*}R3>{(>` z{)`IFOBz&e|Bswhe{)3+7J>^=w!NGsmoXc2(CP`8M>sy93q)gN+}OQnCHM=O#V#|$ zK64vW4?Wi{ApQ+*rVNP^Gx2WYkAK2T;uSD=!y24U%z}TWZBM*aLin|Z{>{b>xxs?` z^<=!<6Cg8ijgKoW{QtiBKbpgw7^r~WijvMQZ#KV3arh-bd(A{bH>LC#{~Ufw zvKihB8Cl+H#lswzu&w7 z9X7mqQ;x$POAy=M+9CFS*U03vsQtrwLpg67D>dQWgP<6urHK$Md4fa?m)1 zxyP$J#KLb$XMc3#O5kgWBbp2$dFoxZ$1~agH#hxjJ2H@r(9F|@{Ty*FgfR9@hrsc@ z2wqW&0$cm|0nhcdPBT1=2L?Yaho&%nGgJDDS3h$zKKTBNDFz0FAQEVB|LY7_ZjP6z zbu5MKEo%c}+O)V_1lov2z7J*M-F8oIO3Z)NcA`Dt!sN7yKG|yGYHv6wqX@7 zPIh?&5B&^cK;0;zfHxeb$hIsg&hi*~Pgt4En~3wbH9roAz?0ak)`S_%^b?c#-J1lx z_D{nsWQp5Ffn6XWo^2%+Kf42~cTRKy5ij7mpSQ6+GBK8*%k31W{Ua@{SWpSOQU=`J zfHZ5B5(7G?gu!jqtW-imO`6?y`GKYFf1T%vZt!~FfQNB=CFbiu90*W6h0X|7%ux1~ z&P`>8OpIYMniA_$Xio)ZcvCQDNJNpwe5&^2Z=~hqme4@A zBzLj0?Lp!SJX{;5ZbG(c-;J9sRLZFS>TXW9aYF&K#(2$$md}pzE8pY<#0)V+syPzj z-XUb?^`s9XedGy%GwL39gk_1J;=tydtoVm&{2xJ>xZ&<|$Xrw`**`h0pv3*>CzblW zlAWq%=|aKaaz`$Z7W|Pad=_yJLwn*D{$|$)(s&=3C zVrX?YR+jk-h*Ba*Z~%=XDps1SU)7oRAap_8g|;wkg2oqNMMS>R_aGSubyx2P^#i@= z?AUz>-xT|4n@c1Sv|P-Y0xRqAl-mdp*4IeH4COHrPM}4S>;sF_{b{_Q zhF5=yUL%8EcEH=_H_C&JkrWuQ+*9kVdT-A4TNA8tg4f6*t40kwP_L2hDvwR0vMmmc zT85-gsIySe{-FSn4k4%v<*m$@{a!lZvwqx@jLOrT$|LkvqK!an+Viwq(1&ijWfEEV zzX}LcHef|XCq?70RxK?D@i|-Ms6~_;m~K!;V2NmgLGwF99zQW1v5XMcI7d5*(ZiJQ z*JJ@p;;JmaUt)fR(A=4p;Dvn6i!;=1IYLPNGlNGu6y_P?o1LoBDJOv1I}T-utNt28 zGzfaci*Y~W(6j}Wt-g_B@ouEzw|8a)#f=}b>YU)aL~c6;cecS#$+^j!Yb}8<&ekx! zM(8al!~cPS$d?HCOg`#6%|V!zohC7cLfK^_KOEQ|Td&=|?$@uMGZ{8>p(JYm zL6gs90j4*}Ng0Dnl^w-k;~lfFOJRkzqbEIAqU4z?v?TRH`firRwR*+Iq$w}V_%H1E z!OE zXGqMT$r9y$ItaLyOusxN=>dxv23q;(5`jqvT7(l)*mgfO#5C1DtGt8uyx5O@BO%~Q z{14b0j1$_~=Pl#Hxlu|67S`DrN4b-a9=}!Wwln4^t^ccw6}$b?ue`&%X&Fsnxz9zp zhYdUovz1XLm9q?By^;w%(AQkNJ~PL2XJ$F>(Nl@`{DX|B)CgQnxWM-B zioLvq@u&k7Gczkv8Iyt=Ekt81!q;UT!MDKTggS2>mggP=1Of)vR>Lpm06E%FV_ zlFRr)l2e%o9U>l?{N?03@4&~k_StnJzB)y^q<@oOun4;XsumSWI=C4xW^FRzNPu^a z3OoG^#y#kbS5Zl~oiYi@4qDFbpS=4V^pU0rkc<7BYiU8rsD*POP#OE?UvGwM zdZva0HyN09xeM$LwytCO5YuW0G($}Og&hzCwcdt4*p8^516v;a!+xcr4y_%rdy0Pr z3He5(DvUN}jW({L=&#S5?iQK&)iM5D5G(YX1e)ar_U+rTmIX#22T`FkL87);HEe^# zVv9XUCtc??3CAj-P@^2O<)4W2SmwZ4m>57h;CB(DC&juSdqt~cbsCZO+3&AK5BZHTi znsM}`g^Ksv5*^qnc;cTJp79B4NZHn6z|+G&I_O3|(9<9o+5>d|QRokJoS4sio;iloGh*gMN>iqGQpj_YlN3W%=6K{5iz{gNz_8XerX&XAm|W zz9+8Py2&=m6e;qd{@0}yP91bb3tEace-$l8IW7pNH%h5SH9Lql{l)4(xt4Pda@1VZ z^Iz+vc@kdT*y)NEYzGD%+`g;nX(_*SQO(mskQezD;_s^R+FZqTO@i5WM>duR|D`)>$*s_?dDY+|EwON0%*H5Z-i7;7l7_$XxtY(aawa(SLME z>A`k+LK-CG=~`ur3IY(JMZhM4+z=se@&=Q9 zahAcs+xVyl;q45gHEa(1SjO;I4>f=wYmSZ?A}?|9Pu%li=@R{fWS1$6$W&;=kZ`ZR zb|_!I4%Q&`FnnBLP(D2=Z>X7VHUSU@1+Lc zRiOM8;zIr38iI$Mh>Amb8QF=73y|pKM8bG!a%jhmQykwzJ4}(ZdwQYRl>^ia}&P*`G5pGAoF7gU(h1%Fd5El38Pa2g!{V3Wd? zh_ebMYDPMwbN5M#rYkrU?tM@`>xuTK8>bHM4!e_+>)50dV||4wWI{kAs8d=}sl_&A z+>GCt@K1U5|5n&VaER#PFoQZi?{=@2pRlDcz1+A_2xriDmeJS*aKaCWmLjviKhqIj z%*+qdUC~QhAOh;59spHv9LU9QHNn|{pHLIZkjfF5QtP3ao~FCKp9-vi=Ode0OozNP zF4>(PgS9E~MvHUecdtQ|yA#SWFeS2y|C{>$$4kHgksad|1G*P2b0W=bOxIBF{>N*b zY2y1p`xsj`Onjc>z+;8II5Y&{$4gVdaV#B5*g0mAedU5EAgueNu^Y*Dm^{BxvtTwN zIq8b1!g1P&$dHYDXm?>x$0=qdx*?B;m!uToHcmj3Xc{lNJ1Td)^=;EB@p(cYpI?^d7%yMwxdEUnyYRypn%_24m*D`xyY)N$ zm_`I+@ouO=bt&JUtRmVAW-{ya7}hX5-0!j40&t^Z__^**f8L1hxvx94=^ugbx5za| zYUtUps#m}jm6gRzNs`4%}t&TdX)8m63i36lidkZ`>5UBty++{uXp7!t<8c8oxn4hUscHO))G)fL?N zd`@r@k`u|LZ6hq=V&Ngjh&~8|68OMlao1$n`y7LhGMEs=-A8%bcPgKyP&7NOtMet4d2 zmQm2G`&0YzZ9Pu#o7hJc2)-IA`|%BDPhxiL63ZOZ?YO5lY;&O@skOrC+JW4Y!D90R zYNxKsLilD>>ZMV;uF8G`2s$IZwPP3dLkaf?b_Hb#U;Gnq9-&6?$|yh{;cN2p3ju_| zUJ(>v43Azj^=OBHpt{dTWrs_=k!;H^z*W5b|O^_nEHeC4xI01z3&5)IgfG_+}XmX3Z%}?EJd2ehqp?$Mj%g-P;d&`>r5*%Bd4qm;o?gn;% zA`h^>yKK?byXh4w)g!G6(ALmOkH`OPLmbJWtj!BXkLwF6Y2*)6T9rXLY=A8S{;PsF zpLPi6G32_4H82?A8)0V-OlTgfwStMKv|^tC2H4S^+M zHB@W3(eWMrY)cw~4T(u09TNQ?e^#mp9T4zGT-Z`OuG0KlU{?a$CNN?wFN!xK`WZx! zRuWce;Rg8kM5ocZG4n$BsmS%2WS@!wzF*xE%W>(4;#wlP5ps#3Gzj#Bq8EewEXHc# z161U~LbOvJtC^0)OKh}P=ivvlx{io4G|?L678cz}k=yVUP-#Q9 zK3gNKkb;?X)yp#s+Opv!ZZ*cL&uFaBql8IZhfY*RX(KQ)#N;2GY#0&EcnRhP&IessZfg-gB` zI3?uqI902|ww;CAGsuI{G;h|PleT9mxvm)WXVB+=3Chs{07L*%VsBN_{KXxMkLR}n zL-2Z_dyV+MUCc<`B)prV;U{{Ddj|M6oqc(lziy8B?>yEToC375N#fs_WZruCp5`<&TvW~aWn0fOmX8VJooC4%mg}??D|IMaJo@?x zk(Mc6BsSqq$)^FP-u4isoU50=qb>@U;7dTRQ{D-NDmd}RaD4QdAZ6tg8Jf!@C%1A+ zYqHKIV?~*B?M`__InW~_X}Jd3>6!>?$%^`&F^<9RFtnk&0j@d0yq@tc!?u)<`H37w zV+iPoqkvDGf zNun}05VHy0Q89!DKE3@z^^SvpTPg#-ly!H3@^ts4LN8tYUr5mk$%$zJ6<$fdQ>!`W zc4Vg|a-&P;@*uZ6DtQvp5_F5@t!eb;?@LCqZZZgOhL3~$T+_z|0MWFgFpa^do&qJy}cWX+zFY$;Ucya zxNFhiMIY>=R_jzJ4d9H_kRw_E^%zgg&ZLm|*ot^bS5<{2=Z zNy8+UngC%tCp;0>+_V|xA}w#xG?%$0hHNK+V@9M>#FHtbS7VET z3BnCee0#>bW?B1?TVxURB3EQmaOOu+#?xC2X5!0@CQ91c#~XX*S<^E{f<*}g zz`LKbYfJUNU1VqM39$0=U-&eQkj3m;4cyo?+eDe^rD;INg7900X4`p*T7OvdjW5rq z*$)^#)Li1*3WxSB&uorMp6Av_cOFGzY`&Fs;5N;)C}zpDI8_3_TxVLbn zf`UE^CRaT6>>j!GR7@?`ZN#m-7EkwqK?bsyV>&)6 z=&%Q?5tVn8?XFM$=L5^*-gdKS9}?jp^>2qYn-Lr{vAq{9Uhp1o{YZ|D4_zeFX)!xG z4|#{P0=WvILY+Rk?k?BFJQrCGl<7BDwC`N4np!>o0Z)Qx2sOdf_p3mpWgyN0?zL3!!1gt6 z^B?5}gK0MK&9Cdy4IzMShTDlg911|3;Iq+>De!BEBBez%zu3@ouKyJT!W(i0OrR;z zxOt)2lZnJVPg6-2Rn%S2(r%mcRs@0Jq~8Z+z)>JQDR;Rueh;*8HnNF-QjGxCkzI(- zMRFF6g6HHnDA`ZLWrW`{Aw{-^8^y3E#*yRfNj^QyHgdFsVs9OZI(E^3(z zUk3UW1{5~b@O}NGP-zE4tID8!+|$BPIHF>15xF>ZnVF+f>G|K| zG5|qaYh(TA6O%$lbXxoIH7gW`*Jp!fSFcLL54{DnN*Id`TB`5{R4<=cz!5qnM(Wg2 zbAD11D-2LyVjjRX5~lrp5H!Tk)9+EMuF=u=F5e3axTI|^C8^F^xTlX_Mq1!jWC>x_ zdA}G^Hmhu#7r5q;s?7UeIaq=%WQW1QJP6foT71rB`5d}F+6m4#zX#b7fKO%oc51QT z{;n1q_`MUKw4QyTI$u&Oo4A*j?X>85wZM4{PY^X^!n~paT3)x9#<|5Z`~jb#JPaG! zZTneyr(5$(&4*Q*0)0sHO#LzZA;tYcxvTB&K#)Q-TYsj(W@CK`eZyrT!Bq`R{Yh!| zYJryt0e*du-p|a-7NMvw1t#&VenfW-o9?(Kx=nCS-~HD;-kZGk#gST|cG{6KZqUga zm^A|Zl>G~SAfHaVr&aA>a0dc=G$pr*p>WqSXlB^|H20VR`~=)Nl&*>CS`*Ok8`E5B zGxp?}{b8z)BX%<3zzmxV7?Z?OO){folEXF4p2vq*)ibLH;?~7SVyw6zTm$$=ObcGo z^s=Ra>XYeHRw!LS=3_qi6C<9`hWxgzz#;y^Zh z3(4{eC=wQ4*M%_9dO_2~am}4~fi?0T&^NG0!cI{}jlKa)c0g ztOLDcS60*9z7ZgQZ=<{yhY0(9fNc-6{Lx3b5E~_cFe;Y34KpFvqm9*xo5MY6zF=EK z8yPY%{E~8Hk0D-7U3o(;WMlb3fuVcGTbRLt$Sx-lvYRwJu^ z&cd5W-vIO{)9*jyF}@W;nbCBw#D+^ly@_f~H8J)&B{v0n;Y_DDn=VFAGY>R%Z=ha| zrH&8pRFtx=+|#T~xk^*ZC~shMK(f^%pv>$9OsHKt3To ziNG@%fw^CQElixFK2!JCWC*&H3yaBf74-{&84J5~Msfj~@j^`@*?_1n0)3c%yFRuf zmNLIi0S%0|+^~GsM6@PzfA1>_=O|$G zOd!Viv)d!B3#Pyd!tw#mU=H`!{}v9QaKdZeem2ZGWks@f!#4b8V2;Lfxt|L-g>|Cq z$6dc4f>8_ z^Sj%}T&A}StGr#mV0iP~cgoHzXBmSjb<&LIdlvgLxKmUhz8?aZhmjPJ4PgXMFbacm z2&D;+q-N|i+bGD~^%F?g&2X`)LeWt?pEo_42rAuX9+3Q&lkjLUoee{}#mY=w?Vij+m zF4l)YMdH6GCe(k@GVp^R;tDCvGNl-T{bR<87*dSSqfO(1son@{`(5P`_p z&u{Ci>;_TKg55X{S>jpA<>L)kt63y<7SLP;O%#^L7Y~n9>tps!Duc=tSg11K#&z+t z>ay)RAn}e{{F#NG1G&d8qJld+cHKlTC`MOnuBLol+iKNg?AuvBqA(?IMXV8MgH})< zim*}n`Gu-YEB&B1nM5~&Po3ung7PwhTpoF*V?`{SGY0QFV5ar%XKB9cCt@WFD-1Zo zl2d~nDin9Ks7 z`g&hWjLk6k=?cAeV27oMQrpuJ%20~-{&oB|u7UCtQ3T=r-eMKjlN{yuIG&F}q{8wI z7BoWs=k|$S8t0(PAZzqMv_2Q|P@l4B4?-{zi8B1!aMaEENoh!cMc`gZQ5Ktk+sA)9 z%Ku+u;DU8L%!u9pg+I059N?U$CW@O#7&Z%GXTlA296^CbzSY8v)E0aMkB&$m{Jj@I z1bNde)lU*SQJ+nk40=z_()6lVQt=`o><9WT+uZD_acCEgwXLCt*R2A~3-PmD*8aN_ z%k8Rzebr+sGD*QGR}so1yR3Q4#ExU2r#H1e(j$!PTukKm7D;Hjp}Tc4NHCW~7|9n}v#G`4%nqr$8IeZCpMW-_Q!TZWpPY0o_9R0f zp44$pUavxQaRKGP0qBDz#+cB7K%Bpu?95v(0YbOuJ_)LUEe=ZL7_67&AQwtp3@krT zN=rU&Fe4%6qLwVncnolRwiru`TIVBQHvV9TxaM(akGqth|TfpO0dAu`3J< z!|Y{LSCrIj^q{8S2*!{QVu3qL7to@OCc#)x9mX5^U~sY+ZPVqb&hZBb302I~PKvN! z1v^!5JLs*slXl|e+iE89|JftwuSE!Pp0NVs)4FXqzYrNq96Uw3C(TJ2CW)^n!9+2v zf@4PfXyk{g1B(kdQinTa^@Hs($3|cEJF$CevaTV+`hRr2bzIcl);2ycG(#huA}QSs zDk(?^(w)*E(lsO90@5KRpwit8HJ~&ILo;-D_iyfV?&m!B`MvM^Kf`B#_g;Igwb#0? zYZ+D)tCo77277&#*jL(m`8cH?bAU4tz{V~g@d-YfYCB|l9V>RKd$b?251Yqlm9$xm zlCU*?{1ZfuyS)D5J$HD?^^*D4$9fy1@KZuXfj6T`qN_daoOTOQ_ga z(?7+T;Av#l#lne~F!pM@IgTgm&FgAQvP(>G2K^_ti`eqwnM0RL93`LAt8&LF3KDLp z-2*=V!T%{05yXKUM}Puty=ZKDc!v;X7>bjBxh-17U+I|9z+01puZKxrpwcm5r=|0S z|Lk-`!(}tjQ)|YT&+IU?jsNUP=cVQAWN#CMFEwktLnEx+AZDByq^OE)_57!83xQF1 z<3+LhT)drcu6jLr#ve#~#0(apzQDue0mm|~U)y6p8o^yML z^pIGn?95k@+F^&{6Od`@FlnQHOSkS#c#ec{lgG$?^al>OCkp3`n2@==OTIh(qea(Qm31aaphVT zd&MPXrQAqe%*d&C{)zGyxy(@LrM&XC*vIK`iLJEx||zudtAelsI5<(P+g60u2e zifj2L7bW9`P!pJdDrS?3smMl{>qua6z&pLT&zYm#L!293g_bENibxu~JNn4<76y&I zV>b(Uc~c(IeetvTyuf09X?2AIeP9Vi2HhEGFGY7DPl+>AUlnV(-;V*G*wC@5t0@0- zZ^tc2Bz<~K?Mxky9Aci}QBJUqOm7A_riNte+}*v3 zI8Yu&m$!4UX;R7G+f|V0e9tR?hTZKkR`f5T(ccOFRxi}CN5kyYl3hOJkpL0mL^4(j9 zeY@N>B5r-|OhV^uG?RbZb9Fn74O$i{!pY6Kjl6oRP3Q7?1zxNf!JlBvn_6Lm1~V=N zLzz}ERYr1d&W*Ei&8)hlu)61)#$qVRUD zp>0cMh3nXY-X`q7)|9i0xMK!gDZDt*R5w#P&OXKw7qF5xAJ!ZyPrmOAoahyVkAJbSddU>k z28C2YtWE*Y(+Bm8!({Uv1Kv>O(q)FcbV0`l7NL@shyZ`0TsZJUj~{6oQA%vq!0W59 z)qUD9&ASz8 ziC$U79foSO$T}p(@iDV>Bewfx$pP139-l6jdD;%IwuNY6JOu9Q$3nBor!Q;;GKx#N zzWv=+`>~|Yw`<8M$9)9A;pfI#N3#~Z8U*wXj7znBAO~wflA#l_XA&W1?=r*w;DW^f z=&hvL{BTL;2;49Il#}6Elp@8lXClN*q2yJ?0pv6m?0=>;L zcDtAjkJz^R#{CD>&(Zc%pX8h$)qzc~6`T**Wvi-(dy!sPPlS|)7^AZ9RHYzIn7#dw zz*lzQ4NfqQ0ng(^UOS%pLB#-lZ=$2S*3+sHeRsMj z4ZwH>?0dcO?v1yImtYZ{*7PW6!Wo-Zl`hfoOQlr#7_NI{?~m|f~-H;iFDq;#9?56HxO`JkG~aP~%e?1qyxZr}?NO0DN;hWh?9Q&3qg1VuP2^xLeuh%%mZ=3HZ5TCB6JMd!3Yny$l z`$$Ttm@rHi^SQ3(`{gw20A60(anix!#Px_dcrAeH7jbry#i=Vu|YC zzSQFn^w0)HQH2ML@pdd4Q=IcVcM6^TCFOD+4DTWSQBM($wP2k&w(M)Uy+s6{7i;v~Y6>7uzmCejzat zj-7L+8nNa}A7Mm4{U9_)A9+kIw6XqX0|L#4b^^*O_^Jli0qAo~00UFxsgqh~)(7UZ3c?xX%+^-pQQ)_AZL}wh+GLt5CRJf^4icvc1N1bX-e0s^( zZ|le>f!eT@B+k(SEEbCgZkzS#GE^+uF9L1Bhg8YNZ20a;cHf}i1Chwb;X@8_Q-(#YC(TOO98^#jfATC5Kcw62Ev_V(|oeNKPhuTde(t~&F zNX3aJysD(_7jhD1Af3(_R~k{vbbXvtxBNLSBLKaed|oa)An(Cj1o@yw?^WiT7jWT} z!$aW96e;v8%p-chZedkLsjY3f9&AZl`pzb&(XDOPM=Ymd>S%%ObI-fCQr}+DVjrRl zKeMh}xuW)#{Hz^BzLIKiz50{%djEsb67dKrZU^cza_Bf9$m_kP&qF!iBDaM0TzWtf zo)GXO84M_SKrBF)b!ys zR(XWtvyga&`Lqyk1t--=+lNbFePcg0ZQN3OeT=)sCDDx5=B}l|{NktNTSyyttB4~f zhs?%gaclNIcC$Fbq1ZjZh&d@6wpHlh8JFFKayng{2?w^pvSfo%k`&`>rkAX%1;Yg?eSy89sw&2i2Pa?eF)| z^_9F}q%!`41UauIF8tsHX>_1LqskL=)>Y$~bRH8utRWJonUhl7ES-ETsEVIttMdq~ zwMREY%a67|YKKbgx$*AT?(hiE1w}(d{K41~dE96K-S0s#d16AskIK1ucw#t75Z+nn zVy)z5EAf>JLLZ@kzytImlTO`jbm$Vw##c1$8g!*Q|2j}|EozGL;(%mk7M8X{cn3Kv z@Dk90c7gW(m^RW}db)O>L9TW>A=v{bGuV8xN54htq6OGEqNb!TLwYRntT3UES=RQY z0jWF@ygkKS%vbxgAzh*T>eid&NFDJJ409r++%@aqiGOM_kT*MA#my#a1v0CE{$y-q zz*^W+ekpK6yx%(XUd8F3zFd$WVX5)2m`;B0)x%_uRqVskmZgE&=C|)4z6kagVRVt) z$<|xOdvj;Q{93(P%!WUr9{hk}43l&5>WpH+En2mM(l4>F=qNB6o#2Y1| zD<>FMVq7$qR!Z#8uI}`WG(1}x8Wt4U{Pa}fZ8G}eYBvF?D(_RPhZqYD`&6wqIaJzFQrbA|B{9a9) zOijgnY9g{uFeGW?dv@JUu*b)|>J$FaIrAX*OsvYE?{2;HdgMeeK?n*R+)XKyJ9gog z@|smK#9h|s%DGkWpKp5x(qaf>a*NJ%lL;JY{J!fVCFB0rK%n||$VP?^=_xBFT@H=x z%Fv60b2mB5j!kppA>P^XKSZKe#uXKVlN_@q6IX_Pr?@XxGdXOvD~Serp#^|8?d@L@ z=%N(fPoVsgE@OM{0b=!cmx_8>*J>aV4b_D%Tb4cCiYN=ubusCH8%pOdc&t{rTv|6w^BRlojY)-n@?J zb@QXAG_?J^-Z-R-Fgm&JSx!7~t~( zCEX=*HXUcabJ;yoep#F$Hx3?;;P{6y1Cp2s7I~vA!gI!XZJE8All}I9?|GnCse0W? zr%*Cx6>ldTBIAkklK5J0aqFjY3yE$_3LR8C;AGhd3HCg6fA-iwW^U8BDSX zZhGVGE;VK^+9Tc@o?3SGzHW+tNZKYpFeRmTwBz&QPq%LSV&oh^Cc0u*OVD8J!*}{c zDX*JuWAn-<7CVEEu!Zm7ipm6Ea=#!ISj!)F(uR4@DY~V;@P{eksab~9MG{O`0R5?I z{Z@*!5?U{qo^_}DGsI_0z)@9W|7=`Qe$Iuz*ie)v;;RgkFzhMReVJVoEk&|2^8MVi zWJ}MSi8RP#%Q2o?+7HH`6O+0QgNh2}S+fhJDdMh08(f{ zt3rcqP&e7PUuRh6HiEMSo||*tSl1*(TPN+bmBmx_KhA%Vyy%{LFB4%KKl=^vxb6Mv z30>5_qsNP%_tuE@%~>NC3u~{axY`G@gXD^j8?b1`p@0FVZL_UOA^Cr}0$ETYKQAj| zsMoR=N@z&!gPd`MYAat9wYB?3oPrRaR`S1JVWZegJ!TpjWJ`UAR_ z*%f9tI{vl4J@s=|ws#>)qzaX5>s{9KqV2`2L^|FwrCQU4y%qX1_&jYLD5~fWPjY2n zm#347q};xd?84Eas2}L5;oWCOh=N5{Nki>0QSH|IQTFGc4&YwddA4a-AIUd)55?VM z=1_CLAcSY5P|h!$Q<%FVLwj34b%U7vjR52jcniSPP6;<}B37#DTx3}j`{k@2RoXLY zP?X-MTH$Qj9mG$koIqT?FeE@O`RFQXvJ9gX^?iuy7|iO}*&o&Dz|_3b_cc%6hPA95 zO(ScCJex+3t%f5@e&H}f>Q<@~>JQu-omjbtDR+a%@5J^L?)iW+=Bg}^nMg4$bVzG{OM#l&@Cz}V%5*)SsmBgL??|I2xXwkxJ3#jhua(bY z+H`=8!}N)@P2Ev0BStJ$7f&%_|(z0=$+eqRUM zH}#nEI#pzzPPfp0AK>?<=8&2%6)}~5s*|(GRG@?L1qG{zT%s2NbZrhGl8_i-WZwOR z>BhYq*i@#`x~0BJ|FZM_v_XVe*zvMhM7JajXarp{`sI77fLsI0| z%?R|o-&gms=JNTbK>xV{!r}h+g2V(##L67{H`+X}4;_~I0g%lpIO@{(w;!I4Ctft* zz55N48&8zxXu{ua<^Iu&|8k@L3u*&nPDl7;4BX5XC>bwDqcbofIHi0CLI5vZPy%K& z95>r<3eU7Lwx07sr1~; z|LKJrIj!Q&TS)NN2MTtz^1ay+Xw!F&UyuDns>$xjVk}Wz5syMzGXYa2Sa*JbvD`oI z+$<9e5&(PC&*00yiYl!49(ou;Te+TDlmhfFKg*0&!WmJ9Wj3}z3c$r>AV2c}akC}1 z8mW|m{!1XkFOyIu-{V=B+kI~wvPkoTxCPX7MSb*=S>3Ffz~BQv0dD3{euN_cuM zWX>5MYRTbD)0gNi$7!UVZbK_j<(v{+HuI9;1$eQ`b?wf%A|{H$6~lS%cH1!K@&rQE(=2t}LNxQ0(3{#-^5{Kj zdbR3})5_uCk{0szoqg5R9H$VAO9kMp)fr@@4K1C{-RM&W#jBxA>7KCelM})B9$$hx zRu3_9&~6-t7KiWmQ%}w<5D6xHOk7X5R{{%TU)=vQifZu5^3_V^xh?u16%~=K?%uWX zbg3;OlrDRz_DESt1^1hpLlsZ#m{x)|A%e8khR%%NmFu%A9w%&~TL1!(3V8)lOzr z7vCJr(*;EhEz$X@{;=@WDgTit!q(HmF~F0P2K^V4{NgZMmq9hXF!`XxA%SMq1RfWpLXYlW^fZCnaZZ8fGUNkIHk1 zO5>gO>iSI3B^lV<{-cTFX`%U&5QLsAnk%Po2}9orqyf$X8llMD$#(=y+DDxn&EHxg zWWk$DweFOO_SHO0mkwZhz(ppz-4jhfJ2AoocPZ^Ovoi13akXd!)}?LG|}M zPt`D=5<%61sGsiDPjmNfOY9F$-6-od4Db(>>9k*Qgqoj_(o^5w-+CA6U6EkTIaPAH zycOv?nIvvSOULv>K7+^eB;Kx28at%h&b3Jun=yo46?y^%h0ue*<JpaN_+O*m{E zbm)8NN0LKJ>Npk8A-B(W^#ptC^OOBJC`vKdF$j8rByszkh$WPhK?jJ!K7EN9#!=qy zM9W)#jS9_>NB6c+2R3-jzR@eMFCKz?gdI@&H>=}%|7pA-rPiiFuD`?e!CbRd3ldkw z1OG!F=3|g=|R=Nu0 z{_1i6+xl2EG;;)sY|)i>8jY9^kPrRlY=5nru9J^my$eqn%=X<-S9>F6D_mCtak)Ad zQ-X_XHW7y1j){j@!lAsyAEZA@N!Q&3NJx!~#_H062+=ERqC zB7mqLXWFrH<}D*eroefWX@v^asHEdSewim>_A4TZwBpTfS(+^|1>YinXB9y#OeJMb zO$eqvd7nNIM8ppa*YqPx1@XNf$Ov7+Eq!rHgo|iDKZJ#R7$CX?Xbkn!OI55o@yo!k zKQj!eDSR>x^GOO>rX>mj5O%Z|mkjQIT{Di^qJv?QwOmHHW!X3-t&VaxK%7+eBBp(% ztTWsOdz$s|A1*%WBI{GmTl4Sx>;m3Xq}3t5yNDHC^}c*RWl?V4xW2-0BDr)vPt6ja zeiF9KfZt+X^wGbOyKVfnGgR-H;TJQ8w*ZPbb~MPcOVZzXKqRwcd~=hkJloc}uOh5Jj+E@Pr&kG2@|%8b05+pucmEJP99T>Z+k3s*EygzBv@e-G) zK2qrB9qh}$Hje@ybhKxjfm-rCd;3)J+xIq2%YR^`C@4XrS{^KBxL^0AdPfGpGN{iX zkEkYiqlqV}TEFR%NH^k8Ziw0S!#w5`%x^Rh0|5E$MveZ!ssQd)*luSg5_))qjl~-2 z(h{nIQnKJeH8SWKb557|C5d!pE`Wwo zs)xw|CTu5fnMD>d2d%%|kNAzWO}$#mKGnCWGF0&)X7KZ{(1EGGRZ==%44YxYYudrK zqwlJY`53KKS)C1w&TYHL#+VV>zlasB>9_cKQ43^iT5D=a%-vb*$&stR8j%%HJ0e1sS$J1d;4#8=?aZ0Enk=5>ndD^YQyk1|~afF`e zFQ)Wg7c^~-m#PRpL=pgA;Fgdo0q)PJdUM4PJol%boanffR$srO7!=Kof^nPn{iEAl z*ZF-;em)=lOv;Z@SBqS;JC{x1=5r@~_;M|=ASdj)DP?KF4R%n$*(dnO;~%mxirWSi z3e>ylBJzEbJ*L(CN;6GB89LLrMb7v0oXKt^;w^{9-(o#y(I~;G;@+?Y&zYqPi#Gma zrzhQgK9$>TZ!vkg+S%w@Q?zUTK^|7%29lyZVCrGI#vy(}>>Jh_MfaGcpZ*A!rz=z; z@}oFnG}DTwnbZ}*-t$R29LG zz(!!0i7*TUFBP5VuCn@urdj;K7Sv75GIl!Zlv8ymTY!~Sm_5(W%e3uxL`=MC2LYH` zsG_|WYSM_$c&{)v22IEG_XdMJ9CW?8Hr9<7GuVeNw#-`g69#O8{14~1Co&iI>ny!G zxxa*BQWhmbi#NB#=jjXJlsF&amh&@Def?&^p6-8Ba5*ZE&WLAEi%e=#9%biOV4xiwDZg}WD`&W!36v6Ik25Y zfB7_q&b&GMjZH~i->}Cj2VFL?jV^(dZ54Jx(986;%SEAeh(LZg^X-YijT)4@`zrhS z@$s(CMX==fgvhU)H&Jr))Wj>lUYMG6oGr%I8)~E9YP@N+Y9|2~+7XMU916UOqK&%Z z)1kWkb;0(9b;gwBss0AP8MCa*j0*TWfQwsPOK{~C!NIB<%6H1SHHM#WN>dt(A~J1| z*v%cPK}#0uhv)MZYO`R2t=` z7(drByo$ElL1R{-hK`Yy9^=0M4x+02x|MSgzh9nNB~AWj0Q(ND@Ie-u%CrQZW?-y(}i?VWP^l}%HZIBny@ z*K+_rX7rV6=PVykU4cM$Va((CdbiaZu4Am{cZ#L%hA^?J+d+@po3H261cMk4*ga*G zb5>MTsyifY^ApJSil#Bmp&6}!CiTLA{NYzobid*HeMAPmCo2c9BcJn)vgt~RlXClzs z3teXm5_08~&AXm}7C>bwmFV-QtfJfQSQHKxZ~7B(uYITj>-ko+vjt(K=T zBziCZ>_G8aZ>eqU_3uP2-RXTd8W9wKrO!5f49Ir&Euzd0op7YeeNIcXxOyuQ!=oq%R5-diUF%VQUoRV1Lvy{0gKIQ9pl>{PDx+-@V&Do_E$4ecQMyvNI z%E~*F>oW5+_r;srOma$p^6%z6B#g2oD~7eeiAX{l=ud2Iiq z1#mw9OZLg?G!NReLhC{a*6J^!+mV2E2Jr2+0>co7duHX(Ex6Fh$Il>qhciigL6%;i zZ5GNp7#IC?do5DT(WzpOO@F}rH)PKeY3ZQGemSg!=t0}TV>yzxH$3U z0t&6Nv;U$fqqO<^d76!+enjwxizdeJZR4cf7~HVwL)XF6k7i%TlcL!F7Vx#V2DsRM z2?X7^e<;`Sx?Xi})Hs!#sGblssSxT-P>AyQIP%JYu${SIVD=}Hd&s|ip z7RLq%7bq9>9rPN|X3dIvh*}QR0lczq9nQq00ren>@Zs?CuhzLyT=KKF;MC_nbe)O$ zjy*4!o8h0ds5BhET~S0Pbtqh2$_6f=JC#Bdh18Sdd1U zb+=VXXHl<5R~0OcM*1bZBB11tt|)o;oMO0dyf}Z^Fcb`$=UXaUYXHfy0 zyL&KnX3-+uft{f7%XgacF$8Hk8#c>J&^FVOHYVJP#dIlvqKsFn)gaD?^Uh+bm_ zL+|w}Bpb4gL~N}C=-&%k1XsP8%6k=#GLMf5SljA=*z2gL+n@6}<;JDc?IRT2-g<@b zsWVB=kI*hGyvt<;a?L2)dXY`h?Kj$RXf-mn8C_ho49_@qSZ+vl6xkj?jDrJ?>&FUGKLl(4i~U1M|36AcNTpLupr0khC8~=$1-`twuR%Ly z$-AvLCC+k+PI8A1PeQ{jpkDc7KOw$y%XwReN{;T8@#)Uy6qpEg#iuWJPK7bzavld? zslAt8%vtbUjZddFalia+C*n9D1Z7l})asEWmhW#_SLVFEZ|0W@do?IPgCWhL@IRW1 zxx8kmfh+C|bkG-1Jo9i@m&Qh%oo0OuyN+`A$bM-51A+6#njv~hl>TrD91M2)fv#gl z8Y+UqiaLOjj?^Hfd_ToE!3DZKu%Y`}oiGGG#%c1&Z29!)H1tKihVG!m?egKEWkapa zj5lnmT5HiNfaIn;e1`FL>~VZR+|rbw)+pn9+>cUB4D7n%EnKO8gL!!YAX3w=>nFC> z?O88OmrQgKLbZ@_$)HsqOZVbL*~|Z~hBJMEw2iv7f9k-w5+B9+h^vV;!G=_~ycL52 zk?K#5BOt-sGokJ2J8n4NM=%;sg%;|SO?Gu0xKm!^ z_4v4#jhRa;-v;x#%rYFu4Iv#@dg&vVL7KdX=7;%YyEPo#rYjgVJ-VsoXqLy$W`<%n z{*r;=ZDAPIxZg`(XDQpu`*tZ??#!VB_J%A!cY(*XmX--+zlT0JhGRpztP1-vZhjJol!%BIBiRjFOq# zK0fntCG^j=9R<7f()mNlZPf72($tG!Ku&_+N^q-+Nxx9xjGUy(pc&&e_H+boVfoTabc zNMq@tPP@&XLMEm^i{Zns1#CioqIl_Q0hfmC&R@TIOy+ykWiIk4jx*UT(0Ts?yWQo` zH&b^|2xZ|NPiFkzYY@f78R&4iPnRUvb^~lyxYMp_>CcO0tvdXE$59U zvDJ(0%J_SgXIMZRVFg_Q0{T5;E|BQ~&eCLJy_$;)q2Z~yF>=@ccSmpdflMVv84QkO z&u#_WE>LF;kcYknI-3?(Yc%YkCIc?2GTs&Uo%;aal$oaJ+TKnm-yZ3diMxy9?t$Zy!+1_zPDFo1Jy7E_iq zE#tP}q+BZxenU_O3VccRz2kmHA!O^34i94H|H0pn)BTRvrr>WA`S)VC>~JCridL6@KkVcmahBPUR*6I$`>EX)E%96}Br08eR3 z(MST2r_2eg;2U+=1OZ!K&`x4~(iOkhSL?7u^gkz)>MNapv@^4>;1itj8kP>YGmLF{ zZYV8M?7=80a+Jnh%5U+$2Tg3q4y+>+^u)leX|DV zeC_DRP}GYJyN=VDcUk;~ZmQH{|G6{&`bBO7<$I)XBydR15oMvSlu}>626U$KmjxaJ zT{IMAxVfhJYb+bADL?PbyfB)X4tUl@)^V@?Vpt-NaW{J&7QQtaLG4a?s3;Kcc_6+a z9gfZ-?&7~NJQ*J?z=@k+Ubh^lZ^vBC>F=d>;<~I*bqY&f|FcHiG{f-sHYr&`SDWY8 zaXH~Tu6YcLfDgE(+s_s=$Wj#Y&l~>NBmH&NOQIkw7KWOQ9KRjcXtN+0Uj;H2?L-v| zYaBq-{D}=zT5z#dy;QHW_ib195puf-z7_bUr+TZ+IvEeS(VvU~o{RT*vy}oR(luTS zg^^1K_SVK|=444&$(S9v=P5&pE9aJLvLZMkRt+8+#;G3B)uFRk|Jo!oOe@(Wf85;; zuj*r~+{--Yu%?!B39tuv=WAyBY{1AzYpSnJk!5-Ii44RNn0al z3||;mw4Y4oa@q>>u|2*k zWdl<;~xwo{^4K$^HE!j7#~ceb#2cEpbPV_dL7kgrX+&wQX6glWB1d=wK_I9>!!%YcJfCu5x?N@q}5EuWA)0>^AwW{C?(0_zV$-G zYkF?ZTZD1{0Vea5!j9f?dFp@wc6$7XPk-xMI*w7gh~oH>(EUx|N413%&1{aAmDirq z`8|lQ!LOq9C4XJen%Rvxi6FlT8rKa)5j@wcBp+3g<;twbl0-W|-OpX3;yHcBb1JhM zyQp`_{asU~jMs=M--+)(yYQb-iTnq$!sNBo#%Tm&bqAtcOGV!fpxIt@b14G{!?|7+ zF-Z&I``)!f!tLMctDR&Q##;q?Mw;@2&DbTd|{8-N;4 zWlC#`3(_Gk|CJjPM3s1z{TOR%lQfpJO>hZ!75zcSClSD3epL3+7QpyN4A-AdiBPyG zReua__S`iHb^iU+v+T0P&Z>u&@^-^_O*d5IW`VoQjjys$R=%;2wE^ITvi}bgIs{qq zd%Uq}=IGd{I6T~c<4FH$51Mkfc-`vG>%h1dS}BID=4q>Nq-Qf;Utr?g75{a>x0~Xv zivqg$uTwpPr>>szvowW~E?uy*J0^_EB-x$E%Q0}df(XC@ zeh>XI{<&xH;m@D4j{BRWtSZ(e#M(~|3mAxJvuSH1qPWvxS0{D&)rnkVJFkQOReR4x z&IV2*9sElh)m57`E`=!%8S&8-dM2ICu=RA0s)M+Ib3#C0{Ttwsof+D4tpmia1RGwu z+>0P48O@v%PVq-bcgdNTT^0DfgU4cbo2Y11T#z{j8jn<4;pt{CASPcrusROM_;H{U&`KbTF%o1f$!a_6>R!R6gco3!?U~Qf8;GkkjDz# zRTg7?G8<$MAtD0tYP{1pb=(M-zCx85`F zs(4Z)vwu_E>mR6)i=WsQ{o``>L3tqW4#yvZf-lzCAqBD@1v&n6!E)rAyPHVlKU3EK zWkUiXo}0?thQxD$I`A?A&CAQ9N@>^d?I}7ZTh}Jrn^jeM$}a$4`hR2mmA(A`Z4)B> z3p)HKY9=F2+EI%{Vk4{{q%AX|3a6bgfOBTU#}A|-vQ7Qx_nxGtzuMmn65@xqhC&V< z=FzSOD2P+#vHiZ)9zDwjpS}WElXaH~Bvu(D#q& zJWADTUKvzn@iuMeb2pf>dpJ}bJ(0G(YTh0mJ!Z-__N3kip$@O9Vc)v6`_AM;z1lU3 zDTnm}rl>EW`XoPZu+NIDU%f|73JPZEF5N(MjWOp76~VPnNh* z{julYEf?absCbe@`^DiiR!iol?`@uad)(5TnvH}Jj?AQ5@+p0Zid~*t#7t=6JNTO3s#_7;07c5)F^hb;s z(_5Wnl9dJIXKF`Bsqj3}R0$|7<0%bBW^XFzT$3p|pgAT+cMs-(5Qn~inJ=}NQc1Lm#c%lE`1?-0JZ%-Uy(Y}*F8yCErsO5%z~Grz~HB%3KaCpEmMv35s3 ze4i_;DU}G}2zP8fG`;ZpIaPPLWuZ}kXJ3tG0oB~eev;9MUjX8YbD3~279bH7%vb64 zi?`tLCD%(`bK$BUT{7fAkZs4K?7TsiMdmNo=^qB=%JF&v5-v(zM^Qu@9j>PrKEakP zbADkS*s%6j`@X7d_poHTw>yAYP}hW;wr%~u9L{i+rqB0#Mg29{a`AA)hA!YNwr}3c zbf(=i_f)jaOL71=d{%t#O{xqBh*AAd&i1?LGxor8Q0>FHkb{kjbt9 zDxRscLy<@eI%|I7B2I5uYePBBO);Hqu!w%6Cs^WF7}@>wtEKEcpPDY$5qC$G|0IL|^L#$D#!xH%KsA&` z6kAVKl8trqiMJH8wk(T!k%S1;_^thD2{nZJU=t;OwK;m=WmJ8+fO%u*zL)|1Tz!-)f&Uep8bkS^<7!8*~0@NUN}E zleq0ahMVzW)BEl0!&d4AinMWYPm<7ptf{SR2Yw^o9w?F9RD5&&5qN}0__(!sdL@M} zxT<$~(6~=_xg{i`Yj8l?+N5G{b6!U^==ILQT8E2FIP9!v#b z0bq+dK&K}0lF)S+u6&jWQIq{~HyI+^n{b{SUyJ(pPyl7SfIF&<(yv?n(gz`1hMp@&$NSAI zM?)j#i(k8x)_(iZu8ij%{SiySO^kKWsvJO~%u+X+K975>=$L$!N2rG0*%%<5SrdL* zS|tY^Ma{^Y%n)?X9-h|oW9$k@A#wetgm;9; zn4EY$N66R`&s4g3pne|X&cPusiJ9nZGIBA%zUod}Wt0_P=$=9~O3Wj3@>`h&zrs6k zgDB;=e`@>7KdH_CpzUlbd>L0k7Mj(Oz&lmrGJ8%3rl}Y=f(GrgWc-`bDsO_V47lv8 zxbkU~AGd?YTGz{E`b!&}TPG53*!~q7sqZLr=dv5wxK;(Y-6TztgOWx$KCl^NPv0(?SoB7u5Ly|93+VxCSf` zj^=s);N0F-xl^w(^86%e7=i(j9U?!V?vwmjIx3xymbDjiqN&&1rGr|B+rB%))v-KG zjRUR%$-2|8gM3w@60QaDub~Z&Y1y9+g8Fu3q0tQ@UxScMccDf?jW1X9G=cNOGkKyLkNX4q{9r&d9J7j3Qt^;YzP<5%>LAJB6U*i*V4ayeOnN34n@`;=n<~ ztvt^yH}Vy(FCfzvT=8e6 zJMgfs2j@oK_9~+C1A#1?#P2i>Y&WU>D7fA^HJq80E3F_OtWdMON)v*9ecMpvv4}{ArOjg1 zcd>h7caHo_j8@UL6`YK-!U5+fVdH@R(CGZC?{fxn**sll<>)`~R<-nr`a zr&HD4$m;G4>J_jgy_y5OwsU=`3&|--9LSkDMrQ1bNW&cP_ngZMN8#Tb|zfx$QS z_yvC6jY@iY^6V40av3`QJKw7r963T4h-YZ1}CXWzc*XG@4z&xUTn%f z%U6toSweT;@hI_~GceMpsLOLisIVFLY4e>B@lyo5*%W_#mXK>dDdkG%TTt7<-;rZt zOZ}c}E3V)#IZC&HG^*aI>>sQ)F||G;;QH|^QB4ib*iy%yKfdTD6`y>;^Xa z)o0J5deDx?mm}$+76U=e-H3HjNTjFV#ccN{al&{k-G;e5W}^DV>T=itJqzpSc_ z?{k8-1%F>CnT$A?g?Wih3p3N$D3vm0D9`jg{!Itt$Ha%MXTg`lOZBk9lDZORdO@y* zJubFQ@QVNjfbQ>FG@{ykD|$DKpMUouxF)Ie%mKG}RF1AJp{dNu5I|?ucn8{zYpEf; z5fWZ8Yuzu&mg25IVEhXH=)B@0BL8TFC4N)O7NQU6Fx6~dZG{h)H=Q4#-eu;xM({lg zwjh}Mo82KtTHT7d1ExDt(9K@so!nJTQgu?Ci1jg%MSbP7_CoDt zs`)<9&B%POH<;RTGf~z&=zmrt|NJO~T$SH+&O#Q*ASD5kBG#?2jxz#s%J_rX#U*de zeWtsfsMa!f9>~vA^?^)k749GFUo$WuNeObvczl$8Q(*4UYcof8PMNx|>_+w93BK_J zc)M8jJd>^p4<>GA8oJ z8TVw%EG81Y8BVGsR4z$o-o}al&0ytb4ro~aYYbVQ@b87mN2YZq9B~fK>T=Np=rU|!(NLx0g~srU-R9p z`o9+oZkW^<&gxk3A`I50_Zd zax@B=2|cg7QH-6_Zb+n(EBWu|dn^R)HNIe(N~FtQEs%|Q*5Jm!&**0K9|bHOWFg^$ zV(Zp_Q!zsmA(*s%-{ZdhuCLh&XN}-ivHfN zu2ro0A2QU-IQ9R0jRhtlF`seh@$zzsnsmQCSQ*e?Xz3t`EJAptFuQ`@-cPm6_wMc# zJVqSnaKVT}URos9J!rn|R!ggR$e#9k$CCPl2RRL4C1nuaQ$b*)-*<4 zg;P!D=j_BY#}v=7z96!j9h<-Ili#s3bxSeNW?f#L11rlA{zag?CgW!`c)LfP*HXy8 z9xP8Xs!6%E;p}r$adR}R@r(TzN%4k4B?C3v@s+q^bhciT)a-QdDbI_?k)ZubwByn1Wsq@H#F^x9&c&TzfR28AQ+LFXM-l#VS=^-(o?W zTBJYVb)i#isP6B9yE9d*o-PJgT*n^+qA6&c^3~ER*2lm0U2hfqvDEOQ54ysFw|u(B z?%h8y+aCwfoWVMy1MbsDA{C8MZy6gAeGqqvgk|$LPTw=RkI?7ULAZblAwN9z3jW=k zUddm*w`1MUCaYvrj<-q%zozKeq}AB%rZ1qKBd_K=Tn3l>lvty zlQ(qx@o8o8F}2H6)*?Ow7m!O%46oDhuV z&tFfnhS?vB1#~{8Wtr25Eu<*9xi54~dyXVd?aM29d!H`fd+nGpla-$s!nT?2VDB76 zv!aq_4vl2n^sc%*HnW>I5Yqao6n1i+_~<`Hdmnt#h}{!u;$o)SX8d)gf%BITJx={j zQjy@#$qI-Yo4(8XO}3#By>3yGNWst5B#;?wP}MNMRC}%+ez)!B&8e6%R3s$xp zJ60Uu{z}4=1q6>%8Tp9Nlu7j#%fXb(PAw~JyUaos_5sqwKB65=a4`I}h-HuBf~XRm zX=cQNbPAFpIcTMTutP|tt`M(bt_BG&c;5~@mJ1(~ew0$jZe0z%iMF^J>7%Ag5lHOy z{3(1)B*pgZ$-ZCtkO8K8uAI6{w~_l_aPc1S(y6yAU(cN&h-Kk_%jtoen_^Bd732z{ zG4iYA`Du^hTto z$?N0Y(W8m5ISh9ut8h z`e<{u=Qm7785gSDX2YyRal5?aX*dq0`EeymCxVa{~6rj<3e@KCqyXD2!29VfK9vMIXyjf_0^ z;Vy)8yn8)v0R8F*KZaqa%PN2^LMQ#rP3#N;A8+6C!W6N4#syP-9VoUPpx}fz8*{Mw zl>#v@rTtR+x@LVtxeJTmGIeMiWIE&nBRurK6X(2+shhGVJ6_iyfLL4He^Jd=9sWR< z6C{#9Kj0OOk;dS*(V!^`Q=gSLb#2MLXr56`ivtcizHED?&iqI}AzYd#!yZ9kM8I4& zBZ(hISV6i8I+~;V+taI#N}`IJ*D!xm9^6z^j*SppAIq08HpAGX6KMoqVCYnO`legH zfN@CQ70&}1^NUV%9Qk{w`u)egwQx4l2!nlu@cS3M*llz+M%7oB6)ibaz0mY$u|U7U zTcxMCL$L@ZHr03iVp6f<_$n_Qd-!7BJyQ`c{1nU%7wla@wa7(S2#L!HOi66x(Y`Aa z*-3h>G|Y76S1Z0u4mKZt;gL}So3s;ZoWqO}2WlJ9h{VMajF9opv-#NeLyrok)?htx z4xcw$X%hziN{sn#EI`S7j&3|qEZs!m*QM@yE|lfIVl{=a{?fgnk)WwGXE_iuEPDz@ zv{#hPeNQhi3WpbnS&%cUT;rFEMDXN&pi}Iz^l%x=F>FY;I^3~n&2Ij}3Eg-XH4`Lv zq(PG()-|BKQ+uq4?H@pO^wtz*V$epN(e2>}xs2k-Zr*%+>&tYtVbi6%wx`%qnOVfn zqDY2_H5C@Pxn!M>^56fzfLM&f4~2*oL7kFNiHZ z5nZNbM`7o81%PB&uMtxC4W&xhm1Jf@eA=6WOgP5^uOoCRK%FDuEkBM?bb#E^ODNMw zWLOP)=S?T>YZ&Zl5qwIOlv@;l(LXxKDDbFLN=3F#8sK^Ln;xVuweX!=zsV%u&1-I1 z@$Rgt-`5uD>Yme)M}WI4EY`}aJ%x2sRg8y?^y zHSF}Z0}5&VRt;`qcb=R(`T2C?MKy-15s7LMiZ!QXfjuLs26WP`0}=12CE?D)^poNW zy7?u1qNUsIPjOwQhJ6o+KcD$2#y3cvE-lQ_xlwhz^;}OpY&P;24p{ot@RV?lniyL0 z^;(VP-%qJ<7!1t$;jSr~(S+Sat`azS%jviBsEG(H_GQlY6;w`k=$%HxW_a^3ciSfC zh?M9sjoxE@eXxv4Ku**WH*nq#f_2((qKlvtw6ij_i2?r(XcC_wa|9JCMhek93`o1m z*DMPq7Dt!wHQ68B7M*-jyvhVb0lextuUUj&I}70gZPO5!2qa<#>}(1cjW8mlAjH6Z3L9pA|`{ z)}#EZ5QOOfL6%qios0p9N?~;*bSNb0DDNW|>t5_QQS}k!<^&MvO*4U){%qRg_AwwNUPSM8tBw3VD!eBm&oKk0dKLGz#%vi zfQiC00m|(sy?SuKE>~FJM4N!7&zUFo*kSg_>`yu`Rspy|+kK*l&Zkw9N}x+G51bfz zI{Y%+dKb_zjE{S~!7X$BBZurd1H|r!H$x-6)9$V0LJ348tk9-f-S5dBD)GQhl}a=c z74Qt+WCFLP{T9b(pr##tfIDl~V^w@Y`X}Ue0g8Q}k^9h=w zlruni!aoIp?BpkdQy1UqMbD@}&b3$*f0$Ti@m^E0GnbuTq&HpTsO)KkcWW?ASVF&p z=j{C<9qMH93_>MIk1Ya)tW62|Oi=SWYOzbnA%{O@KwKw(hfIvdw#2PCYSV;E*%P6R zFkcM{enA>&QG@cT$ig6Dv<5o)RMHSdKZRy=uJ~7JNW)$OdFkFtfl1Lb{^TBB7GQPyG|CQYO3?{LDkW zLqHtmct@w(T@`S+Fc-orJPKiRA8@4viDDa2f~`BChr$*CkKk?nIph!DK08M{v`V(L;RfM@dDHw?v+D z(?*yuzCIe=NdNi~Pr9Wyu8QuK!d0vXK7UvM7$FWUBC@YVCgG`RUA*CJ{N|P>#-oi= z0H+1;$e{yA=it`oQaTE_2mn5Yz)jVq7p)8fHpoOL%DI+@8Bka=mycx*#tN&VzDlz{#@v_v(Nu zqSJ~(bo}H=4&lF&?)n_~;#t|9b+a?Pdnh=f9Gc}LVFmu>!g&hZ%*x2&l>8I*3#c9d z8T@Yv$10o%J-^jkkKtq!-9$AEGzuO9%5~4`*EAE#=&rYnQ9^g}s^0`LO1P&PI$$B4 zz1JMc0j+N_2!6@uX>zA`^t5NQo19C7sRcfO16~!L^L{`X;pMa2twn8IiP3kChMLzO z9OyW+EANj)S0_3y!EV9|o{x3iQ|@jqZ1m=gXS%ZQHuhXrT2XxfJ~+E`TUs%F{We|q z!S9F#1$T{qr8c<9)^TL2QXFDfqXZJmI(l_*EUS7$QPT4MIbR2m$HIsCya1a6)^iL$ zi7*|HP{rZsnY8L$ngaLL7EIP9e+d@>wkT_9xGuL7gda;-GWqL2lr@JXC~`~37Ztk3jNH1t%$SDoU6*3ZKBPg7NY_%~B`9D{pZ z1%LTHShNSjJ%^-L9t;)yjNb4nE?Y{N)&5EDw6#z8+o#g-r)>L_tBv~|7t-8}93FgD z;n()J%4q~&&A!G~!F>}rvGo=ue4DI-nqkDxcnfP?4i72MI=dKO++n9tn2E%M#%E~J zaF$UBeRl>uHhtO8_KyEMf@}m|3YFt98+Dba zX|3uv*Uj*i)4t~W*y4nqXNP_-VYuc62;Z~m^#krgWO97s*ghvR??7mt0SXA;-Q%<# zPri_u)j!}okIFn+=*r3_H0+-mK<6YAW?`YZojGfC%i;rDzl4U_h>AkG>5DD4U0RMw zB$qWL=7dhxpFo~ZqOopF4|vW|06ej4L?P)R&saAb7ZE-{f}?QZz%9zG`p}|?hO?== zi(Z4B!G*sGfJlJY9W{dXFgK-MO{_t0ViF892x2 zH^ww3RWF7*zv#vp`fU=T)29ck8y9>_sf}nW?XOAsM5|U}b6l$QS%L{8lbWIMnGWd6 z*^{9zybd5ldt4MH%PbxVw;|2Tx%g%uIynfH}~Y#xD7k#(14{^SpcAa!MwD3#1ZtPT&*6Do@D)4HNa&{uGzoRc@&gyUJ&N=wrs*%p*o$_BJQsZkAhfdiR4LRf=ri%9ef?ka*YqKex` z{Dx32`XiAKn$b@A@I#~>RiKtU(G+d^SCu3_1Usfzx zqoOh3^5o4Jnl)oJTC-}d66PBt^ARLM`P;SK7GUW{41ZIA^yX>!DhKOE7c@hH8tkNP zWl#47Pg$H?EHItgJ zYkH+RGhHv&xeUR-{eX#q<*C6tM4co5siEnrNXm#@k8oCY*OQ+ynU^A=?iKTv@olU! z#qEzHNFi{d1+o}faLe%K{>`1{DkD)!VN`b8{)EhHt?NhTx9o+G(Q!ovyb%8LFDGd$ zhxH=znu^E+|4&W-KhBC*0{Vs%DlwN8q5Fw4`O2T;M!A!}Q|c9n@+%9I3p~zrHAoa5 znW)SE?yud_8ovomrO2e0az#-a2VHy9D60np(*<#Sr!`1kN zFB>4hYtG0Sn4c%l^H*b5?Hti)P%J_?WL+)YhsX#0m7(W>{z&Uedc9q8yyRFi?D$I$ zCI!>Inu03ZKBI-E?Q|Pr)E^6r6vLhQ8{aG)Z@$kKpEbc(=5cmokLOev@DWXTr&^$;L@}P@2G9;c4@)xv_WRMx-EyV znSAzp5FeJ9v1Otoe2sxg-p}H9!|WfP^KMl8Yy; z9B|xn##A3mOVMQh`+94>U;oA#s*{7o&2=OoqZLLq^1i6Kls}t zU~b1LIL^?$(gSUS*R{b8d2zBsKI9&(jX*YFb5LVgQi|g!Ni(lSqJQk9eYU(ruI7O# zBHa}#zIbNES+rfk@+EFY&GRZ_>qUXC2Em{q3pDkwr%Hqu;O^tS(2x@5GVId^5F21y4iWc?N08?2m}vGfi!N zAKQK%t&D6F=8eo$AAQ|EBO(lo`*qyO&8TmTx0}sklKg=i1sK{bAb;hC(EWQzN$g{_ ziS7((i{)XATrjh`sk^Of7BQig-vQZFF0B4q&Se~or&nx!Nr|s+b5P`+Ylv1nRJf;~ zv@68DpHkfp?`I%A3Xsa>oe9sS`+ksvI_cY!nv1yw!v|pZ8H8e=&E-JGJ!Tf7zxBGnStWvy`*LYa=bxtNj8Sy)j+eh^WdxU*}0q;^sf?rFt zW~}|Cz%E7ELwDP%cmmz=Hv#+Hp(l`<-qua~k_w}vr+%2vF*EKotHixdy6KtQ{w`;RiRC=mC7qbAJs_JHGsX564LX6=RosRom8ZdGMt`jhFCmysL?;$ziwh zW8Nq-Wb9xP1*T~H0N@`y(q^lrpF05>Upz`_)+K88w0a*SFJOmoCzE~14K?EG-HgeVw?%QiUJ5nCb+Z0Z6{d5&%T>OL zF%;@{**So5YFB2POr|Ex#C_{E+54ji^#arK9jjdT-N zA9k9~OL|;(>D!(u(hpi(+QZ5>9^TZ=o}C)ed^vW=nZ@Z3aYvOOWm7|q0n)ri9`8zckKn^lmn*$dzFiByXf|& z=W#O~eHuU)gf#)Dc+Bb#%pj>W#Nzo=*z?+!61-_bFQ{IGFBv zG}A8Qw5G1`S9zdwHn9QgcY{yPF{W07_7Wl)i`D@>@i0&w6nbn=hE9)2?Nv{5c(1V$nvNOsI0Xln26Ms>t)kTJ#LJFBJ?1 zcZ53TEDL_R9?hNE<=ds60KK~wGk<^?X(gjf+zwRom8QZhs)k=Mvh&S9$rbv%yUG0e zQ1`ycwqh)%asX0Ej}n-)D=}JsH|NB`&Qjjl&&GJxLA;UFm@?#H#i~^G|84>h&qK3IufV5Ya4M4$lD3WRdSU67*1txWvAOnzCTcYhrIiHCX{VBRi%9wW!Pn?*RyQX4yS}vtoCCt3QefB~TTCY08w}kxyx1OK$(^37Av6J--Zm|NnAwUYpp3?9ab8C5)<<0mj zJL8H1H0foaoj_*S$f-D;6k_un9g_x5sC(KQAHbnW(GNb&m zM;a?*p1-_pw2$=P%dmWeydYXWm6mL|z5ZxJn0AWNCdp<7)U#VILz|b26=NpY{9opf zr}O}H%dE_jb$~Kzy)3ud+uRU@0t#pjLdM@wL`U_Ol1`X}i?R7%xfTubHsCXYhTU%o zcjZmls$ZO?A-d}PcSR%aR*apHK%;czPZOXU?fJ0ThPf5u9#5@%9%_w#W%$=A>sm9T z4FduvmjZkouV*SBcp#PWvY?E384Y(_-_tPIM<9JZJA%A_ zId#G;9nBunITw`BheQOyYvMZZbex_Ax-(jynh6$%%N9u$*}7re*tOQv3gB2?iY+$O zwDq02I3Esreeh}*4~Q^3U9Jf*FW&!`OCjDIgs?yQxnIu>rm8X!2_jK=AgdRgS`NxcMkUFZPqcB=@(AP{7n=ElF~7F&Qs zrG?E71-f!}va+rDW)+~2GXW2bAwa7+ephsaqSeNqDd9}UsBsAWv(Q_}bx!ooW04^7+gs$L?w|TVPO1?a6jCmo-z9!h_k~S6Zgv3^QbF6? z*X@jyjr_IzwW9l_`nvn~^F=`H&&`KPN6iXN!LC%soGRkKf3SX3C15WXU^X9A8BkbL z$vrjDHiAz4IQpE1NU>D0o`0~24pl(!qE8;;9p9wBkvA?nd%d@uaq2-KmwnJnIKL+~ zaV0WRJs{h3(;M;b%85GcW7rZN#5Fp)LHYRGDiKxxbq6=3RinkT>d(&lv!F_I>^dx) z5p9rR~&L9KDV9qW;mzJ~w?tn<1q4eO zsb_c%FP*f@SeT_^T9^E1Hzqq3pwT7Sd>-Xjq`zUu5f>ZSVTtKOm-tmA>P>JnEM-Zr zGr~jBdxTRzmZe;|6lS~f}cHwA#DUcXgvf(Ww+9=SZ3+DB5)cjfL!67}92nCzh!6W+eF zTTX$kw<>Qtm2n6hXuCHvm4+`mK_{HLvJnX5Mb#j^luR|@W{o4KTF44(viaW_3t1yH zg)&F8M@z+3t%ce0KvR<3w(@f-2-pZ`2lE^a30JFpZAj6}Vu?+LDfKBV1Mhxv^-n%WbcFchnkjny1_ye~3q8{9 z_9^aN9%>a8Q5v8zz?18xL={}SC*~yCuEd{fiVt_pv^KEj@4zlVYVG(*UX~O)6crHD z$FZP6k*>-(%2TVFJ%H#k=+zZ2&|44pkC)!PAb=9;>-BaTP^R!u;h(FEnX32zhK3m8 zXDy9wX6h~~FR(Fyf{toBi2{I}Ohz@C7BQ=t4AgH2f*L_o z-$>OzpXJYG^kIQ_w4f3mJmskT3opqTv)7`H^zWszym`l(Sl)2-dx~YAUGGXfSs4R= zFl0z#V1ihA^Jcj4wEPD{^N3@9!4^oS{=_*cRtM(l@@ii z;W&zTqlyZ#^kt{EvTY4?yLmkZpN>Q>3aKmWvG$dIl3De68}fEB>aD)`_b9>M;Yr&1 zW^b>6ptq%2ip`ft##9gH=A7h}A2GC^O6-*dzG?Osepo|poZ9&n>phD`cScS%;~B`e za?p4OOMiz+>Qy}Ze^+AOp^2Tc@kw`6u@@`Xak%a|xZKFeA6RK+)17?Ke(K)kbeS$K z6y{!hrZ3cT9w5kj(4W6DM6jg4UW=E>R=tULf}IBSq+n6Ndl3sDDj+_<)g8e>AHoIM z&OXw<`1xyt1miqz*;G86#EI22@24X6sm|&s{-t0i^XQPBK$0yu|QL4K!7ag#e%U&fI)Qwc24tN!U@9E*NCHk8Kizx%QJ+AnLY z@9DG|U||dflAl>{Z&0Axp(eD$w$?un)@W)3X~*o|A|a}XYb8U>X(@qI(_?xSJ0AI`=_&O1a#JWj-s*wbdXo%ws< zfW}Rh;?%224_M2=|H~5na8*z-huh5Iwf5^%+=qnq0B%Oeekd!^Q>~OMkFRpCr8xHh z@l>UmF=uXTn+cD2;8u>Kt9PYJXC@miSAu6gesZ1=0+$QU&nw*DoT7f&fT^*Hru($? z@S?7)VPHvrTL%2u+mLUBDZ8Hy5=GyprGg^cf#0r-T*lhLi`NgIrz>>Ef>yr|T(bM(38Y=1o*6rsofpMR>5x}u6@}$YzvFhFY$w zu1Dw30hiWk2YTF(m$zy^d!b&d0mZ)Saz+b1&wWx|Wp-e`B^n!Ck%GRDMmPcBMfFy( zr5f5LynED-GOS;V&+3UTu4^RScN6k_Tb?r)mgY$n`CzeVIGZJv!ukoLA-v2mSxc2@ zym+pQXUf(2@b02-p14~R$0FzRKi!_Yyg;nH&D)PHna4b&%vK?*F-#&jJ>R78?eT?4 zDmAUVJlYyUm*xzyq7cXL3)u%6)DGk_y;c771P5xZCD9?Yuv3?}^aRXbh@L_^)X%kS zyM8Cgs`$9DX3da=R0;3$f*T9?o_V*EHbsy}Z>!XF@mzN3=o%^8y*s$5AQ*H%N}`-Q zCssYju>RTz!Q(w>&J1>tP^tSxr0o}0%g-gDJ}QKvl*k89(d?q2g*llIDD3ky4B130 z$}9wC0oQ#;7Kx)?Dqh?&M8t{A9&cq?ZYL;8b4UCn@@=Py1*p^u$+Tu}}SKDRH-ROn0&)6<(LEggy)@prj?{)vn; zaAUGvpN~PbZIMI^3$|uPT}cu;^i~=+Gg&$?#Eu=YuG5|ARCA*Wkez`T@W++6pS8I4 zef2Y*XVa@m z8uRD&$C<+1Gw|hxAvl3W{pM^Xu!1ocUwRP#F;d%}LViku!)SC;De#EoLSAS&pYl1q z(I~t(T1az*F`MG2FKRoH^y0XIv#;X%O8gThp2mgG+u?TMo2zQtqZXzsCupot;YvGz zjvU~a1E%gKZ1(N>0`V8g|9`bdqe8H)3@mLQVY@ljb>P zm7^jzZJ~n@qI8yc- z`9mqxH9xt2&d(? zt)^4{aPkf7eCAnky@oy(6@JGL6Rc(e&cwmlBmVi|N9}1bP!N%SOw@+4Muw`zo#jd$ z`x+hA89lj`A^oUehatbFWM(Q#%_e$SZopPO(I3GZ<9~Gi9ySB(Zh@tz>(!)Oh3tR) z23EGoLqNHUx)0y}^?OaVtkU2cfft~2peLiPPD5w5etg+qJ9ZixMfKBhtzNeNoH&Se z`NYLeUgdjIb^iIrUV;pyNqc`wHC2{v@=m=h#e2AnP6V5+=smyyHj3)-a$XS0K&A5XpR->ySzkY+Q(P-v%h}N zBmeusV%>;d)rx&CcSoAS5Hh)35^+bLzpFK>MqaCjUY+uH|7}fmPoH=Y52*x5jhxrJG=2*A z*7Eed0Ab-%paRXeDxg~|5N$#s_|LWI;V3*M`+dqIjcS*{T|=L!_3kv=uE)}3pW182 z(ek)CWBrr%&{9GAqngGCB;>!Y=2>EAr*_5Z_vAYZJmtJO$O0eT$hR>lg-3|_+)li} ztK<4_#dbZHJWKE-a*6mrm7TD5&OgTo%egrJcA(HJh4VSk7}GuCmvob>#p;X zt4I!g{JeOnr1AWfP^u)y_w};LtJ?sJT)cPJ{2`-tR!i2>)2XyuabNA0X%NDZ;ueE7g)G|u0^%xNhVXHR-^l$ z+G;xj9Zhiuul-nxWxxt<_xF_$R83}D;|OdU(0ZD5V0y6{o^)hD#fD4LOq0Ow^9yd- z82!Yew7Bn?!=4 z6tC_;2;`RK&S?@>7FDM}pS*5dBEMm3Ix!ZeR6vy73m@-_^q5$65(vF0sGOs+1Dpw< zND8XzV;aT^bT)U3{mBG^$7|Ph01javE%O5+*LxRe$8Ypd!`wQR&3tixAQv0e`p&=b zbLJD9jSKY~ZTS+nplk;Pbt0`sf=teCJ#5Wbawh$4O8$th#&D+gT-6Z9U%grHxzqB_ zN!N@~EX!$Z_rI)hsSNsYp~z={Y>GKK`p1f70n>FPrm3%QXuH!;rJcKNBgKg);fTj; zibrw=)ec(6zSNmpq|Fl6@tVs+`^Kl09XA5rvBN|n^!?7JZshPMyq<&B!* zSX&QLo4)b8>id{U>Buway$fAa4fv^qN$u7lN5Dp+rnkVGC-75*m7ZTg_Lwkg<_9i2eiHNR}&QHc+XQm4TbNtQg=G3cZ%Ehl- z7EgkgKY7^oOaLwj#=I;&${+b5yaFT58fTEM~N?h35G>OI{x*PT>dO!6;5w#)OxR)Kh_#0$TgusCZIEMv~l zZr8NhkffD2J#log!xQqn+TaplkCFHWf9`M^Uy~L*NKergir~9AIuK52ad_)4h+}xD zJOR(DQSnMGvYX6cd&Uo!v&?P#?ip@!$>u*~OMj$#B*Tkgml5x)ZSGKpIo|G{2pPJC8O&%7+-cS zQWO>*hpneeX};fkgixb#NZ$AmQ#)s+axhAKy5g7&UNS~<{gjK6IWoPK$oYYP2P|!1 zT{STlih9?jfA-AvuRH%0Z9i()@ap}UJ#ok7;iJOk}#BO(8k zF<0YzikQ`B3P_VuCg6MEr&VrfJe;gU$kJeDxo4AKp?=Mi&UluhtaplvLCz>*7MwTW zYw;j0C~!x-LvCz|FAn1d9yt)d!-I-~&)?IS4+mzjmnQVWj+o@%-SHOc9dN#kxPHwj zav7_B_G53k#9Ob(>+-sa$MuO(SSV@*4jc&Ik=*03WMq%P@Ba;2a}B^-Mrgxui4IQ; z;vP5bxxqS>RX;yqf@Y4*LEumPpASI{sMM4QUboR{ zK#ReR%tmpnOXIi0dZW>nqYhp%8v4U7LgY4xjt5~PuYQUtbyseN2H=-Gg&^y^R$PnK zlKa8sl`rlP0?FIZ0*?h=IQjROa2xrxFJaz&iyICn#20bu+@(AgY-S`XRyg>) z-TlWNN=Q~o_d)f6LpJE;2-tcKEu@m4LgpHi{Hv(u8Q0S#yF*DRNUu0BA?|>)^USUa zegzIhEa2Jeiv&+pZq5=>jwx(`MkKLU^dVgswCjXUX`SwS-6)Fv^7I}RVA*#jf)l0X zl#Xnc(Md{@;W`|Y(bV)ag#kQM8n=WAbT7!MlBy6!6?GuW?Vu)e>oJ~q`dfVre90~> zPS5>FQ*Lz^*y|xKt?Y-ERd5QSKCw64wOMS`VswnH6MViGV&u;H&PSb$jX}7b8!Eac z9a#j%*A-Vb09X5TlfS$B{vvRYWZzL?9&}+b!567F&F8VVd77=gQ_J_)Xy}TItFVQ`l^|vkH*z_H&4NODacmzzrw9a_U4cNb7ff zuQ>Gv@01ssB5L_6<)e@_`AeRCCAlJNU?lLl!Ea+0kPe7q1r|o}2S`U8|FlttI|FMc zI68AF`QS%ece$3nE`)>~{|{YX85ZZVbQ@ssf#3`p+}+*XCAeFF;O_1Y2@u?ayAyoS z;O+zs?(ST+obNk(-+O=ZJj0KEyL#1HtE#KfJJb3|Hi{Fa_d1ZhQHpJqzb@aU+OX+9 z?r{AYc+oOs4o`zY$Oia99B>{ezO@+dH$Q>AVV}?}Cd`I3?qtq@dq}+DB6w&B>g{Yq zZ?U>kW>ZKXS?26!RaBLZy)Agqni>c~ch^udKnl(;bo%MkA2-e;FYltTjFuc>fuHD> zruBXSFKnd=uOc(_jwi`IynD=|Q4}NxrmU#TL>Swk)A?a+R9I0Ly6O== z?W8$#gCmf~N(r~L+h8+NC8D@227gdznM{t3P3**Nprs=}N(oIPIvrN1W3vGSpFoV9stVx*~G5Yxl>AmJ_fph9A&;qZPUB?tgN^47=+F7M5E++|ZnvysiS^B8XpCvgsw&RAjql%7~vNAQtZ6s|hSk{!YwAP%S` zC2;ASkUL0zZ>`REy2&N^5ig%DOB3)MOIVupAmx_X#Q(9+z0u2QT(7&KahsnZ%L1?I zWMSp@V&!^C>#(HoHoG2n$A-p||6k>3G@Oa@IL^Ss?t~i9rGp=i)Zka?wutn^xcY!O zbGWZcEtKI=hK|Ez(Uud>dPKs_D?O%)+tf9@l_Ju;8PGJ$NLjx6Vk%G5XXSCw;Y}gy z2`QZp{o-)vc_!Bd5%IMIU)C8DPD%lr$HIXPLP@T8Ry4E4If@7%0fHL2MD#rLvaw-Z611UpQmw7&mn~F>X8vYq#a* zbV853Z^2QACv5+HKT?|es6=_70~Ub>DW@=wqb4wdlERmJgwfVcjy71VZ~nZGl{1fX z29D@h0c(kMUM6jTM{(s$<1bTrR_?t^6)g!7$`mbC|89``&)r}U4BO!al|5X%6kUya zoigFO$uP0LX(6q=+?t|=H_y4ZaoFJl+!$>3JM;iKky5~zSJ#@bE})Ng){|sBol5?g zlS0{yWAEsQ=xbc#<^^O#i8(i%BCa0`2|6V=`1?W3-o6*|kUS>F zNAKT&>MS?VH-Z7)Ipe+IvH3+f(j42tnOrCUQHn~fo#jYO_u-Zfq z{|cMa!12rBz?L%GaXFNCX(^e*dIxL`I1)oFnhRE2&#AL;JxNS?qC5L4*atu|qa}Nd?Z_>GZsP`Mb>+sKU;5=xc>e$HeLRC(g!_I}0g&PQg;WlO2E|^+FiOVuQVa)g z7h`AjtU9!NW z>!;B85ZZbbU^XRoQcYYceD%E?bWnhpJV7VhxubN|PxxObL9XdUFm9SCHV$t-;> z`5%LEL#2D?=yu|;hIL18Sl1u&T4#0;AO#U;e6K_9g?!Asm?ADx8+4wc+;B5mlrz8o zy6l|ViTZ?{lcOKpVzaSQcwdQ-R)B>=$V7~s;b~vNjBU)H8qTled)hG`7hdY;AIWA6>b2IJ zD&F7ReSN8?HdzF`o51he)Lc?`8tAp`zSh~Au{xc%N-F8GmXHe?o7L^|q=WFQau}Yz zfNhk%|CmK6Ju~KL>vA;Tc^$|n@rh%XZ-n9=3VMq!!75m-w`(}9QR{NzW^i#+N?iZV= z+W$U}hB#8DLc?(Q(6R5dao3gnn;T=O=$K{dWIG}L_&R7%Uz}LSwtwQ7_k_Yw)_E9; z3b3-Ba_58gFXb!)5^+D9Ejoi_`I zmu#)gU$l?y^L0Y#ibN54+4mt@=DCEk=Zr&lycB|V55hx3^)EyJ6F{FqT=6>lktaVo zNEpm7^c%+zdS>w<@#gdSENt7u(gAz}vg zB`kI$*9C={!f+j?h0U44#yCD3=3$!_u^_s+eOkRB=KhunexcfY@2H2JS`}ZLO6c?Z zvcu`*FvU)6{B;T<>v9pc)ylg>q*_T+Eomz=p$_Uh6R6~CmwL#?Yrq61+ODq z#@l-X9yeKou=gHg4|HJnwZ?&OYhT7auE)(XZ`xh1`t3ZXQhDW0$A)zJ;rGl_)wee= z@1vVO4TVEJ4-8Y*{ipddM+Sz?DxfOpLO|_nXse;_F8}y$6``Azxof}uadRX2KdkR+ zp!H~%mxDe+G#W)N{m-l5a`WR?m^d==YTx7lTxP?5?}IWe^WMaM2>QdYZQNR3F9oK_ z^V(@8cQ-e^55f!SgG8vz3j}hfW-H=f7GSq$&QsZsGCCPA2oQOW*i{zOr*rG*S=8uu z&;i~Pqn6zbA#qFA1q@cK9i5>o_h~pEzBsKy2YjG&em?p#*PpCrL#si8Z&DTNXZ2*R zkbWBLm&8M?+lp8JiwV=v)nzw^xKUuUXT|!~2=J)WroQW2WSN?HvJ~6KI~|O}`t-!@ zH8u(Z*HiGJ^L{@v#OOLO8gF~)d1S|0R`v2~H)B0?Y^J;LKd|HsL+H2SP^4&x^FrjH zF6s%k5xpX0_5PY#wU5^0DfIssxP=MBrlYCYDa{%zA2Kq1zVH4v_h_lYEGHBwHmg03 zBiP}4_OPCy%03SOq7fNG-!c)!i?c>Zl;FHT zf6j>_qcLnt_fmyYdtO2=fc20oA zI6cNEV!(TWrlK@)@Z@gwKLO{$`gK!|LPH z)S1Ud==ZiM2K=MrCjYn~mu`gUcp!X+s(m`N{wWW(0i7+_z1koBc`E+!6|QDbBY}xJF|})KT=m*QDY7jek|4z_tW7VVw;Vopn1u##XF)q ziv4!m)Z-!|=#EU}aACuTC=07k{h2`yn$P(8UOv>e9fWeosQw~ugS41GdY~>;n zJ*9>XN9->qil-S-65sfHeNGC7AN1jtA|)NjfYViXbddbx1&Ucvh&>)KV~flX6#x4f zbV(+HS}^arijP%@dc=Q79`}T;$aw>^#VL1kM)0u&A;K-yq!Z-6d1WZ!g2VeN ztieKF4>okn8$iX4B_e`BbU~=3$7LS5w_N*Ri`s+DV-%<;atMiRPq{IZp~@3%Pd|xV zOpK2gY!t|w^iu1C{*45z7J8>x+_R-_Tb(bPdFBAiBaL~fOyMGLrm zK=nOecb?nX;uL5_N#*$0P6xE1bhQWj6o30RQkz=Ml<}69vHvFs-abW_6y&X8z>4U{ zbAxIa; zzlFCy>433+6o8PU&-U8=OzX{~f|;UIYoKD}&_yUiT$r9k)aIa;%H$ zKT>XFY$h@pIh87Qxrof!oh|IsH#cM{RpbKGh2KRMmw=g*^jM&>3hK$iH$SL@uaW~^ zLO&pT>s(zYxLoA{OT^5uGi4C63a9xS{3$Voh)nn3I5A?st~AKPxw7!FyW>aw5#RPm z@S5`q9wXTy8+_oM^8bqbEqu z!&`Q?LM9DKWf(WSdsrISAGQMV)#oe&+tx1~)osQQg{Rmfoe6HWwi#>H9w7lq6EUu4 z;(nblUMc2R2k#Nl2gR%);1(6za=j6Hmxjbm2wgtx2hESo z-vpEmDtH^NEs!F1(6M#)c|MNdnmJH^TngMXdPWf`N(i?9?l!!vz(zlD6B#ZLr3PQV z$oHUo{U=O+vs;o0#l@DuHGrGquN~Eue|rhWUHueETpAn)c%GZiUu%QG3cZX>XEpiz z*#8;)An|vc-E%g*#j|aLfSp7k1*7i|$%rV!G+*;RR@jHsA)_`LYMxgNaivdmmWhgm zch{nXeq&Bj3q%dO8ULOnYpzh3{ZfKeRTgo@JG8#asJ7|HC)yJxOq)#6^@D8(X42*; z)P1Eii5m%O3!O?OKXGGUZoR(8jtPl`lmFUYK}K*sg6|Zu=?7}iEl>M3fE zEqdRVnQ{hiItU~wh2mx7g?c&;^upxJHDk zl9#r1km#i(d~UhP&<-y@%+0a^%igA=TG975AvhmLR+|7-&CvZ>ys1Mx&_bx6Aq*n3 zyL@`1Xi4@jf740h@8XGg;;I+_V0vwk4AwqNTG$7c5dAS=XPogoYltG&azjFVFWJ9UkEod{TI*R z6K@MnQ`8eCR`V)sCXot~d4EyM>u85M`1ct1gd*y@9l&HH83YsQ^FPd>a5)b$!)0^B z*E~@RPK+~PDyML9BWEa@i}GcpEnk;ImPgMhQ0Y>Bq}GMyb^3Xh_{UN10$`Cq{J`m= z6>)dkS82_TGp=RIct4Z@``NRX0V;V4Gj}D+6jdS2(ULc%>w$_IXkSlP4MMErlp?ilZ+sz(%NOg>Wt}(CiT?>*j z>wUmm0E-LfIO-Jb3wGiN?to&tUam&k7Nq>sy!Z}Hqc&1ixA{~5H+}zkj+^!2ga93= zOAO_Kv@m?AQGIW-u#+pe^H@F9)B14@m=l6C~SFG{0M?nJ{8_^VVDKIGRqquU5i#ipZi! z)dV@b>9G2Hs1bJ2$ae@g{Hgg<;b%3NVv0=mGjS58PZcSg$N`!Jlx}6ZH1< zNL&M?ujNL{Z0}D&z{l-LVmo7d1`{|}2n_iPczZ&y9(p0=L@r-xPc<`B?S6vE!PDt# zjvwN0edt#>dvc=Jvl_i+!JFjvFqRg!%2rGBU4Oc&7h-RQ9?JSaUKCZxd0bGCBEBf& zLm17>D}?ghoyxWf$eG*;Az+BQ7oCvG*yM-=4v{c#;5#Y*`%`i^0zZLM7ay?kg~T8H zqw5P%HKM#tYhdExdQ9?)=&mIp4*Phs73!VdSDN@x-(MHlnxL@{R$~!=eW?G*UIF{) z{-CyQOxg_+lB7uZPEynlQW)Rcz>fPrX|^JG;5rToN(Nb)u|8-fMjC@w;?v=tl$%4- zKrW|)Jeml&V#v0!eK?6b0CmFdCuUTDJPt8$uMn>m@-&en6R7kgfTRuKl4PeivNZ2y zt^bI$-n$)UUjEgb$C+IMP!7mNLV0E;%H)A=6NF*g{6QuvT-Z+GW~i!yU!LKQOA%6p ziIaKQJelj2->l4+EgN3+H`SB`+~l>a1}vjU+gawEXSNhZt+JnJ2Qqn*eu^F9^kAU_ zDvpJl{CU#G}Jg~=>1^UZ7gUOWy1c9St=QVwlf={_n-MajT%tk zHS$E&Aeli7TKhg@Pgt(bwj5qpNJgUwqf^dCUUgGDfFUnnvXCS}t^&N^v_8+m;yjES z+Jb^Dsx_Cro0`ptQ=@6E)zhH;o?Uk9X+PuYRoA8Lki5uAN)Zde(Gedb4NaCvcFV+c zgh@3Tg9K;WDyM$gp5QWP5*wCDMu9?SN&yUlY8`Qu7`!eN8dg8@$O2zJ=ItYC@YCoY zggZqC((9bo4^LZH6R6tCi>R04{m#+`tkf;~w1VZhIdcbVY%I{0^zV&+LLpLoFY{5u zE6;#DnDy-f3}Vz%7h})iSsA3{9Q;OwQ-LPzIre2J-DlZJ)Zxf(vhd#qsAEI+2_Shy z3D`Z5zL>Ih%?03xTbLB^ZGI{Vb?7xWOPWv0M|$lP`C za`ltF?WzmcEXX@f*B*F(ea-JXt%dgU+f&MCB^=w)Oe^}r1)ne<9x)?bpi1{_HSKpt zhAiHU*CZe4vW?Kvu9Cl{xEnUB(KEsCnC57ole}{+&QAl zIK?@v1W>BwEN%Jl#kLqseZrO0%Z>b3!qKHTgJ7$xaQ|epHX@YHd+GlO{j@YJ1RoZ% zk!tdPqqHUfQ0^S!s6shJ%b>5ClF-fK99e3((X1b0%*tU6zR>O^Vr~YW8{%Xn4LW*F zNAiVaq{)(3gXy2da&))BIhYJ|3dX%D`BZa8<<`ArkM!_cx<^{7Tx7@u7m{x_Cz^o* zOB0N0{`NE*5%-r)k}iPrtg4&F>#Yu<&HW=S#~Jtw`Poe6LBSzSLas6#DrCqmu`0q1 zq(g`bgSQ$9^bBE*jf|Hg*&o347Ouzv?>8&gePIQcnIk6c7zH0Q6>u@;8<(p=$-bcK zzBA{22k*ar`oG(Ug$<#mrIm_5ajpWatEE9PCg`0Qbw_kU{2{T;*$m@TV75m^p5HOm zz}qbK1&OE2$$uPIMl`IHF7 zJZLnv3_`yh8sIPw!C&*YKz{&Hz&@IVg$0w{-3%`uT#xhxg%PlQf@NRv8FNvrGNL9f z!Jd>@1trBnC$Y1ulI&t2&FNp+XP!4elUZbmR(BSg>ly^I`l|jJF~>SMUMes(FBMFat(mi$~whG+rI;P)?9o zK$fw=D+$JD_3sVMeN@+2&EZ3kWWsjVOqj1JKB(u%lFswBv_7;q@vmH*>jJVE^dKct zJL@Y0>%vlUYcOqcXgG{!^O&R2Q1Eid@a88^26pS6!e>0ioz!< zk6ppW*Yjx4m;u)71)`@ePF6GVvD&u%Lk|AIFjPs2#KpxE&c4#><{qjdBzH^L1e~W&i z+ktOsjQR<*jC9?>o&KzJWs*q+h<@ZgM9H}$cdVasb{bfrMFUYL{}usEn2@t1)S;y`x?6M7HXPCe z)*%U7pMd#|SeaQ#d%~Do=wYVhsD)oP`Fe@VOcO&@`mxLDHfS_m!7CSRVn%S?b1ZkD zC&KKTHo4uL!<(qa8|P5EAXo-W^8!~l%iq?Y5)-l^zReq9;9Be*V3k}`nq)m#U9jW1 z%?{O1oC-a#fe6CLW!8VTmKgxQ3r}Oy5C+3}(CyksUFXV~xrjZNX42!l+9gduTfN zW84P20+5I@4s3jvxchx6D)HcS&w`XW1s`??3>ea77#b<+p;*w!<_x_if!m}$9-GFqJIC;XP_cr?k1Bg zl4~Rs-JNO+e6UhdPPg6RhfJpUC);(Beure^9L3brnnt^H)%F>j4Ef46VrI5p|6feu z4@Pw@*@aH4k?fVLO5d>Z&gq*CQ~N5=$c2Aqjb@!HgepU>GyO9lDb#m(*gqX-}<0U*g6OWQYEEQfyNJdj_3 zeREoZ)ID62%5xG%WVrUeZnA39mI*?>U;JJ&c(2nh(A0gJg#0Xq(>k0|&rk7lZ+^H? zbK!svI@oa`vzcNE7m6PA5<*^n^W8zYYBi?`HfS=Y+R326x_RMGgbEQeH19#LWC1Zl z$XBuBX31}yiNJZkzExsY^P=rbb_Q7aZar zYqvrCY9D+@MQykUk!2%<_G_=ArZr2WLX*DQpe&A^r1-J&#hzOE-J{VD z7=A(J#OCvk-L~Bi&G2d&|IxEZ0hkd=cyZo0BYa{_5*B6WkYADY_J7Y>r@Up>Z0=uQ z|4EW`6#@9l+S+KU@G0~>heiZIPSj6`-l?|n5)}d4I>;bslpua*hw|)3dC2Gg%mRS( zj`>)fmo@HZ%2u$0KG{=j@p$=txbn% zjt);Q!g)Uh-wt`|FP-RXjJ^xqRk#3tPB_@71IYYF=#&YLu?7)x>aV^^BiMQRS6N4-* zD8R5`cxs8WZZKC@;cC2S0K&SYthuJWEkBd-*Pp)D|8gbW_W=9=1;r71O#)nV`Uidx zpMnSw3y;|V3c3^@rW@KlY$|9Os`gue!y#s7J}uS`EU32nRat$`u6hy&q}G_r6jR;F zjgW9uJ+l#EuUT)((k*`EpS#7g&av=-G#1g-vj2qPlveWVVXp)o_I3st)xe7AU{KI~ zG>G1>)lYF%w376;O9VcQ*Z}Gqx?Ldqd8Z<)M{I`>JYP*&t(0_wgQ*!=`^Nf^S8N`k zHH90Uskngtply#C6+hQ_sAlfZ5Ha08lb;a#!kSo2;k$n?td6|;GItuDeVtyE$DN9B zHE4uxRQCPjls(>Tm0tFV;sw^5GQ#^j7XHszphJLUpbLsJvE3L_DsvfnKup%zSa#DExX zd|hX~s^!_SBS;@c+*zzX<|@~AEe)tnWB#)8_Hx&^2eRc7=0iWV|&gdkAmTF z%k8Y!V(I~J+fkcAvyb<6*Tz;kO_;cN3I$&gC&Okl2YIPQywHANu-v)ku^F(l_q!hK4s!)K9B zB?%P7Nn6oPh*jo)8dw4Qs8lzRh>)n2y?WBh^}Aw7m%WzD{4pT#sLZYXl)OB?mu*vR z-`UE=_RPOhf-x})I{BHL7XuB4SPvX?!b*?fp=x-*Q4T&)uxtLJb& zeFf?5?tPy)QKrDFSL|W)29;Sed(E?~L_(+G*Fsp*8|{?62^5GEJwW*a-%RZ9W{V;F z#X)B-ru|BE^5Nyb7H9~7z@$~8P>l$4vA<`#+({yIoA%O>GG>}78S}}svOEg<{}2HW zN}{-sO~2nrGbf6FE0qn zpfCu(uRR8fcee(TF24Mg5^LIsik|My&UYr&M!IZX-d^I8srMT$4rDU9Ja^4!DcTVcz%Og|9Bag`Ciw$$AMQN)Rha z2hc8gK2+unIMWR?Yf-CG=5zUICy1#-jWI;4dUIou%F#;Vz9O=o9B!kf3^~g&YlbT% zZnGgcWB3$`PVMDa2U)A6&fIqkLkzEDp7pp%nQ+n5F#239rKSxzjBv+gzJzeT--HA)g=XgMgM$fu@6l`uiajNpT8u1(BQ2ZtM3J7Hx zW9*p>a!Z;_MTJe2x)*8f5#ct4j$^tfhZjy^fD5tW3-D;eAwnQvgqcUf|2s4o;6Rd; z>l3B;O>#evdYV(ot?b$+YI#{)&U|zp%##O4ZjFuHcaGc@|0&_BmEhg&i0; z)uOt~=5&S);W<%7=0ruwnVSK|Oh^)Dt73+qB?je5Kh>CJfi;bpSWZNQ)8ffj#8OD9 zPL(x**%vEU_mIR7tv`OKCBC8n zX#cS%{N6igD>v}t@b?d!Xq*25P7xxu-^~V#{`E}AJ#u#96Eaq9)2OCwCqLI=XkPiC)9@Uk&iI08#YS)gh;bbyyOiWkj`K(&6rCLY}GHe}tp> z#AP)MUtT7SetS@w4C7HPgf%E)=KmDULsrmlsIyaWICv?|Ju|<$iu6?)wQFC$ayKb` zOc4iLvlJ7G{I#gH+3(%%D6+liu3Y+=-|3z1q3a#~OR35Qr!=F)Lfcy^eRSh<-sy3T z=){5!C~}>D%6GJR#aLo4s3O^&+{{|*8k08=sLz5N*OJuhuYPn6N$an3-XT zvE8C0M51rUUhmC(tBY>*Lb5!$FuT@RhJu}1j@S9wKhQ885Cknf(TshH-U~d+KIwG( z{mqqc!QnFmMrITfd;rv~I>y$<=(40FDXZ_DcuUyax2TKUZn<6Ye0%PR^(bYeK?Ul5 z5V4N5eGF!f0!B|M(j1tgqkTi^NU6sawCePiXA!W75-)*;_+6cf@g&6%roZDVKPCV_ zc<$MvcAs;(1BN}FWz^IFE7V*h=GN$+b(Hx;As-QpNS5(gt9sJ8o?C`s!QhTG`M(xF9N0;l{ZifIer4LmLv>Sg=#TS(QP%f! zp=tY+i^^2EF09#)t%FTWicr+R{dy3V-YHu~*lh67`4mwH)u9xmZIU7kdRiXfA$y6% zt5)W@b2ExbRuFNgO4P=xiY(dGL)tMG&4T5`ZAxi-t3E(bRKvlqT%X^FkX}2km|)Tl zpl<+!jXn?V6C%ZVF@FlQWRY>!L&Ts18Xz8IQ2r&n|6|#v2)qdp>~DQ5Q>9AKcxMNj zpPb1Wsf?Hy=Y*j1x_?@{!)VSAfkuF|44dp_*x5kjUh?xMHtkyne$rNsmq`0KMBSdz6oqx6y`8`@Es_C=;w#{H#aXxBok2 z_R-vXiWCw}!85L~P!F57i1PI9KbeDs6x|&YhIil`rM)NT0##~H9f2}^y{s`+Vr;+K zCV{C3kT*i-vdc`Fl-$*uUg@2oKWjN}rJ3==`+N_LZwC2`!XA0%_3mZ4tmAQsv7SKZ zNwVWAcD?1Xltu;T+6Y(N!8GR(ZujP{BCgT^}UK)m8RuP=FD9>at4e{o_2w;FOkaq&r?Li*KG z=o=NxpY@(R@SEE3N!PYqPCi3E7d77`&{s}5_0y? zlP;F@i)T+lpca_Rvh#^TwyoZcFaM)#gN1a9(VpgPCB1ZQZs+UjKoYo6GJCA<%-dkO zA=YIdO;8rS@UQHDhRg_3K#G*QFi`!lz@*VosL{qAy9Rzqfq>4I_N>teHKMzkA=ja# zvIdl)mKTGxN~MsV%od-)9TJ!cgmj_-t~j~VUx-Ls=X6#z0c?YG1|w5OK7U#W0%zg( z#*R1f)xBmNFup;=Dt;_ROWfH?yHSo`pG6BgX2DdLI5SMyV?}PgFaCK)V$|@omEvDU zmGWJW={Y~kgi8!84W%oe_f2=gp``#;p^rfyPc*3x@l(;Uzj!`rjDF)!9S<(}>5W-? z1zj_dA`x0uHXa(rzdX3EkMJonDid zxuw%?RRREVzhiiMqsoZQ`GVFaXcm<8gg_@ESf2P`rA_#jZDcRshE&;%e&zJ5X&}e` zRx}?g)T6LLGruaRjZuiUk!V>D)ybv4KXqJUq^0wVTx2z*3C05Oqb4s#JIo3*B2S?C z>_p^PI_Z4o^RYP%hu@LKW6eetFftUzSBW(em+{YHNG^qRy2VIH8|<6y7n{NQXEWG;Ai4PjK5_P&2T2`PW)!{B ziLHObAXYg4ArV}a7-ufviy|aRjp)*Qff={Kkdk8ImS)y$m43J@8&=72=xKd#o{6a3 z`Ni?B+H;`TAP0HRrFI&k(YiC@@l9kiClv#Q5wSO1AXC^qkx(Tu@`=_Z9{l|MFD970 zR*V8Uu=br|pi*|cj7`DycIU+HOcRq=&v$n|r%|{SWsOIG-c~-M&^P@05J_8~;`^&T zn|klu@$qs5d8-^T^rcAR&maliT$AH3dSMU3L3rF*EV-TdQ%(dhZDl&gn68zC9Yto@ z7KWUp=o4G=f4XM)0i1q~6+%~0-!_cyW+xOpUngin&SuoBjqIrU{vuDbvZ#2|q6a;t)86ZdYNVz9OllsoCQxmjYqFegXGI zg%tdbQF<&F;CXI1w8t*6}zXDG&Av zn%KvNVxZGoAHGRjXdMyE3P~2-aX$R&X*0S;&c7R{O4@6b(dn35a4jfjRu~zKyw~{b z^;xiWD|hD+d&xmp@i%vM>x~`JK?jZJk>l@#^a)_u#3QRUp2x94fJz>?`QW-) z_6M|`jnwgY{e3SZyROur()-Qs2W3()YidVqjW6y+U}nfho8epk;(vD?RLVlCsX^D& z7bh*Ph70#J=3!SO@r=Pxv8k=s0P_^khEalY`*$S1L<#*a2{Lq&h)pC2Cbhz`Hf)C+ zHUyG{UCX;meu4RF)i>d&$HRtA1i0m@Tuz_#?QAYK+;EKblu%VJM2YFqMQ!%UhVyME zem+mk_O3V_G#ErOmY{@mL4f+IHx>buAl`eu3Gh11YP;@cHE3%K*}V{7@8VbMj6%OO z!2GzFup4^8c$NrK*kALw-c^h}H9-5ecksCM)c7UIN1JPu;_O^WI#HG@J!_S9WFoqEB2{&ciny>@Zg6UDY1FAQD zzC%pb))({e!q0tRC7EWFnax>q4eeb|<(_TLU>zU*(lwgRyLLX4^&l8_7+ys~E^E|h z(_^ubkh~#~1KK<{cw^MZ<8FNJ50rHyX>Qpt5Sj>U@CM_4Fc5wo3SHyJgh97wxpH@d z6>)5@R<^6|(_3oK6#JDp{u%c8$5I6Pg1!+dD52M6o{%)})R21RyXNgN3E$1)xtHguk^o*DqOY36B`;OdX zS<(m&cZITjESrSLfdC_%&ED%Nlk=+Zx0o7ygcPXIT!h=- zOMxSX3oAqfpY?UA`2>~+LNQYzjK;4`B6N161i@aY8jqQM2H1KO?=Qo?DKP@EjrS8h zq2(Ojvtz_0WO^;^n0xQ}&X?70S6_ZNR+f>RM{-lz+ux>r+YA_fjcyqWjV2&IbHv&f z<3mr$uSD;7y;wTmDOj8*3gi`>TOmcr$j+xO3Hg1h4pHOQ#$Ty#m!1U@J75PL?}=w! z!N_cp&~MJRhYy3#X1m;x{-D|KNFl0}pj2L1(vI}HYUE(wUJgGUaFuC0`;xMyoWE@D zyp#I&n96dK>RUOF+!g;{EhBXJkP5YJpJS?iOHlJRhN#$vrH9D7+jQa*gbvCF$Aj9J zy1L$f$z(@r%(KsmUH{As+N_EjX*I(1j`fDlH=hPFLYWf-IHhybd%B!?bMfU`&oJ;W z!^9NV0QNtN14)fJ_tM#YkuzloJjflu~lXis8I-ltJ)}GQ?+_21mi<@?yntH!{hjW4T2arSf49dPw^sDtZ7+lA^Qt1CXase*9&wxhBMtOPc1bgo zm0mPx$E8131TdZ9&~b`dmV~s1{02oAO#Fx-Le<3ep6qo^uX(b1rpelh1CZ!xK-k{kHc z&TDbW$Sbh+aKDd#*x~aS>UOf?%X0GV!vJg1WwmZuo-0g1S>RC_Z~O;PR4VB%K#H8%S|zgkpRxW8aA*3IDKk=tG!*)!J*$miaqqu-WszDWgrWW z{#ePBo83>a=>R-`M5iRwy}Yg7^G*1>Q1c&-VF=Ehhjp@rFU&E8%=LUJWMt&_&WRdYXR0EKsp)SC=*r$96swjhC(!$MJjegk@E z)|1ek-K!4hH`h1nc_tTpTIf!iy#U|(R$n!V)DK%I>I$wP2AY}=;pwh#-tv>FgU90) z9AAxUv%b&qZ2_qro?=;ul-K8hp3%diZx_E8s$P2+HP+R(-Gop&klyFc8R?5yH{%-x za{ulRMrH{ojuXujz(_eW*N)n4kG{>f13piCG~#EyBeZ*~o~}O-8Ad<#y*8DMIefJf z<-NDEU~Hn|)E7EFvJN)l)Tau(T7P#ke3Q5O+)HC{6YC0Nd0&nqCW^5XFjf>k6mMftJFakg)R^P^Ct>PG z3vbcO5P;lHU;=0*AcVtP+mHy3S<{tB|6B5AAn$vyAP(5$R(Pw^6Wsn2}d>l<8c$ z1@gCL`_V%jDk2T-?`B!~7xY>QojiN0(N97;O~f?)2ZUUvoK{N^dN>H#@s?(C7wx}0 zPRXQpOu#=H7(6K4+f3Tq7Mg86|G7}vfG&b;?oM@{pYt1TR|+fU?Z9Kxn}8*;&hoDx zT6%-H6A0yGEBs825B58v1dGn`DlG>OM-SQgRmL*@se0rjatb_gG9ash3>z_%-IsGR zCW#!aa=X-xwWG&`@uj)QO3dVgEx*F06>p^JUHrWrYZMmNy1ZiX(Pv<#c?$b^upoxSb!`6($zg1Yz%Gd8FQn2e0 z{9fAKD);*zYLGXE#N7YH>*{*AK~A5-GMX#aP5|@WynW9#0;hVlTo_KXKhd}@Dt|s>L>c`nvO>;^AdPC4IU5!jqJ@NqqO;#gB4$DP?to1Ncrt&SM>ix(+0D zXC31B@*uc2wB+tSPzH6t^}G_W(1h$#0N|Z#0&y(iD%@rp!s8=>y9!zNo1l`R&7usVKUve6jYb&-GRIAIgcJ|&fHSLC)UR0;IwrJzCWpE2q`D_u%XqBecInyo2p z+Cj<|c!kk@JPiwdG|nBYKw63{dFU)C(pg$JgJgzl;u_73e~l=;um;I^gV7&f3QDa! zzi<3iH1CsNm(S*EmEak(iq7{%yw$dg)jgeLC5hJ`yXGcb>B3PSNt{Q@nxKRkG&lsZxP1}MN zUiwoC7oB@{N1qlX1URG}C) zg!U0uW`+nR0WWWrTh|XzzIP`z+)22i*GdO>EooAz%`x}RLW}|lvyN!z7vJ7t-0_;; zqxfBW=A5C${D;-DxVxXL?5#1%x0HMyPBb8$(-05F2(SUBoF| zmgw12pgYQTCjcL5+=fGmQrA{LHTOo|djzKthU zeRHTC(f!dmQ7#Gvcidxyz1#7=nB$^YIgc4bI4WKt4o+N#tCCU02&LK5;3}zGTnwFB zL_+tHxl$Pcc|N17?Csd?KDSy$5+igXCU;v&0|;q>!XtFi+*Kbgt_z>tsysfub!mVS zqkBvNS$D^!k(#>CG`daR@AA&lYQ&6KhC(oFK*%G0p%SmNR)hy>)54($Wl<;KqFTw@8E-_R{i@-#AJC!A-93-c4h5$VzN`y<+2&7!(m$11i8y8aJW z-xyw5yKLLBZQEM0ZCjmmY}>YN+eycER%~=^+w7z}H{U*Y-@EtuHGj_eyr?;9jH*%9 z|3ap+LH)V@{%*l!TPwwHK4>uzZajJ_A(`ABy$XV$7S`;9tHS64_HwVq`$YUb{x{og zA#f1*e~kVwtN8!dF}L4>0^I1f5ww9GgcHRnmd)fJ^wGaYpRye>rrs{f6c~a#%Fk

    ~#?sZWo9<8p19*j8HyL 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

    j?xEd|q~KbA?xNJhkRAbz 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 z z3XAOuGiYWMUYZ=}JHMt6y0&a+*<#S;@o;`bHWJifc$sj)`c{va{77#wUy+Z%C1kkk4My>@N{sju`2q<5C zb=Kj8^Ypo$(A#D@p&F4ZUzxljj9VL7n^X2Nzk+h$q|G|1=Ul@|Vool- z-(Y6)G$;kdiu-tvwuK-EzI{HnU~Q#O{Qz$&{z&kUGCj` zUU)T>IW{=OzM`i;d;=c`O2u;CN%&kVj5 zO;K0wUN{IcH?(nD#?9EvefkT`Y~+lh z8$PIDq%Uwpr299M$Nhpl?q&$6)t=H<$bcKVy9U&@HOUr#>Dsdkx>o1gD>%*)M?nXM zg5CBQoT7xUyQa<-ZV&BkehB%Id>MiNFW2$kBRJA0Xz>{OpxZ@e?g6xvB2mTqDel>% z`o;sl4>A_4LD=rt4Ua$kwwA{Ov2MVxbZ#6Ol=dZAFiHS}>Q1C2odEi#FaR_;>Gd-==}0KbpC_VY2k>bW zDU0kuqE>L=3RPUlncRe9#L_6`E zg2#jOee`*l!~uQ4NsPWkoQ<4slVfx6)`$0Re}|5Lb>p?d!o8zgt7mQXg%*&BHvF#x zhyU^8g3vCfR+HbKP|C;No0!x_FKV0ju2-~3M28WnT|(2BFb&kIm4;tlD#t2zo;G;i z(VAs7I3Wen1MeX*o!(1SKm14=Dd>wtDT7Ln`aP6~6P5Pfd8?*5!4#$_VS`-blj%wb zfhA4lQtb6pLVMtIS&%mc?C^omQQ^4Jip_84)KI0mH2<=J-pA42ovr}ViAa#-B$#D>f0O( z!xds3swMLtF`{ZZmf?YU^cciyhBbfkScl$6#8K!%yM^gH<|l~N$J2|E)XL}`u( zL-#o!AxKV-LfFXYy-8$G+XLPw9x2dlq(0?=`lrBU`}LVB`!4KE^bAU6sk3v!m4PVO zJg;y(mp!>1Z{!pwti6$rn4skcu=x@#MHzp0z)eC{Nt-gk8%*YiP8w)B7O!ND=U3r# zcF3g{Bq#0^=w)GiocF?8klc?8>1V(nM^QcgCJ(qW^bzBWXCJ%PvB2rS?UMdCt;5@g zGjre#`;!P1V<6a99sc?tx^5U7vVW3Z<$*`JgtwTnTDtpZp95|EvvOL0^GoV&94m#I ze}B+d=)qxqgSsG-eGU!|Eji@vn1yR>NTILdl;ua?jurX5FmFFpE=2_e&RW@^#+o+w zGoYsk1yd5jk8^bZ8OK9S5g)P!tzJgMmqY2d+2Zr<4atF@0)@eRa~| znStchkwN!2=^K2wswKoCTDGbHzlkYw-pVgC;*_cW+u_MbY06&>k`Zdk@ir@09i@S8 zVD0r3?4sVSg#O|91u6+RFVq8_qeL9^1m9rqnL%HwWg+DE9vSf>*5_YdT8;qoAi-R> z0V+$;DUi=Vtk@0WTJ{s2AVgUoxxxK+@EK^T{wWYffGKF@L*|IA-yVDHhosNMe$AtO zXK(d)R399^&n~LY3dp$B$${Y^AdOhjHKC1UKExB(ja|)``V~lGxO|-{Wj%EKiUnQw zLGY_it~>_Xc0OE?9A~(sNk}#t*=M7*M9sFN*ERJOj`Hd*)lS*pP7`CT!|B!Sxlb#e z6^A~~hd6-&c4Y7`cETjS=Ynu8c&vCL0k3jl^T~C&ogPE>tz^$1r5#=gNi-FWVApQ-_a{Px^b;yRSW3>clFk8e zOL$6zz-h~%ovi<9F$ePxHkVb-+q>9l-IylqJRfVt{$=DoP<6lP;w{+M&hqIt+XRYU zlJFVdvxCRGRU{$(?IXbUK3o?g;n{7;bo%0c*unMFHXWMQv&U6EKSugZ+#NX`nUtiU zjSyuU5$i`0kq6qLNVIOmPh!m!0JQicCJMbbSjiTII==oT`Gl@z=>l|+VZ_=C3B=ta z6o-!%;t|m(QoWxb(#7km;o1wL2t7y#`_sZ(gNw@@r-|TDRMp$b+)h)7m7f+ehXoeL$l#B<0ve@zzi z$oE*X66p{hmPJQJmBVN|qxS+e8hOorYA6>8T5{dFQDIUv#&{p;`BCbd+5j^~f}URo zD!hYiGj5RiOU%==;0Y?yg(F{(tw?n+Fq)F?U|3jIr?Tg@p%ZJhN@jdGJ z1#J3xZI`@UkCH5vyJ~*sQHN1D*}z@b5=|7HA0Pwob{2hMS2UyQjE!!2Jz>WL)b^S2 z@xB^de4M7tp1nwC?CuUdHL|gRhShX=YLt>UoG1Yg-aV4 z8nHeRuY<2VkkJRM`cEFf6kBEDD0=l`3ng&|zrgQjomc_nEvfl7g6zH?1@*NtXAf*h zBwdYoO3)%-@$58Qk~M~i3)*-KBdULi$D9z21A>M8lZ!`8)Dn1yLKRC?E$FVzixZ6W zh1YG0SJC!=EyomZX%#JuNvD0ZK}4Bz+7%_V>p-bP-%JX;)Kco_H2#8r%RT1w{!b3| zwGPF(>r%uOPu8 zGdUTIc(oiZQ8f`C^uA0SAmH5< z@L*ojZ$pGxI%j5>!1--mVC+#}O^CTwumeK$nmiP6YLeh}Dp9(oJ>+YKzM0SY zsZjwMF~(q9lsO2@U7(I?C+nh|nQaODaLrv|+X-Q9TVc#y{Iu{P2^{cR=B$VA$Q|O% z2$6k>>QG#2mXuHgT|%QVk`^Ec%NtP|EeQ*g%Jn(Q_3_PYpojU;g7)8|;R?}MV@ll; z(1yguzwg__(YdMR6nn_0H?)~nl$*-XUe%9>c!71;*Uwxj3)X*}gUV+lml`9}ssPYT$Zuh#e$utTRSJz{76yv_aeM^H)KTAFiPs<(4ogT%}>g9%g>9$n3-kdEew z2futVm*;TF{DKz5%45b%X~lgUMS=WfrNk`VSHW!TV0>KtL)WymoOInH9}H7=2C znv60=%3#Xl7|`?Pf~az5FQretxAs)jMufz#m#@EO`jiH)0R$DJlE9 zi~NVEzB~3Nn2q$wizjH0&0xG%M3x8Tc^tVL9bMs(V*2&&f)52$r#rZHdTiQE^1z@D z&75J!(C4bBG9gy@T_tRTdNQf*e+IvQo1Z5fWpqTpcwytC@t<((^-rPx2GV}Fl75NA z{yT>@%-mG=NRc}A7&7w$U%M_d%`AnjkD0AGh%O9!q)wp;+hO{d!gM$gcKnJO)%_-y zVeny^>R^Jb=#DkjH>S;Wpr#++uR_#FR{4B!MD45=$-aF#TW&BJ03vxTuf!fza#T62= zWY~bn1th+`#*sQ$t)@oUuC0$8(Kk)HwZCH)I9QC4J|K7gYMA+{R&ld3cSG3Bpjp7y zaQylecn4#5B1S41Zyhj=u2hcqDyO6z7!A84t+Xf>}=m7o*94JiKHH*{0t*4e_Em8C3Xj3MgvhC!-2qJA>_Sefc>( zJiE6v^rRs7+Q$K)x5W=~Z||d0q=r9DBXTZCEIRB?2}=JDf`Rt;3FtYT zUAl<55{f4G>_Qbm7h@Vq{!OQrfAg-5^`6H3YO|}0wZq^p7lA3Hib|m6A|Jh7&C(o! zcGEGt%aS+JSU{*V7#!<5ddo3j)1+#QN-}E$+QpvxHLyEEEH3B3RX9sx(eHZ9PD{&) zv2Zx|lLg$A50X@~GAEpB`}j4G7IRKgL$0xTk&g>sRTaEb;J_WWiMQ&umPBOGjIv~* z>Pk7|*F=7jiM(%(*O)9CVnx)((L@2TT5SkFvmi7aKw@?2uZXUqGk;0<_~zSO+s-lq ze)jR0n1iYaL0VujI-1*-w;QL1Wxoi63Pq7=8sxN%BDeYmw%n6lJwa(Q>__EZ(w_np zW=9g0h!JT#-C8N;)0M{6Mr9X!4?Aws7Y(r*Js$({pi_NxP*`*~=O zC#)p}F+o1Jn3+D^%|_kTHbn5NoI|s5d@I6hOw9>-tE-nQUR_1;9=YP?r6Ea@-d!Iw z(GvzpgH__}`TLh}N&uc_#xJY_t#8IooX zWWt63{+=!U=tX!IB8~#(oc{wxcw_rl(aqH2`#Q$!3A6R>DfwvK zlmLST1=Z5(5$#Ed+Xw+Z8CnnkD{g@a57vE{!>icPg8~rvkVO;vF!rGyN%LkZt_SK< zXPPS;+fvmWbu3QslT{G2iNrOLWx6s)R2LHumrXG4p$&`={&ESn*2?)Dw364n6c^jS zz}UQT!oaRV4?ExFo~&8BIf%$Di!6#Oc?XpxJ`6(mtuy| zmm8dgmk)Xq*USyYdYWu%j=v*}BNZJ&-8r@@n&e5{*Nqy|jN@_&p8`;vS5$~xqxt&Au)pqy!>u=w^4?KHI@;Utr|QDlKQWOyfEgUoFLhDfVG~A^3vwL~C@+e| zKh&eugsi*gSd&2Oa!VFCJRohC9VR&ZAD#^j`Vj^aUXP9F(>!jQGV0lKkJyO<{BPwmb;? zLX(tarNUhwH*Qf?(SD>l;)7ew;Z7lkn#pZN3LKv87IMic!%9U1D)rH44(yaDBuD4eIg>oYcl0*{`;o<2?iCBrkF}D;V+%^d~a`*Z| zW~16W)b6Sb;`v52@{slrz1(pD`+?rLQv;fM$J5BE1MrXm z!nq=3-w+0KdpAS5uIzSwk;2uzZ8xuZaJiT|j$_N2AL!tcaQrWBxXx6Kky>C=mlRqu zWPg&@D=j$I*lKYkuc0xdRfF0@SsT~9LwIdovDQWN@ z0(YSyGC1c|7)^Lh8269LNbwO?1D0`xWLA7ac6YSfj6)WZuI&|y5K{9KB9bAU$m#Iz zM9P&ECXwWZ{2!lT21(tXABcRy#Oldr;=!1AjcA8yequWwKXVJG)JHDJ&S}T7o~rBY zyMCo}Lh`=18OLJVE2j()B@dzaP+NoJAMc5sL*W{OzRYDu_cQW~T;`pS4DN3a!9$mM z`OXsxHU3v`BxhMtM}{u?W$^PUT{D5q>1Fq49Ov1;4(=KNeXh1cROv*^mSL6wRg1f3 z`$ax`X~t{KYV|w<6Iwc?2Rw{COBPHza8om00X=ZStmC>T$A4#v$}VK5szBe|6iSr{Sb&!WRy(-+;68UAHX_F4`O< ze-aH5kpv~Ud6Qm>EXL-N*z+lk)|($xBS^vME$9Y^CXF`ferUxJ$&zYwnZ4-h#&Ixz zOto%De-|M9+k^odZd}cm$JP(dl;%Eg=lB@86Jq;q8&)e)kKf8lux4S=%Bpht@Yv6X zX;`^$te~3ly!icX=YLXMVA8O7?O$u7*3oNR97cob}$&9k8uyAmPez;hZGf`^&&824a6#8J>^za zos)D6#$(h(mHPFUe(#5Of7IaJR`COl9gOg>x2&FOcceTp@M2 zoFw$(N6?u1=11jKdu*EQcqM@7L!D25&hwipzvy&TQ^@}diTDSghiUJY=cmhhelzP3 zLx2?U_cPC`sTgoq{24{eV9C`{9+~=H;regX^1;Xs#Hk92Se6D@TIL+x#6i!Gff33J zsV((pHTi;}n)0ne!u}s(jZUF&c;spd3m2!ea~OojIG;n)`r~uA@=s^C9qK9XgqC3F z-65LA5wtMaMN`;cQZ0X#WCJcuQ!UNLBf;jRs!E~V=K&j9I#3vji#Yc$6+Spsg>OJ*_3 zZyNNk<$o?^9i85VbL#<(lFjRDz;8kt>S*ibqlCPUjbScs~N*%{ri8Z*`WIkTE=*bh-S(O zHQDed*j%m>LFS)~pDK>jxxQ8I9q`JOkMn--)q^`3qlMjx6<&#Q&y5|7Dh8k4pez@z z6341CWwLvpmX7Kg!=0x$)Yn7lE};Cxxk4|dpH~M&$Y*7*FZC$&(!iD z&-Z4p6WzvK*Uu+$x~?@NWvui^KYZeVuFdidOdOCzdUzVJFxh&*s?|;9BMteRyZHx= zLzk`mv=qEuDCDR$28MxYnGy4>Fvfq>aVJ=qwdDSW$4er{iiu})86_1D(~{npZq|lS zEfmm^&6im8Pim1G4x6@q&qJnA8p9s1gdzs{HqsKi*>IbsgOq``PNhL=T8RD0}(lW=;A0H98SA=988_ z_OueiWSq9x9Y%`)HT=&_RBFV-MF}s#qUXufe_v~h@w<9xWyIYAPisyxAvYlIGFsAo zyw-yLESKrXZG(3^sR_2R=#oj=?r&$iEqXbL<$dZ$*+zc-Lwjrm|j09h4q zk@KeXJ|e5Y*Bsq%b_^>Urra^|p{69%#Cqn}-8}GLOI|pY8m5uh$l&|#`rCORpVf#k z{FRryc;&C4x5I_UKoJOpQhw-7`p{X9-U>MQ2S`BBy{!u#b_!aby8*-SU!+G(3_0#e zzGC2zbp=vt6PNj2Ec^j+`^x#IBn-^-ze@B8zmZJTL5;|rHvIku zVUMwli^g0<+-AaUC?d#P7AOw76kG3kToR`CgV)Hxn)bHzz7h7M|PBiL-LRiua&DT&R%Govl9WC-O{ci## zws@5w5J{}4{Ba8cPON$BxnUc4Ma559vY6=%>ypJj^Kbr*q-39NI+xFSTX zJJh;8`o|^b;Y5%mCfU4;qG+-C6y}qz3!IHrwkmxOHzQH%Wv#t!-0=>4?P7PDZ9n-< zkSk2af3m8QcHv*-(q^bSgoi$lkONYcC^L0l^xSBBio~vdm-yGhEnH7pVu_GP{lAh| zxMB2d{)c+_qd}_?NKpX%ccM1{h4p;Uaw8(F+)7^f>HR?KpJJiP!yBHmVM#_qs@?sF z|MF~qgwWiU%sXGStVMAP+G zkQpYo``gurlE+wXRZ)2um)&{ zG$7T65`rFTfxcdJ!NoyJ{{Vyh-%6#31GhdC^TltOiQ1v`<&W%kqoluaY!A80UKI43 zCx4D%iz@~`@6w15^LtzNoW&PG2mT1WIrp_q8YW|b;@8W6IgLAL*M~T5vV-i_VLxZ9nff=-=eu=Y@NXzO-LQr=i^)0f>%ZT8M#X3+0p~?%;`7d zYXoOKQm!^1f%|2`P&`#A3DpK|cs78IrH9#^xNe&RawhvpQzuIk%2du+9y^KPwX{J? zQ&;}f_ri&RlOCG1FIH>9UaDS*i;o%BWlwgDo+V(x1BR zlPTsGyX%$tvu=-vYDJ#^%9UQj=|jPzfqp{fCPZ$uK}v{lr(wyjkn%(d+JRzbfmKYJ zBL5tz6bO@<>1s(XESKR8B;R9t`7jmn+iH=AbedgnZAp(pF0At#j|=x|=4FU44cs=y zcTHIgjIpuOUb+iAJkQ~Nubj_vd$r!GbbHq7V0DJ?n$Gm;2`D%JwZFhw>$CdYnAz-W zdP6a9%~X`I_^5r?7!?s|kLdzu({rxX_Bc8Cz(MDV)RdhgC=|>vB`9%k&) z_(vztrnbkWBYm?=9+~vL#P80umHm1{MUU=TgiQMSZw2M{zuySNMKzho64Z{3GRB}= zVj8two(0INtpdNu?3psYtqW0@q|ML#PJ4SQan!2yAFqvbj|aFuAPw_xkL)iPD!lW@#TaaYq-K=d z;?n=nfv%pQb0Vh9|79>5It96&HTPHClrR5+2dfaY<< zKgCbyXE#|hKK0wd5WUO?5|@upuZR@kmc>?i0Ra+8`}(s_QZeRl1$a=|P+m))>recv zXI%ei+)oHJ6CxBxU-lvCg^DG5H4Xnlynn z@na^gLI#WN1d);V~Q__Yze;;@qEzsM3z`wT9vZFz!8T<=rw?Ex7PbZc#njaEkd{)(rk!dxO>T~SkRtF@$P%RkwpDyGRh+EB8O zB{LC^i|7qkL|0J?Lg9H!sl~=t6&ifl`F@Qo$k{d8dbNV=|2FNsh2q(19)6+AMgLw3 zmlgYPxSIUFN3J(yai9<-;<9$uAUqUkiBJD{L>=g#O~?70eX7_gB!RWbV#Vg?HsjIA z@AEim$M+7SB3i6}#WKgBS#aYqhW|z4d1lZ_kSg)4yEJV`3gX6;h0T)~2H-$DUxDTJ z*IkIOVhk)wO&5FAwLDIX44(QwWT%p)3ZN8faI4HZOiCFAO*Oo|E9K={aVSSz?Nq)e ze-6m9^1%r9x52w94^tIl-EGK>8I~j9(6H+kx$TwjT@@u%PH4`EjLTKC9_xE6qz}xD!m%E$yyhtP9eNV|uXqE8F z;?Dsj@06CeVua~bI7%gb?wXn*Ut9?|zXwuP*c&PRycuetk*>EH?GHs@QFUZsR9+LI zn#B`}xr(8%-Lc^=*?&kBkM4pd6rQ*m!1Y2J`$APpWUPJYcD+Wjzl6U3M(p;@1iS6- z*WAhQmv(*l(_^ON!{bA7p>d{2UEj&>l?u;Nt;QS2*g;R^J92$2sL5{!TqL}SMnpwn zhF2KSIATbtD_&z}s(0?v3pVu23Mdx%Pqh^0LL^vgTN?uGtDYUY%K3i@ls7bl9W<0Z zQzN08wd!e=Lv_i96kAjz@@UiiM z8RPDL8uH6-(iqwZ%Yges+A9`6sO%LQ2Hca^4k1JJi7LeK9p?6(2XpKP0Ppj-2QQWU zfgHaJTY)CLLM&KGT*QL4Cj0B!YJ@Q1$-?UDLUlMA#285*FmJH>vBi)Qvq+7;A9po6 zzZ`m1)xRerT#*)e*yKtq+H3k`4I(3_+65-e@zSgaXUZwA1uLevl$ciZ4CN@guxgrm z{fGPXnkIQ9OK0yY9?KFThNp)w9}mjy6H{3QlHhRWOxJ67i1c|;RBeqCN^Xt4jSfVj{GsXa*KXK;IiwWKMC zdTyWc3m@X6Tbs6P4edb{g->{GEG+42+PWd-R^`HI+AHQgm$`VpBeRNvVoup z4LU%Wr;!lR?U*U+WkBpur}RgRN9>D%{_*g|k0_r6iGKs49%i*D$ucMmGB*acn9wz_ zlnf76&~9B01nwymKtD>`YT2orvN;#+%Rku98;*NVGs`lPXN47&21W6chLHYS-q7s( z&NxVV>iM^XbE8Ji(En12RJ$3O`lenv6mcx_fxfupppNebe_&j0cRb*ZEyQ@`fGq9R zFPt;UxR3*-s;uG*^_XTH;Q+4E9KV&+c}<>^2`eYHC)aM&jHmIv2>-!+|DGQScOs>% z>P=cq{LR(rLYvF)_lIv&;{@I<3vBYEh3$6=sViD z6^2wR`mAA>f8;`A*>vsh#PQ2mNFk&T+SMSqZIjYU*WL$j^5A#4?ydaoW9OimzQ2k6_-YoLP%Ul66(Z=Ug_Lh*GE;7_8)$c+^>cK?w*;^+{A)L zt&#>R_qhBTtXeMDLKq>;(FohH^LqSh1r@r_gCey}K{karBUu$Z_%HZ3aA|Jz=!D`* zHG$n04SjpliQxKGh&;T2P6Zcd=10jdiL9>hT>LgKq`r!?l=%@BzU=gQPQ0x{U-n8+ znFj*!Y|8?rb8|mdCM4$PM#UDGlxK#x!V=aIcqWXttQ=NsY$o?j?6T0U=aPKCC3H#9 zmStx0Xs?!WEO+2cqPq`n256=I(oc%Jdv;)tSt6s*Uwl_+1Fg0P6HTa&YTI!K#(YD) z zuux5F0KT7y@^`m8tpm!!*M8XDfgCWAl(7Vud?+ST&=tF^R7v<}W4A+v4WPzr`s~N$ zmL7R4_^PEN?c_Q4qWkun6R5#I>)>9fWbi2zwS^wH@Jb3-K9=aIF3IxmqteYysCQI+ zzhTJZYe1!(;;m#VdX~Czd_&w>36KIA+pli%ly%CljBua%m0wu~T=x`_;9w2f?O%#( zbP#g=!E+%VSsc8%YF1%7R?S*{n<89sk78Ox{bq1HnwzL_wBM{*=yJWfimECQD~i&lqhT3oug*FQ-d zU2*+mA9j99i69AkjdgeR<&U^A!H{oDE_Lgbt*mD7Z93_cU1wxyDgzJWA8t5?$?;_k z2;6i56?c5!q%#sNwD;xiyDD-q>QlCc(4B!%D;+)ZR^8)#BDsLXg}SEj?|0W-m}j>ffxV&2pr@x0?sjwpRY8X0l@WlItu1-4 z0>#*F{?ILW9y%@b4nps-n``n6|4>FJH?Y1g*V%m@I>X>gcAN6EcQe()%8L;~9T<=f z5(oyp##HgYt{U)98nJVJMx>sS(weeYDXT*-7HWCDeMzqC3TDaV_`z$h1}+$4XVh8b zraL0I+6|nq4y4U3_+?XIo%t{THE;V{qOtAKJ-2sff;`xHtHJS^Hd%NDD9t&Tr}I7` zdoC1n%BS_P5$WX>B+pmt>prCeHM+B0jny{zT@GqIRpOw*@dSgZSX%;;xbXkMlz0&DeGD(gxM6w^OA@z# zWv9%wrjlZ!CfU0NXNn=x_cfuexllB;QY!wFD8hqI2?R>5jNm3NWrmtM!;L?L5Y+9> zBYRVo-+`M0feM#nHuQ4@38A(A)KXkhp_tY@lxZie={FXr%nNw@e&9&Q% zRlm;n^8=Z_txyPPX7x456BGY@A@J3qd4A_2zU9?Euk$QjU9pe$d*y>sZ4X<2yw50( z&7*q1M8#}l{=U<@kXK()JhY!yeTn?7SH4NaG(J0|CvJgMp?3_-kl)b z&gI^^9p-*_6_^BDI<~F64+eZ$2FP^Mv|ZsZ zg>T$h$ry@yy1|DiA*`5VBXri>Oh6qXAWiS_JpC*gSZHp0ta<0ggVKF1gExDR49yQ| zGHYd=5SCFMK}AXVP8@nO#l1`3mXR8L6=nCzc3?Z?J}BPs(5~K|eF$3v zDszy`gtZ%4D@1{trfw$YlrLhybsI7~vx zK{D5ET8Am^a_=?HPEpUHEbse5fH4r&in`f!fZ&@o?K6#ch#GbP$%8Yf;dBF@JYw#4foY>io^ z9o}(qj6WKfn9X}Ff0<`DjQlfkA7`*jqV*DsV0nYnY10!&G>!H?GdEjT>?lm{1S;e^&zdaEuM<5 z)TJ-QGNKxgMF{s^#=Mw17?m+-7cL+upoh>E>omd|y{j|#QcQ5xb}N(i&x!2?T>t$C zBDF6qN$VN@ze`wcyCD$T3n;S(_ZU5Ps`Q3akC+Ug!{_e^YeD*iZ25GbMG( z&U2^j)MYV`lmqYGGmJdr*Bk+0K za@Tk#g|Y28S8*T1OZKeP?DpvE7L|F0I|HJr&=m1Vs>iaEMCK&}rePrkoTE;@1)$th z>nb43ZZNP2Ve}EoY5FwrXbj!>xoKF(E8kwvgD#GOvAm4X70mT@&j(Yzxe}J-zDHm=>$A91WMD>DJK3O)o?mkSuZ+&bFJ2+!=#7g`DBbbc~X)8BHDcUj59eRm~-By=B>#A$_HsL`({oF58{z<#wqI&il z`p(Ghr6U;JqU-o0VkK4>0<%1e$ah)PJzNan5vtyJt z(|3GARmQs-VMqP50#O@H=Elc>-|6ukm3`3jMRTx;Sc~h{;Ta=h{*>a70nvQ*?$KRG z+xH4COSF0rfa5NneK85FG34`Oc=g)Z9F!Q9@3*#0;XQb@TCr*r$iT+`D$Em=370XM z{OO1I?zGcKeSYGw~QFCzw3A zR_Gc+Wp5rSqI_cg5U#@8(HG4`b1Ng5`$}n{d$brgWNx@knx{)~@V2D!=rupmwNJX3 zZ}E=!geUq+2mfesu}Ke(II`8-F04jcr?N zwzbR>;BS{}4R+lS4NfK7`EJbv*MF6#XwdTgJ%Z}}R|F-20K;#kK$L*MuA@8%En~+& zAB1Im;OA{+s;M&fg@1|7z$5myZL3f`K+yS2n2Q z3*4@T=9UKYd2mty9J+pHrTx%qE!FH$?GGoANp{eTI*~mQh>Llw(~&E4MYX%v@AqE8 zZ)_$!YK}fDQ^sjP?iY5+4csf0T8IhjsKS*FP4}cJtz!ei>RL^60SGrCvN$}!`{kuO zv8l`tAt@iOumVwlLPO_$h6J;EqN(Q1Eg$-2GH|OOiiH$3ALLXlvC|I~Ze}6|EM0I4 z&Q@=@Q1QA7+u9EDHNh2}{mH#8@RQX`h5Ed1LROOZ!sMgQ<5b47pyc;Z4+ymVna*-rtnU6q{KRAtuODb#B6;hu?^EfvfU;`u0yo&rydb9;6&Uv;#@dRgNv{IUko7-4j<_Dp}`vZ=PuL zGF>GxH-OL5gdd{6oX<``Nh7~qS>nffb-_+q7J82(jC|8jc0Kh?5`r%wT&5}j@ki0{ zgHl=Bf#Z0;zywQ90UxR+r;VA-FHUGw7noh{vMN%0%2S^Zn1kTKQyHgk;E_cI+|v-M z-?ynNhHtjUsz}O%;j=F*^kBLhKQwqxd8$WuFXsrH4_Ri&U5#*7<&J74<$ zkFKu_ifdc9#a+5_f^;_;+(K}d00|H*xCaQqA-Dx^yaT~4Xt3a}fhM@SySuwQ_PKlC z`|dgKRn4kZ)xUbKHRq>ejIX$5(EUdQWcf2k*X5hiiGf64U;T#zXXBfBet=@givJbM zceM%ac#2TN;IKuSidtR1|T}f@M)h)nBE7Trp92^wjFN+m0V6 zL4qU}Iah891w#8C<{s)h!tbi39;|l!d0k!6WWC;p-HDT#43Gp!vx++5Q#vEc2X`e*Akfc+eed@VB3jdTC_DXHcr%zo6 zTtk7BcmhDA68Mi1cqs%K(%ieE*T**+F4mQWusEB-l}e-NgkZq(%d46s&k!hh6w23b zlAG@+`}J|` zcf8sBqtSc2`?PYTRY*GUT36IZ90w`)#VnK(ua-0u>;VfcD%cqP@D-CP%w4dwP@Z=8qZ&vcE z57tetrtfqW7H-fG&qXL6+F87VO@+$zf4esB87miTn#$6?U1kb!$)Frx^5IX6T0>|R zGi=!3U@B#6XmEN=E?mX&y?xgzg=2x%_KcxR&y7I&n-3%%{MD@US`Z6rtlHF6+TBpy zU5q_aX9sugM9Gd|QQTQD$`?oCho&TIc@X!>BAdv-BUj9_zrCcv_=4-#)BT7Pm~$iw zm^$%V4x^Agz2<-^@cnSTZ+NDuI%0iT2-7&;$HSA>u%T{n&FLt+(unjYj>Tyv^edDg z_PQmIJ751C*Jz~p^X=;68vPt6NJIXvye6&3qI}3kSC)Kj^K9aWctTaIGMX%n|71m( z(LEhWkM2l25&CUOH2wW|es`1V5l`Cx21%mEkJ0>j;E-P;<(%%r8anf`c1yno0F zXEtlZPZG4C8(ed4`mp{Pp$lPb1+wSM$CemZ9f?&^KW4A^Wz?fl*YWO>H-h|4>7CeS)HjI%K^Kp(45f= zJCnBCmoKy4)avSzaQu~^ra2@dvzkPYvzd&^3%%|Vd@SghB>y-Yx3$Jq_rZ9+O?aZo zXfs2IaLa+y=>0woQB7lsv;~(f*%b;gGK;Km?nGhx@KwcW+i1lo^a0QHlUGB^$|wp< zirGT?cfi(z6!{0;rT3OE%I7L?5ghV|BpX1yYz;KMPDn+O^O<*59c5$ea4*KGkUx4s zviZA02-C(Tt!J9#_|DWn@p~=jubo+fT5}yP=gRIy@@${rC2jmqShB;P7V1uSJ8#6r zd` z?|#t>H(A%k)m05Co%Py+kgv~Zgw9BxD;r$3u$z15iUlr~*E4C##s@B2$cIs_ zOT~~N{4^JA+pGaoXEQDwP|{Om&An>0>n~M;mw#JqR3wLe!|0TJvPoUH&lnU5;|IFp zBU(vZ#<0j@@tBV2Hpc` zlmOd`7+%2MMI497=2J-E!llCiw7U4jRIXEZ($@dJxA`cVYRqXmQIj@D@I;}GXIppO&@gH2 zbK0J|!f^OBk^ymFUhF0h6``Kbq7pC7{oE3Ei+9PlGy>Aqw0@;)clwcKPAVe9+nKLm zuiD@mjQRDMw^|L0n8cC^!#>$)#Co4PB0NADYE*0^W5j0wpYY#igJI^ z<3zIw7Xb%Ve*idCeol5;JYPSdp3Qr_)#yDroKXIU_(~)DBeP9G%bao#*UJvFgimmi zH#B27{hD>|b*%hGMI_KF!Oo#hR*)pXCo2GD_;YvbDO*1N&y=Vd_oZQ}1ffLzAVWy- zoqg9;c^TGr=oOISp8LCTMPpEMqd!3Gt6*7Ufzs?`Z0 zS`nLPxTDP0c^>yZmzt3`w&N=;OX&j?#d9JIVp!X*9eCkdhnewXn{B?n04DyMs({zc zb>3W>nc$o{Vi^)k86>l<%ML@QjjK+4GNLEMSw7h*pTINs8^viX+UuU!g2GJYc=lrC zn_Bn1!lDdMV7oag@PpQUY1bYCZL_;zG~3$R_3@P2GDZvPa%IgAu*)>xMG*^$UO)@8 zFFIu~s#U=Ul&)M8hRLBPO4((6D%MoKm#Qmxp(gnm+ouT=bt6n#?VO?!h}*7GL5*sl zZ0=IH);-bvY<=4sl&3xO?q$*;zp%tOlSVCagEr`sS-{y}t( zd0(O5GeefN3i*we(W!xF_Hl-#L{YnOxu{L3;@G2DMUKp(5i_$R<+&%3=q2c#D zICX_G6bH$_FyRsG`Zzt5{ZTXMj)6i?hM=z?2N-VFsvVb>+bAjfWBJEJkh|*@LQcN( zCs!uDEXOXZUHS!eWO8JPANw;p+XCe>(9vt`F58lxs^OKm@fBSS)ya_r!>3WId`yB6MmXqcrjA{p^wEYxBiN_vLWR{XBw7J6EUx(rpB)YQ4p!8n)_uet8T$S2uV>_W z7ofi$Jl~o=dR_)28fllq;j1bKMaCzwc?&gs;{!A~qu6U#lJa_nZPjC2%3XS?X@e<< zNalp*MLN*~H9nht@hdWUX~T@Pr6~wELUx6_yIYjuo|Qt!dfl>V4Y3A1vyWy(7p{D* zcYE6*npbh;Yx0B^G1lnb8J`W@WHom26JlWZL z(;t>IEUnJ)`6WjRz7m6tYit&M9pigOYUz87x%lORqJqYgoLy~_lfMW8KC2P#PXUq8 z)@?i8&y*B)rdCi2#W}Ci1%;NgPXE3HTKyJM4#J!Z#&V8RZKL$(L6dD+Zkub59?N3d zgqvv9wYJKipCxi~5A!UkR+zUR{?sEye~tXvY%I~`MPXW}a$)lhQzuM)?E^f&m{O3i z>kaCL1KiU?wBaKDwpRT>)M)qq#g`$JhdA0GtS#)kPPDoG#FqO|v;zUI=Ex3AN=6^n zG1CyfIi2SKu0%ubpZW)lgptj`r%IhR6EZ^_mv@>*fn5~8im`)qQz-nJL+r=CMUa~d z)x^rF<5I;QJtXO>s<&o{OQc<0B}@AL#N3OPupQc&RbqMP;4dyfTSofb6Uk8=kNyO$ z)=AV2r*+-z5zR8hzF7zTB%P%q!unY(3~x`H^^`LRZtj4XY(e-3V3Nq7GZF z6K5<)`8KbA?@Bj2=>G6nw3MPQ=1be|a>jl>)`dJm|B`V`;0BSo2DOo!CvV?d$p4kJ zXSqe*Ag`7)k1XF;Y3!=x;3W7Iu66YCkiP9&XQ`pU?M+*u{Kc6YaFPH{=E<>p-pNn( z1NRL|@ha%EZR!KIzL(Z?2YIb>Cuxmc+j-j!GF|{maL*Ih<-P8up3l=nN|XCZ*ga7y zc17{EfF`Gg!Qd@f9-|Yc^VYz($xKM*mb7_cis+I0yxx3hWnbO7KpPV_Csofc-uBtl zk}BQJY~#75;eoC%X&c9CF)sMfIW_JhQ=Uxw&O#o;h#^#+dz!cXg~@){VOPQY+2G=1 zsihxGD{e!>YQle)m`5OG&Km%y-xy?1?OB1k=t9C0QL7GY4z{4OTrDJWow(0-hK)=T z!I?yd=U)}%0V}9{YXx7gA4%p(hK+p6Qu&|x9lgYU3z^fgFb6=YPgT?wsIwV033nxV ze9s3JUrc?=`N&6}#cg}DssL}YEq22br+xF|46_0@aLDgI| z&%iZ&*c3clB0_E)#{TJp(wm8-NQ*HedTseUy~EzGo_cDn^8Re%1pY#_VD>RbjXWHt z;y2|sb}gR3_%b3sF2H1$p`Xi@!_saPF`&3N0C0@YH$20mp9C5ku(Bw58LOOttY7e@ ztKKBXR`k7!aHbALPMIktDBN_9=uEA^r%mNHHGY?GA_ko);!NqPzbhBp!gX)4TcU2A z!l2M4r8jxCmDcODml zaG0neWQ%@HC9qHTjg%*1w*2vHCT6Jd^8`J47d$c*0+Yn6D+?(-)$VZYHJ`Mov*4>K z(-wsz9km9sVP!b3j`}mZsTb(i_C5?0Dh8Goh%#l5EbHXDj>KJ%g56+rr5tsJ0vgO< zcd6M1$LRNfK?mUhndLG=2F-}j%S`hC2V}REU<@qc@D(}neYPMY-Pkkd2FJ|Mg6pQY zA9hEHNGE?|d!)V9yYBlvK7DDv#`|;`;`vY~Gt*hhbgkdezaY^;{jl5KXK>v0^B#9H z=Qg?2=+F!Qu@@|I+<)I(Q$xjb@eJ2dT;nx_t|=Pl4~C|c^Ee2PXD~D;cHyQp5QRVe zTyUFjTDgGULsz~~3Axbq+tuHA4wM#%YkhS6*q|JY%N^W;;&|$_pTGlHM+X^s_1oya zZ>7h*W0A`ifyXb@IZ%wjTRqdqIPEtAaJ4_gc+rd4YIxzKuJ&k=rv|jlEFDmZEm}Th z80dbvU{1T`cef`+{v~zoH;ZAo+_tsIpHt!3%{qSJyv@xjVptJ&0ImMj-!OO5qv36V4r_G8f_JGv^%|!Q*g=Iw`OmpImAv&1EhL;yp=#g@bg(Yt2ZOuj3qw z#7ZZZ;AbjDQcOs1$8C$7f1(^HW(by2fQU&%MIm_B__Pw0rdlI_u>o(#) zH#J`LmHyq%ILBb+isBTtEbX*GNJN^a_+%FmP*{DUeUez;Qx>DUWO(N&p&by$%6b1O zC&W+U$DN|lyQi?_<|Rx($*<<9$2ZN0j;t8pfk>1Yk+8B~GVY5rXg9CcpTH8fj5JFA zUMTI=ODq5?zlh~ir@=uHH`}g>3?J0QpM!_mFP3n4(ePitc)gy)5&iK*cvLP%)E~io z(_OHgUWRj8r?0Q%)dQ>`TMi3%IPRMP&hxORvtW9*Y6fdqC)?gtS>Pj4&F}6qnyUTe z=VbXFEpJgJ(fi&_cariQTVAA%yjjM@Uv1;FNeVY>#tiOa>qsbs9ouRhZ?b3TYW8Gu3gzo`r(4z=pb?=Gd3WLeBtby7GyZ|lHuTXjSM(U&?DlQ8&}<_!MfvzNAL|*jHSvlt zr&NQ~w?pexji`+#`4!lVzfy)O2P-eBMXI6Tnisl=2*`UPpxHU{Ged7r%k>X+3u`j-!96Bft)9)onv;JL#bGm)D9&RhR3|%Ynib)n zT@z@e@x{6&`V+^F9TeQctQ|I)Gq#M8Z1UNTo)^?>_g9vU+|ElQ^@uWK{>Nr=+bOx} zO>hTca>+Hy7bnAEuM>*I{pkXo;~KN$KEfc!4%N2N7tUJxWXT z_82^tKfcw1R3)=P3W@16Khi}x{_y69mVGXM|8`ZGPo(7E;@DB+aFM_- zI*sWjPtC=*5Z}1&SRk6`?bJGIeI^jdWPt-|YJB@eqS-sLH^lA%7g+%6^3Y{0kK@H8JFi?5d`> zZLuADX%Sd2$;mp)ebb?vxo)fU^(u#356F!KP?z|+;cpujjXd26 zU({jjY)UkB$|<+|l5}{2_;DVe(2di&BxS|5_@<(t!_I(v!ch%UDMUsIQA_~@Rm@Ck zH~zivPmK4rfkdlH*mC`j?!F6}^D>|01THq*w#N`wbf*?iP)jRG*_RBwVbl)V81G~- zrfjwF&=%W71M1Ge6kzYAm3P?uWs-y5@q_3QZJj^7Vm8ubp({<9y9=0HC_|&T5+PqW z$BXD*X4__(F~eRr=#23ub&d+}b~MafvuqAoz(;8YeDbkZ$G6pYW0)Sjta-*icYQ!n zGtQ0klsIHTz#2ep>q!Y|qAa}Yx}D^G3f&8n@-Z`0n8jr#5enBq-HAZ+`=Pd^TVpgO z+N8bl-CaB+>0TlZc=sw<;J2l+!|iKVx;Z6Jn-Si6cCZuTY0W`FNkS6sZQZM1_+fLoc zYis=v)>r8J(afKb3s*!|K}f4jZB^`P_>h}jXU4WOneJbJMbg+GSt^)GL>#~YPtK+p zQ$2(m%5_~BNIcA8qWcTex<~in4$?GU*p)#v$l8j{OV*i_`SQws%SJa%7 z7o{XpYOv1ufkwAJ%v?^BGW1CPSvAX3TrTnOYjMzVizj8Ec|;RO(23e2om>6I2Hy{% zE?l<0nGl~hqfg2J(NAvOpqZfu&+G?Rse98&>^|D#cR}|1=lETk0%dM8rj1@LfACJs zE4)Lrmrl!O$bcS;vFg$?3S1jd1i2(8!RFB%IJ}{bJtS$G8r(lK@A|qHp1q&J9VbPA zN@pRYhbgy;yJ*gMz+;ShLuzN#($%Zy#HiJk>z=FGsXI-0ZM`5`YWtWQ&VI)@2oTG8 zl(0dmZ~C~?!0R+G+R+;4;9&O5t$}adUp}!q=p}w(!f)=O1d( zn;*^-MR}1SXLU-)=}5ICbxwmD;!0ph&5`PB?Ur6VJ!6l>Z|}zh7U80}JzIWPKfgug z{5VfP?^(@ISm=SN|8dTZ>PyA`*%I#PsZtGWOFjcPS>rMC57gK;TCYsh* zfo9SW@4+`9A{fTsLUO9xtqX{$qGOY{PDe~as;4|f`pB9?#)pyw9eU9%2C3R^A#dlb zx#I&6wAD(;l{{fp;7Ixlf;8E^P{ z!9%z6oXX=+lPOcND5(Wwq-9g_{<^jzwt4!j*Awwk;Ko_!ih?We{lH?GNtC|+@RnP! z(R_uI=Np@`tiE(CW^Bv&y;Uu|kJ_S6rRoi)OB-{Uw05&nAP>~4qw*XD>c%f^`z&y3 z!JShNxQC;t#~#~-gK`Z;9^&0@iT>byRb>5*k;69Bcp8skz5#4JUAm?Ap`g=Kv_byG z-?-;h!0+l{JCaq12^biw!D$SKrzTrderrXLv*!-RVTGyplGoNT&rqeWjGe*8?0D zOsk72If}?U#y}r|>muDLfSA22ap>HW#B{5&WY`Yh$32HGbby-V=LhW7Zu6R;oE8tBG=a4a1Boa9Av|T`1PhV3<;UzZ8yQWcKS()|HaLr}X;d_E?pMVm* znAdLa9~2;T88#&?NHf%C?){}Kd@orwK$x1&L%RcWQGdaw+(r*#)>=AT-mGeUI<2Sy z=N^8gU+Q`Q^^N8!qA~+A3}0J^*!$o`&Idkv;A?j2PT;K_Klk&O@O$Qpvc#ba3*TOe zg(=D?MgfIN#(g`sEK&r39^Yx z93AIBgXRS#oG|2o(FuHXN2lEhHm7M(&7@6A+4r4vklM!UebP@__>>P48Psk&Y`}U1I;v_rg#33g6j1xAHEX6(ua2R_G~@40zYI{tJ2e z%(~Tiuhjp#j69G$WTxy4wP9Z7EYh3@Gajind^(fgI9ck04cjO0xW=eqqAF1lOcP7h z5rBCn!#wC*1qIf9maq~N?wQMTz4ox-_VBI|LLw@az;7%|4A8_4MTo{8KwAqFnFY#vW}lou730HDGm3McpQZJ{PQWa>RK zQ%7nhz?!B(9a2y$xk36=0dvutxagaRd_)F(0lLyL%*rYVUh``xkaQY zWO|6oHP$et``Q8pjj9HRchJs&Ggi6d)YUDm#&$gMC>vLkR!v61_aRh>R;hqACa-}6 zd({^Fo1!?BM>Zp@u}H04tX*{2oOY3@4%_*G<>?tl{{63#Z*AD0A!*+ObauN}$H?*p zA0(3TizCB7+Wk7RDMHaSMKB_;P=3KxE@@^Nfp60OD;ScAF zUfA^bDC&}O`G<5q?VzM6<4QMmPIT?_mO%=qUTZ{%pKJX}y^qRZQJo2Bl>(&n`nx+L zHHltw5st4{L1&{O{y**1FNl7@@x44Q6b|)fNroNOW}GDg#9*&CT6sa$s;|XN|FGZ) z&5VTQ=hpcMhY*FwO*B+_KQw}bM>y$6P!+Ly1aU)2KXbn~)>%r=3q3<0kox`3*JyUg z@ypc@iIqna(eSTJx5y$slR}IKQxoufJ!k!hSFS(%mhpdi>l4%o@xNGPY(>lDWsR_N zY(SJdX$250_s_(8niK(McSG_n=nrU?W)8W$AD2^0C z)iUP<(_7Mhk6GO4%i6Z&SEl_L_T&Pdn)RRAY*kyvtCqRbrNbQuX%@o_gD<_12zNQ> z5zNwmOL(mWZxi=d|2%nluUX2TT2Q;oR_M|*t_$3rTFYw@eZ9!2gH}g(P_};s%>=(dx3n*<6SHY1PU-{^e8D z&d|5hb8g3m7QUnO6{bEo^}tB5h#V?`bzn6qzi7^#Ge6(+e!Coy%Pu`%D!F=R{rxRY zin%p|U=!Mw`E&Ep+V09f*jPnin!CT%Pg*2+ceS`?q~-uymt@eV%yYu7?DNlPQEcTm z3`QIwSA1GFSEbLqSqpXNLw6N<27-`SAdtTJ8Bq3~Zh8ovla`I13(pPjiHo?*|A9d3Hw)Syzb=w|;L*v8Jq zFRR1tUeU2X+YtA^DZ#xMhyZv73KwN%1V_L&6@nvKpqi}-nO!DpoBwfr;5Ro0OGb}m zG6PH$*O2Q_egZpBNx9qL`fz}}BU^&0d-0lcH!+|zcZ2?T33H?#8<AVQ!#P)l*ox1l<{GAwo z-Sow^kM@>q_Y`>lP8-IIL3PqhltsZ9F;$<0v5t%$j~&I?$2IS4E7st1#TSY!3b1rW z?p;o3XhF%8DJ#*xf~4Zh-sU<%SEe7Q+P^!HEOM5X7i-aVlzk2#pm^nSKAX=P?5;{U zg%6Nxj#;vw?;xjD?x@9-)%mr15+7oICOtJ!(q^mu3FdW3f|QJHGOx}0=7#9Gd1NaS5=~+{k&|5Q3}W?+WeT;#2D7jLqo__6WY8?@_MF zYdxTxD#}rG>;=1vw5)-te8RraDLv#+?a>5_1$vQYdGZ|D2CDhbgMbp&T2ZZD`qZ^U z^Ho)%KFn-%e)2}1p_XoEjb4@4q|b8YGC zGOn2^s)+qk2qn6)FX5UZ%xl5o8z+>=+?`I{((LioM=)JJz6q29)xo*lxMu<9lYN~m zb`)vUw<2DL2ZsF5*VMi9VOQpHe`1|JFFH;(@YIpfy?fseY;^0`kasYP6c1Qv`t6og ztUyAND)q0URD}6dz3?WjK#}x6mB#>4^LT4go+RU97A82q3u!_K^`u!RgejvZY}e8poV@b(S-5=3OKUwkKs!It_g?q}1D0WBG%1uBIv zzg(bxX)Q{ZZzKUT!j2l@7no3}gedGkY>kULAF?8PdSygwxgM3Zy_ zET3F+J_p+O@5rsV0)0pVbw3UR;UK9mIh@XS2+#ag?ikmil)%vd>hWX5PUXgG7banD zl=}dl3jbX2-)zGFcx;QJu!cBsD|)>jtT?GQ+~?h=->zUbr(+EtAnT}zHP`qMW{dqp zHaYOi&|U>)cOfI#l8^;z*oCCyu)ZbhcoPzZ2(Tt_1?#MF)$s6a}MX3eIqJWd^D|a z_p_sruQNo3r2BMT8e(AX+WFqu>ZDDkgbBM(W7GFv}8 z&f$^5r-X@53G6;$1g=#t3Av;;hD)m(b+9<(*+mpq?IXU>?@^8U$1ME2u=y7Xq~3Re zx~Kt3v;uGZ#!eJ$acUdZ%?WCP6km?+s5va$U)g^bd#{G>9*h2JrojFH9YEBXF_g1od`$~ z4%L+S1I7-L-O%)L3hZ@meRo{zzfmwW#C#o zzHEBPyWruQE&4Niy@V9h!=B+DF-E}pHt1CX+0v2T)?+)cijty(VvdWJ!b(c%9CZ>N z8_xe9ANz0du5B|6t?S^_Olxdk)?}oupQ3e?+=wS+kK6p+_Xo6=D*B?i+tYIE|C zWBd8p6x@+I z(}U$*nJ=r0Zx{KC=IxA+e_p>h^2krCB8wVEbv6mqko$*A^>@MXe;xpOr0Px-Yu0_O zht=$>={HDE*yV^HrWO2eBhonqRAV4NBD-kyH1TU+x-o&HDTK+;pD%d_xqPL$T+3uA zU63W)E=R~?5X?mm)<_7f?`BUhT={^R5z>SOk&yFkIV7VSU+K6XTG#G&%eiA&r^EQ= zCog_G7Xc3FSY%4(&)bM6Q5N@~r<8_Ky3Fn8nP%J*5>%1eGTk{cpJ(yb8d}`i1xQOY z#klz(b7QTRqDv?(-QGziL|KN?|5}mHaq^0frNA(|#CZSG@3|Zhp|6g0z4fsTH@>=Y5!fn?>&=}qGFqFg(tju{d8O-uHcU0t2 z77)7D_W2~}xQ({B=o+apxwk{*GQNq1&(_<$tC)R3Qpxr>_I%3D`VK?Nt|^JSrOz#S zGbI-`e=q^Y$DDBG}?E%hO=M}`9@lZ4_+W0C7TSXl%oKF!93_n75a9xfi9iBbZ)T+ z+N6{4oAd*wSS`f<%su<;VS7HUTiS7kE#OuJ^F&vQ5S>b;*UMFWQu528I?AXHfANB` z*0b-sF5C1ETy&1Y;6em&7_xnWltV#Kh5JE@Qz}E$nZeYeN$3SgO~w zFH=cQTm8LA97WcNpB2~*))!sA1l5=M&J$0e2|rb`S<{b*%0X9F0nc-h{*hJuUlvh( zNqqU&pt%t(CafK6-QMDTH{wgI+;Z4_Z2O|Iy$OUBg8n#Ujafry8VEgs%A*zE8 zvm1;wmf@2p20makr^{%ED%m}=KCeA=>iP?0)Kf>F49cPzF?LgC!_mROb@tvCB3CElK={lM1G}E{@^fP{~mev6(7b}nq=Zbx_B zU(bIqrAU5E>rMu}N}??i$NFzstAC4u{5}EYthL&P2EI+V8^(e%oG@1Ps$um=JUD&E zeNicKKK{&_mnN%l=t_bUksIr3h~zyALw$sdz-hw>-2O*pl=Iq=Gd|Y!fw+#Xm;*r$ z$?02+P+_X{ac4d`_AVE+dSVIS&T;thofI@7F^9bf(&~4;u=9v;os>>ec=TyiG^{KH zQq_dJ`YrJZ1gQ8R_?&~&0ZW|r-_)>xYViqp#eI-6iJO+#WD&XwYVq$ax9tLkk?s>< zERd>W^O*#3YQODHfPY`FH-?Q1+9!3tV>RSefB$;kKe#YgNF{{Q^zpeki0^mKY|+VT zcIq7kO?Bcf=nQD4u!UCjL&sxH{_TbQcWn6MC!oxT31_wq5-dRwKsor+oU{7_rKjO+ zxl55q&E*8+X>Xiz52B?U&R#b=!P_I$b%y{;3G#JnoUr4dGh$zz@Y^~0wDh2L)5!3T zeo>&LJK^sUes2YvuSgAYWaPb3ab`OB~s+nvG@d7TCJ6YKz;TEN5~yWY#p zKzRs#uGC(h0Rd6uKIbK<1nZYlD50Nph8>I1fb-B@m9E##2q)1H=C-;$cNpBEn1E2{ zP3hNH;`0K(`CHenJ$gXXLicpR*^m&GFzy=b$f}t~KT69L)xRm9|9OAD;3Iuh5a+k2 z2qjA-vhO$#oY=6I#^Gipm+CckfWK%mj)n*lFciZiS3kq9!HQ@E3Z+t#)iU=5fILNB zVs!iS*!~AT5%)T5Sf?RcWqH4+8z6J-HMWni_7IQzxP+=e_YNoBjN*pgw;7YZ2<-cwJfZiTZGi`t7={r-q6sU)7EV8fM0FqR4h*Eg6fT$-Hs|3`g zBP5~MlUHC#zI77Sng&T08Hy$v2~Bf+VXt}0Xy!pI&Mv%q65w&|8I5FTVyj5VrDKwl z5SP}CN2;ie6s`R!Ol*Vw5;}BHaB|cu_3Jx3R9R)oNf8@^CQKoK0t%j`Gy9gi|0VbB zDBaa!(%IAF=A!%&w^PD;p5ok*-tXER2R+g{4%Vi#zBOHE4 zxkIRIzBTk^IM!Z6nl;!#tV{=@`YU)E4-`Z$~-XA`}Z)1uw0vRu;i#b^v2}dJ}Du%a*jyiVtqfb_yDD5 zuHq8Cl8Gd03v3YO1~h@~KWj`$vJx9eA~L1;;?N%~K*gkq{2Y*0&7c{Q!bmEo0c4>Q zdHq~3yR+{k+KxP5aLcHt2fWPE^SP5_#u%M4#8Mr@^t{!g{%U;fbQbdRPUs=6Njd3> z6!-@^Kr_BIHBS?N^WoDAV7^nSyuC07LBE-Y3Maz6|G|g8UlVz z+dFR%{jwpfiqWZ83?asc)P$)|o#>cQJ0qD=#pDxXhC|a5hFX9E45350xIq}5 zYnos7eNF4GZV(@FA=tqJF!S+goH6|-T6tBzhbr%jQqI?`dwi5G8c(x&+tm$9jkx(J zE#Si>?L{j5?MeUITH<`DdH?3t1`19F#mIGwiu$yiJF%M}XQfI>NZj({Ki5K)rM?Ri z+?y`jVXu87=*Vc>0{o$p_35T|^-14P=uO~m7q9DfmW&D!HZIddt6z-gUE?;lpfvNS z{dF}I&Hed1yQFd5E82K4BEi2ezi)5AY}%pQ2<~J;Wp7!`|~*v-ZWb%)pepimjN#HFa^h@B=@cTGlo8oN6| z?sj#>KUx4e2R}sVm3v!XQb1M)AUiQlLQ%PO)W9}gp>92C1jCT&NH_khy8L^dCTkh7>eu)F}HH?r)!V?B*;6W`o%oBCzj1B4pl;J1oB&gWyYdL3gDA2_~sm|QLyEDl-g{ zm*`|Td~G1kda2K3(LWlG;?M}$ngK!$CFYA{jNJ>R)aNtX+i*pyR@)7x9XhY9GdXcy z;LwR9{rf62B!r=Vhwwusbacqr1JJN~!^1ns%Qs$d@le;;W9dYpRI$J4@#xq>I<1Js z>riTuW88&e^ghg>O4Z~(-QTLJkJ?J@$ELx+CYfcJg&@^GZ!iD+YAk2WI^Q)3LOy*> ztLRm!u;inQ_y;NWHO+-}hY3x-p-L~26YomGS=TWIUB9^3$PmW09tCWZ@u0_)$+V8@ zL|fWdH0Fam%xOcRqewwr$KR`*0Dt%Av@6@baO_c7>K+YsxRxM6!1I&`bd{E|xL|9g zRR*cShbf2;iOQe_S_T63`EN7o_A-~xd{@2hD%J1zJBoD}t)c&6mY&ba4-XVo)79Ys zedYJehVY# z&@UFqknKMbD^504>KF+Ja7eQR0&44)Q^<}TXD`XAD6?VjK0 z{Yz1N?{}K@?`WXCT7z$hGHsbnv|gGIG%!ZzMral*nYEZ$?(o3PN5JpsN+gL?^yV49 zV<~6;{t4U=9zt4y5}RBae6Fa?DI2|Gqy)bwXq43{_{XQ|HA2rNm-27`7E|d z>H;@L3%OYfiN}HS9OxX=`EAAg`Pp%dTHb(*#XWr&zShnsvlhF+^|6N1XKo;o`-O#g#cgsKIEq_RCOI9*o+D7nc_*)1^YG=>K0z?Vri1^S5_JE!M7R)E< zl{4T{I6qLOL$6$m=%jRhIK-dNA`3ds9mNKXX=(I_2Ey5hY~O%Zqq5WiPznaibusWt_6%0dY6nxvI zrkf*P(zK=)r2xq+ieJmG zQdNaa-+iU_TGNErA38&Dbp`g{Oq2S`Nf4EbW7sj%if>H4@qw6+%D1P(aj$G%R2=MM z)b4h9m7XUQh`F+RSRcb_Pw&?y@?xrl*GB3Sdn)=WTzDcv`i|uZ(pNuRHlo%gKX%}wc`KUM=#^@ zYOcd7il}!|{9EVTWZQ}Qx{ggby?XGs#WCof~*zBqQzq5pWeH4a*>Uf6(jCr}=KAGIcWVwIl$vn8} zurwov$^Of36e=(C&wInGCw+gI!l>LxEhBY3bQt5zG#(-|iGtDHjkF?B)wU z3Ix2w3B-B{PtRD%B2JY5*Ola?Ly9N6T`kAab7bKq9^9Q$i`Rbzb2JuAjZ=wJY>3In zl6@`ty!BEbnMnBxm6ieD*3es$rQ;Rzq&i+i_r0^TdS#?LAwOCU-I4c%DvH-7l-ZF& zsHGwqUoYO`wg}E0tDRfMa=W@bnv7uI2{8_4{OxgrC6{0FDhhn&NtSCjZ}U9U)5d=p z?qwZX0u~Iow^%7X1FVN-_WL>i6}TB?FqFCc8eQx1Eb&A;GMi@1`J>8jxyFSrmaCIN z6kH?|bMXAy_jOUK8eV;pJSDMU&G&44ZR5`UGQ*OttQD9jycK*K%vEi%maq|YZ6-*u z6itgxwk)%CimdMA?}6B=r=h+yF6{d!O}^`9sLQT3W-0p>`QzKajTSMXy&5JJkZ1Ya zmtJ4fe5ZA>Z%c2!O=H%jPxU(sH5JQW-~9KZ;_^9D^XAQCRkZO9`Kx^J#ri56zB^fL zAf?3r;p#1;qENf{VY-nHX;1{EyHf$_6oxM8?r!Psk`M{$W`^#Np}V`gbAWd|p6C4j z>;1wf)|xeU?0v<)<~DR!qS6e9evw#Q-kps@ss6lcGmzx1>vF>{@}S>ZsVCzwreg(HNN`CxG?B%n5<9S?YP^JeexIST;f{rPqR6glA9tITy8(XCH=R1XG zB()iEJiux*XD4Ob4P@E9*u0>H2ahN+tk2bod%wzlh67{G&%S2`%gy>0_;8Wn=}?J8eCs0Mx&w z=i?hHjXCO-fbPiMvqGgT|8e_irjYxK#vkN*Gw)z=QE103qtmDCdA{WYW5=xNbCTP$ zHBYG|zD&>6Y+?E?e181)vwps}Z>wa>mMA21m!)0MsFcgz&YOc`_C>F!!o#$$#pINp zTVW?&v>t_XRQo}FY06_x<)#%d-6FIrkktTF0b(eN-nwZ-Pb@gh+-1UYURH7VS@u74 z^@tj<3#1=_f1=@8<1=Yl_yuPHedf%82}IwpE#BZ{Q`i_NF$sDzh)gb%1D6X+B` zCmzEGS6o)uHlB+H1G?;!18VqisRB3y3Oz72L`C^kZ!XGF9CQVGRK{7N)zq=|;e!pU zqk5*jy;2`G-!wZNh3YoBlRd{RC0+LS`~uaKQOf1GZ7MfAF&$)N8RFLuid_F8{BgV=LsE4!)7pR*=yVAD~>! z^Rq|K5Tl*V*Dqui%lUMThm@HP)IG}Y;=lHepAziNxnJu-)u?S1Sg1E#Ouwiu$fMS-0H_A&;dYZsJh!b?##v|>%)d$`lvNH%? z4QaW_t#)5!D90)*j%7p}G$Z++s3S@pAfehG)%T!L|L#;$3go+m~cp_yEPySN+aSr z*oam+39Ke}^3c`FXNhK(F5h!}pQmHcjz%SKR=zzxQ6`b4BxsnKmCR{r?(crSv4N|? z7DhUZ$>}!vjp5yu_2vBDbnx?gDXUB5yO28q-@KL8dXvqc_be9Q+5CES?`(C`R`X^< zRNUjU9xQz+ZvSJsa42;RO*b32w9&`nPT0*M7eSEmhI(mQ-DZIaU@g$0oZV(y!%X^b zyLChnya=0!M&88CLBj1GgY!*XPkrrdSoFYci60W`Y7NMQHe7#EMq5SH&lI087_p+! z^$XsxbgV8M840`E$JzqXyYJw!ah!%BR7NDW!msY^Mn-pqQPpG&`j!glHp(7^KCL^b z%sy76Sbi$)KTEt?^ijW{Q>@o*tp+%R^@-HhF=K}mP%=7YkZ5Zezq#*C>fPxR{I{3S zEhET%*aoIpW@P9-d zgBuHs2i5}OsT;oVzC!B`mP>;+G1gCT;m_oXeH%Z4AJs{MWdQ*r5&eTX3-L1ER$kbP$T)$5nSpM^FO zG_D#N+V{!ueVuRrp00H||HxK1)yf5-aU;;er+Et0IDe^Jr|D!7yNq@tx|3)h6x5$* zOHe(V;~v?{w)x`p4T16|PJd2dy^9bt$WZLt`ZC2@iEqPQ6bkN9R3c>AmJ(ZFi4Ilt zX!(6R^JNgk{c1$WrorgaiM+`tSWELBotSQhb1CX{c3o_h#e&jJ=VsuR!LRLqm^Yv` z*q^+zKSxn8Qsc)mTz1??@&a;g2{Mz#dL|~B@!w}Fj&pnp(7O7RCVH(eRD>VA{&e?k zV@lcpgz8+Ob0&L5?NEu5Qf(S4xP1~W5`VCIOmj5OwEC^S%64eBWYQ>We#+%>+Uf=k zM79-1H)go}lKJ{zNW?g|=&_wuqU!pSwy`ga?2A?NLdCMm{U@#R*OzomeIAhPD-Y5O zCJwYNHu(R}%RNHVIz92p+p{#sf(=$Z{K(82^`4qxrPXk?XM4?rKXvtn2d*OXSt6M7 zeA)_KHnth<-T@7<~Rc){n9H`y`C z=%>XXc=dlJ&p-Pi?>2Z$dR(sNG*eL!_u251d6#WZy){~Qfj`?nz!FK!pdb9xWf)ck zryVoMPdsJy!^zGM@;2`ZZzD!1;$;;zP`AqW*vKChD{4YyeLT+& zU~eS#d|2v5mURAFW<|?`F(S?i>})l(Tez3qSaZst1MOe}CJchB7t4c9i0{zZ>Fjvn zn=6=w3j0!K(hj4t;*RQpf-a-ePw>gNE11j9`w4H>uul2ODjC)us5T+cH;3K`EXy;2 zHLRCrE`w=y-NWaBT6mTu&;EpFg-rG>8=+bYo|jSg;8>kn$MvEoBogg5z7=jR%D&}q zFQN@ZWZ$lrMzB1)j>E0${AnA`^a^tM*=U^mic_NMLER4SWr_(!y8CfS%;wX34F zaYjr;A0WGk3D24iq3{36eFWHZ>GlpH{8q=x&`Bbz>axzm-6Xtm>Dd)fgO9%ic(<5Ua^2+5KX*us5kN}b?Y(5F}>?7>9OQb;qbq$apx9MhtfFr@mNvrtoshW z^rUYZcJes2s_Yur!l%S$hZ*Nl_LiLC(raU~+kwdOln>u0JgU`h5z< z;Cwz15vyv1sgt61%K;Y6{iKEL+=F6Xj}#ly-PkMQ$ko(wy1cAap87ISORY`k%fs)- zBQx2^<*%l?Ka;O}jaG{}6>IT!&n0w$Or9<|+nwQm+SQ+q#flTwL%!)Q`E^fp<`X=_ zR8Tsp#G`&+htK<6$sF))2(5$0!fyMGAXP z?phG0J`YFKFlza|*_yB?Z919>EZGS>nPscSq9ONW7&IN7*n1QItZYm}8SuFU^wXxh zKiM*w*4#Xe&2L|G@0PPn0gqML_v`SWe5vd-stv~L^#1Y6-W@5{6jT+$h}_Q(@LlA6 zLa&VW46CSwDh;il=-!R!a${XSW+pMw8622}B!A?wop3ls2UAu!k8;5l=CJq{B63~p z^l%$z>@fKO3x-j7JNkqA!g*acC)+VtKTy|!nI!SOcK|Xk_6_vbwuz=pFU%E~#BU!2pt`7j7xVWe=`Ae71P{#%;^Lk_+$!-qdlPiMFhG{GK|-yS!P5=YAjXa?EzuMU>&x zD?bl>=6fN2kZ?-73mgpP1RM3Ev^2b-;bdrQH`~p_#^lt~B{@RE`N;V5i@mE}!J>RBqX3}y z>I?6|X{hFl`|Bi1R#yZ*%DNI#6PuplVA7d7o4YU0u9(}f#Gv`EM3!OIpo&AN}r251#v+OWDqg%dXE0!w)Tj99K+HP?_!Z_v@ zQxBZNkV(ACJ(q2w%%?yTihL@0VLN~PHA9#79l7(;ENzR?Cz!?50JB^z}Wb(prp0_0hsDwzLvM;1FF7QCGP)prD@;xu({YfTy}E0c;7&G z+GLxU)35m7t_-5`KK&$T*lBWSE*`2Uk62%pz$VNCVD{CQ|5O%CZQ1`V6;Ve2fs)AT zuQ-7cK&WG>-wWS{cH@o`6i8El#-V4yn+#N05HCua%Cp6?PuxLX)<vv}Z9(5ka~FX_s!ZvP*0F%Mz9#%t?*-B*Bp$}RYmA$oY z&>Cg}ub7qo9;F9Auz3<=2Rni9y&ld0j5Tws;Ab)}!;Rj%k8E5?+OF$pz~IPHB)?#l zxktI(l3*Tejgor4RkLSqhrmGQ-|J6Mll{AHW(KqHD3vS$q{J}optD}i6suivyOQg*vJ zt10;wSZr|TSv*IWU<8AQ_@ib<6LaHj=YXN+ghSOXhE;^SNv)Bzu!HSGJ=tgucs0+bf_#efBgB9i4_)=z3Y@ z=v(}e=`yt6yrvc~JQwC70hfV?XxlZV`IawNhFsQ@TW?8to%pzdmfD zTCzC#&TI(qGtjpuaDt*iI@9|_2B_`W=%i$YXKUnAjQ&;6_r9?U+&`VRzZ|a@r2l2l ze_-qT0I9+e=d+@jUdqLbZKS)#B%aZADL6fT8>yt2h04~NhP~A*nf~63Kf53bC&R^E z(W~gt@_~$JqvMTF7SoGmmSkEZ|0X+Dq+z1C_7|cM54Sio2GpZTgsbXpIjq@tI$zhW zVQ7dT>3*%F2ameZ#e8tH6^}j+{dRP{!`!qxH1NO3LWoD{1qe_Gc>NX{!&{ z)H=QhmyHyNLIFH)K=<=Ma?%~oo3yx4gY|~qo2%S1L=%Ze5|eO;d`D|`y*SK$27i8p zCwb&}hCmu+>)o~*ALqV!e6!)IFLTEVNg@n}=fxNzFyirjsM}2PL83d($ag&T$~!JG z>kZVlI-IGp5W^Qj^jO6NiyTe#ZrXF)+Q2`3Bly&$fs}G!e{oeXB7fNa-3~TVU(;kF^L9X@1UzJ^Nq;uQ&7V1LsVSYuC)$4s@!eEDPkSfgo~ z)9*gDb8m8@atc#G-zQ|i50&8u15|QoDVk^lWdG|Ae9pyyD?fw&d;o(zt#Sb85tDLN znZ1e4k2f*fVFsQ5?Alu;7r2~$lN(x6Nt3)*LP&OLz5t{l(8(~XCQ059glo?z3$-R- z!|Lfe=yQLq(bL3y&bx!?^cP<1592oKS!TCyAnEu&PZD{4D+&|C_OkW0+@2;yzU!JG zdTsVK_3|=b&=WMfiuKs@b3f1HNB!K~5>Phyt&NBo5+_KOZ~cV-n9 z5v)ru3Jbp;YFiEIqSnip(wq@HKfAdcHn;oYw0<{(cSrYPBb2p6+9NdHzNJ!jk6j!L zBAOl5#+!XFLFfsi>)s+m0=pL^ou>sB9@2cxKl8X8Pp0#1`POL#YwvGHlF?sq0f5qd zvHcanqy#721&X+>Xy8~~1G^Fq@JsV@akE%I`iq0>mcy7K%Qj-u9ySlpT-Kv!6 z;81zw*MB$@eblZhJ2LBswqNna1yePjUTze@Af$QP(tpVe3~G{?s2(+S>08aNBpn0y zV~@xzl%*dMYo+XgsZSfH4-O_*Jv4tWS~AWZoG;jCps&0+t_z-l_L`2xIley7-#;6x6Y^ClZ6 zW4`}&`7_4s<-Gc+W;k?&7c(mg?eI63g0dmVV`T!E*E(wUsp$LpgT)=hqrWz`OqFD z{uRo!+qjKSCcL6e{D_^>L*Mm1UXIu@Gr4EzH}^629r(%54oXy-?w&?3+E=pm%{`dq zl6O}R@!hcJV1ypq&yGzrUJSw>9tSoy01KxeCT^WZI|q;!j2E{1{rSf+_Er6(cQP~Q zcb5uM!#)o;5~MYUyVj&GuIqBFd=OeGN?IQq#hm6VrSjv&F|)TmLvHmavGBV$t-><2NIHy<1gp8+-Cb?}Cei$DC$uToXY6U*j@A4lG{iGN8b z)YQR(MQ^HNWE-?3M@L1_bX?!(0giNO!CNs#HrZ=l0sfhe`9L$auwXf&f3Z$qF~%y| z^|%`q^sud4@f2h4BZWD|#ve?nZ?~T{IPtiWEyr6+O+045c>M*vi!3@Qet)& zNR)9nH2?OHnjK_7|Fk~zOWtfTkYG-4-1&D+kh~miP|s)MMJF_TAvIhabV_Z04V!1L z!q&i8V-{_GG0mIX{I79mZ!HEMd_&t#;Sb`u8xuS`Yd5~^Z1(mDnv}h2_nxCen3;Dh z7(Nx4JY8k_0O1il1r zW1mN&9nT-fTpcfXda;dUeGL4jb_yA{EIrK7gx=U82VGo27V?8oB0A+g%CSCh3R&z& zP7ZU73B{deI4qo#Tb)*i&PgEfUErg}2d9swu5*q4wf9(tF0EIZ8`!L?A8I{FDDCOrmxu*IAa=AtL6Uj97BE(}Dv z{p&3weH6`JjajqF3BwLi{UIV935+h~bdG$xgnqluvq43QdK%be&r7-!*P$m5!xGBR zXASpyd@wLI<5tYR8@wVDI-<|$NnM72waq66XCvA3(5h1YBetraX2z&afbTPc?5&ya z%y`54lT7_~ond1lVJE}I`raE>gBSsRbtZ3aR*pn^Uz6(l2UZ+HtAkqVFvOcULweb> z#dG#OZAKH_fP~cGYcsW)U#v&7-Le}iQ6gl|Cmm*m?QJ&dFQ-Vjw-?bnjk2p4k;gA* znx=|$S*8ZxGx;m6rl(E9x-R-vC^bJbGwp36Px_nKxQf)+EZ+ES72Q9s@Y=s1Jb$a) z*QqxT&!M>Cqh7Ix?Nh>Y7mj3E)B7^DdJ-j_C>(&3gF7Sa`>?zj-eqGm5}#Ub{tGxP zpiHPf@nFwLIHBI`k-QD*!|I?+UEdX`+^NuA64;mEXvSsN?n2IF;p^kW@@;QML;Kg< z`eRcAPzP3xPE9_|q1>rvO#*Mt1X|5w4Ts+!5-fJ4eo~-5`OA9LqW#A!Y&1bwM2rk- z6N+f5r^1i}a@Lg6e8=h<{E*0TLkiTRUIeOdt<=`Zse}07o*~fR^WxFQm^x`he`2nyH z@p1b;ZQAt_@K14ln)^O6oX*4we1;)jp?*BW^OkK|)p?Z=l0&Rc5T)wdm%F17rZ+MdrxlMc^0Fz(nstrw0P1mD5wE#=|g7>-}@uX#PN zKQN;>9#N^Y6wvGVhy3gMzOB+mNrSrYcZqSdMYM;zXTI^l5=eyY?_ROJK0Ty|iYO+>h{gtHq6 z6NlBHswGhm%_;6XqQUXu=10+&d)K8e7+SEGsth#n-gn4!5lDDqIy|BGwr*FKXhRgU z))DI+`X*Q{v+tLbLHUqQ{?;|v0W9<4GyyruMuq>LYhj0qZUkmbvx@ncPxsJ=Ap zG?dCTy^XJt0(xIkVdyR}ps>>sQveCRe#NCi%YiAq+@?p)@eA%OJ-vrldturY@_oPz z>)&tb;$QK|SF5yAamx8ai_vA1ayCE@iYt$}a3yP@+fDvo-~9&)j*#F$#YZ2&Yvg30 zXokasD{<<4Gn`lx&HN33^wb(H*c}R(=;TX^n6bs9e*b|7&{-7F*arZ~?`;ny>fH=I z7x_6-6;K+-FPvIjsAl?^YHaRe_#8l>fQ}b+c2QIL1&l>cn7oTLtoiAEPk*M`E+YT-fC1GWz1Ca}4NffG9 zUF(wR&}8q^il1PF1D`y*qk9yN5zxAaFH`iwW8rOXLY}5)_-~mp(qZyf5N5Dj0U(2Wof1B~`zTsC2)dOn z`eY2slDve}+_-h<>olE$)`5`z>Tf4iZg0TEGL zZxWJey1oy5>2&#`_g%wzKhn!WB6vLtJ!(hgc!1c%SLM~_g9?-)Yy6V34fxVm;cs=d zM1_1sETYiSpp2!qnMiOT($&v$JkI z$DXVEo+)BGPc(A2`&eDkATE2Jdy&8mok?&|^HRKHW5q&R$xZW+z;|bURkC|+GUV3v z!1y^-77Y~AMpMUB?t81YI8Aza$faKefw>!ehMizb`G90>yI8CeO>UzhtW>UUc>f%H zbxY-=`i^5ZUnZ@_TU5h}%=)hu|EI|4)yXf60N|?;jn+SL(+g!4vY_IO zLyLw;x_%{8k3g?>ZAIQ^b5=iCNFJMc$YbfMVIrk*Is?@{rm%S$6{zT+02-@06c4W& zBa8eyEyQd*Ec%|>k8UDtHkT;_x~h1Pe&#UGV)nSJI&t(li;L+?F6+iMAmi4NHgkrh zVj%ABQu1ps-}rS_8Lm9xtuMW zCo1`&zC>qv{gg=4K|;6p#E)t0Bl{f(344CATX^TUF^;1EsKM1jMa^Fq&(6-jKF?N3WWmUKPX={{6i4o5z5$%`!+Jr{Z8)cd3s>pWaXD;WhWi3Y3VO_ zMEbdS)NtVv;~?12qvD51zyvv}eJU%rzB{vUwT-vZ!HpST4AQc0vYvNN3!xzK_TX&q zMqkeUT>*Wo;o{avpE0=H8;7O&yR{chx_VXtqr$mpzqRJ;RJ7NoK-UVLJAE;eH~hlD zxip=u2a7+;vga9!z_inP6YWX!OTky`60)5Gv*<_k>KW8xV>07fp~XwXD8K}6;Yt$H z`e@tRUw|?D>DrL>C7N+x z{{@QBzmhPpg7UMG8n`yyC2%aoy-wBunBZVJij++Lh|C#mh9%y?zH;}n25qTcBT!x{ zS?G1Q^B>(8>S_!%UC)!03h+~q9c(QK-uWMTE^L8TL8hUk((jN~)$Qfcx;u5!WZ=96 z0>+3&*I~b{ez9@{b!3rFsY_x!qJJteSpA7}-Iwc`fP~%yTdMAWqoiT?!b4c85jhYF zws4EzBzBxXIV94&AbjC%8+;}- zWM}PO;lU=zk~KM1vmtbsdHy9fxg~`k?;GlKn)mYR>ST`n8wcDzRw|vxO&rr!q2krM z$8GPK8L2in+r*%rFMRrAJD7^gPS-ab4R!n?dvns7-$Q}OGpL`x3!nD=jPo`XO>q-8 zY7_Bt*skvssnfa6b*FtrD&?C=4}>oeu>U^WQTGg+rB-TDov9f9_?P>>t)j&F%qNg+ z^V^FLx8{tV;uBY2*I0z8tisd=Ir2|NlfE^JZsiJ@u+KyP${Uz)nRq{s0Lx!>jHM!7 z77c=Q>RZj7+qV}4jNa=UmXgt9XuPJ+d=nrfZ}6~G5Ngyq8|SzG8%1$(cCPeAJ(^9S z^;i9?iIvv@fn+n8An#zUciNJ}C?#~8>jLMV=8bA5R@|>fR5uf$v z{<^l@gqXaEX9MeGoFy;yJ)REQD(Ybedj#fmMK9kY78<$C zM6Aq)ZO|#LGuk13Re(ED^%~&*uxxRW&aqysnQ)FQU}RFUti_U?-NZ&oVGQbqj`YU1 zp|ci`yIbQE_6D~#gDt{L{_o7cgO$pp0DsZ0D|nE&y6#ywVnD1!VMM7T=ytRqJDG~@ zeQ1`{c0EIPmfES~`|#(u6OSWEN=eNYB*8C>#mZpS%>_5!skLNC9?QM2F933@s1ebx zsMs?HuNyGS(FU}ph)&JWA!DxKeMr_UUs(8_3z3<8*F(Az$o-KCooxFXS~s?6e@L-8 zc6Hm#68k;j7A0dBz|@CSUC@3mrkVn6=nQXjT=Ust07wR|Up^6agidpA`aC=d4zK}5M`vyoNwRaVpBQVPSYeKxm{?x%0Z)=k| zd`G%`+L(ayAt@`QeFQ_+9P!e z%;-RrMW`v)wb72yJZ@9UKRKW1Ge9t`w7ZkkZuanzQhM|y@dl5i+;od;#i_3Lfp;Rb zqBp9W!R(iqmQ3Td4#sRqh|9(kq(LMyw?9S&^0uvvbD$$q{_YD)HQw(?G$TX^icI@( zocAaXv>MmU5VMYdAlNK9$b^#Q%Q2e)qMhvcb@e`l@pbE~p2hd9jwF+p5`-5XpOCbb%w;9nH0yQI3}wc6jraA)$y7lyz{3nHWbxmMBntPD z&Yx)Xdi~4wGQf4Mw~G2O{JZVfbf!oflTD;6^RLl?UM2250I|b??-@%_SqFLp=wtm8 z9jzF_6rmGbH0Y^LF0ZULD-Ofl?{)0j6X)`@*2(Jrn@ydYM5xNkeEm+nX|Sg6U-G0ENkaahh5rAXep_iO6+6N-)2MDV?!HrQEW7zVV|yIGf-5yhA~Apo8LV- z_RAraOk~bVKq|(=(Z!-`(j!~`@6|jU92H5I%{iiPLw8t$wks2=GZjr2m57Kf-_)%n zWxMt%UrQ>t zz{n0=>-I><`Q73`=K&NDdgqoZZ)ji0Fq6e?yG~QRGioCaj;irVKk)>Q721b``TFbe z%y`I1Amh9Lkj)VxT*`s$2cC&iMuAH;gSir;S$irJ@Wxn|5eRAVXO*g*l(9Y2|0Hir zxIR}a9Sw4r;~(5k9JcnugS6zzi%qAaIlQj@Yb5XWBHa)pFAbSdk8BXO5~$Vl`8u^9 zU)TRAJwB-CdmXeCusQ+nFk8YVm)4C~wTFH(Q=xT6-*({%fdIS6?<>0ZB>Xojce zgk|OgI@BhJQXl)Olx3gzh2RIv2$)ltpTv&=3CG=O*h>45E;9NJePyMN59C=4BGjOnKp z>u1O^rErJDSj}utp)RqJ1|>||>|t>ZYoAjNq|%D{j?v_Ans#DV-|g+5-R;fVKZk8A zcHVwm=z75to_9T#y^sEOyeZk^=ucJdxeEuMGQLr;o%d zD>O0rii)35{l=0_yxRqZWalFby7gFPKK|- zGN9K%qgvC_ru{wrs+E3m>fm+fqWj+YghJ=7{DOktt{jdAVY8$^%kC;`FY!-Ey6?U=DbIirf` z3;kRVb-4~l9}e4^tePR^`L1n&^H*VGn!e?M30cxbe(D;F_1b8TH{O8|!h3nPYUPkH z_E2#>AP*yIib*R|T9X#ELe}alhgUBryKfwrhhKp|Hq~;N zB%2VdR+4*!XW}^v-;1+c6vA}q^k9Lb;TiFmMYG_ao}V0_+g|p8;lVw5F%7}DkNdPD zHnhi~?4uQSofd94!v7a1a-|G_pMn*T@AAczU0%bCpC+op7u804U z)2X+nT1Zewtd%6PBRSE zbLSI#*sK}K;Pk7sCqO1>DVHH!EYKLre}5o|BeJwqm3^4`89HoP-pO_F>+HJly*BX( zE2ot@69l%wkE+W~o>RScr*Y)^AYMD+KFVsN-tJ>YR?f+(v7E>yuv^&hwZrGQ+;QaYpj>C(AVTpS3)G%#7g*p^3Zj1x z4IJXJ7+}b}`t0>fs|^glU<#EL|9WAfuMr;P{MyS8drIUG5biMhKGckbyeXoMCw<$2 z3#;BW!%JRIVrgVd+B7A3ZXE9VZ+Pzmt^IR?U$iu@Pjmx;07AQfLow6h30=ThV zvzXqcZ^dZ~3El2>ny^srq;^wVdIO~p=Lk`#Kvz!N`Pc!X%-yD&8R4z=cW`RHd~ZS0 z{jDq_txG=DRC-Q}(=1Snb|Peah9KZ+5D>L;@C&n@d77wVX!+h|KzM_}M?lr4;J|B> zb^H^cQEstS8!wZ;YcMHsrO~qUHX+7WDD9csuVw!F{1y(b>AvD;LVx)@`X@ubqY6Dg zt|~8<_l(>k?cO&YmftMzRM!+ z26!Wno$bs%@Kg*j=s9cXx$ga10p^~xN}wZsH68spf*iKEDx0z8P}SG&s+3oCwa!~Q zX6xs=IInBAGk@AtEHS^o1WjK-G2|cJ;0d9QKze=n6KOTSCn9>1@9DX*H9qE@aRoKN z;267KGRR@+{h%`5qo-;%dS#wV`rqD+{h7+*pkKn}D-v@>=zz&wnhF*tGWRBJL@#TX z0_4hPK3Yq=TlN)GXxG`;T{Smq6g?byDfbd8b&-&t65v*7tkq((@?sLX8SDJukUioq1J$NU#d-L)!`GyvgFhk_T(uxWD;NlTE^5%%U#R05ShXatQl=V z^ZbwJ6zy`2Inepx2U0y1UP`HDkq~UvX_kk_EcCC$+YLdmFTzeO=g9+8LDKwfD3M4` zkX|~@9cN}jtW+c7Qnt7nTbAyRYYG@^6!>~54jyP_eXB2XC9#mwBM$`pE88*ROEy1W z-}o|*o3)eMrI9ZhLPxvjf8)J>)J`niGd=IJoF4Hy4Q=-hX0rl4US`cEcUw9P2s)_` z_H%_|C-|`M-O=7!wiokJ;2-z?ZPhAH7=u-m&0@6u%q73wg-IKJ9Spv2Sb^O|v8`<5 zsOHmCcV6x1c4t~;(HzvbRXlj+EdN_8^PAp3bplLieUelgjHkOyOv zTv$U^BcR%go&kv-#VoG{BpiCg)6@>aM+8Lpe-ZV{Lme8`w?@pN;d|p%xCDkLv6+wD zOM=8!;~fqsq2a15mgS_zu{L3vLM1G$HPWlNhUz zW1PZxHr1HGf2W0RgyEbj9?e>XzYc~2Vsor4t|=~3Pt^=&U*w9S)v&3U?6d>Y zmS)%J)EUiqlH{Xfz1PzG=qF9KA26Il=#+>lC@QRzpaYuqj)D z#PopwH=T}2eRH3MBJWAJrPo34%}n?9GR?ms4q6nQtK-zesaGy}q|&2T8bgFR*afS)krP)%Zk);GR$da8bJqL!?}G{fk`7ho0 z=OYYya64o?2Ei?xyNgEZ z4&yJ-EZ7HJ|JBt(R6GU$%#wc?Vy=( zQD`txK+a|>*OtCf(TK^1KD$I=uZprYpL7Jo8 z{${4hQ`YP7NbCdIBfQ5*JoL-@y<;tPart@$+b`!5}7&FQzt$1(K|7^uSxTwQdR5bHOJ(+*^VHa4!->mxj5L<9iP*?1T z$?u{Dt{=Uio)2Yon@h^2&dZuiakp0=i1`{n1dRMU0eY7naRQ`EIuB+Zj0A1Q11)0R zRG$ixqw>5tnU|Ft_iTA=H!5RDkIi!mLcS0)KUqtU!*cx7caRiwp(ZzQ-FH_56sBhs zRROkrKj8CiD^eLAfAiX>#I3?}E9I*zx$XaNsb#46N=ya3%Y|ZG>IId7@F!FsMAwsp z%R_AaWy6h?&v~sWO}-D{PcO(U=fWj0%0L^{3-%r*&kjKLkmJ1P(jv{JJo6i?&O{$m z8de?7=mc-I6N45j3rOEPS_KP3ta2V{R9SyXVe z*Dls;Q}bs0R~Si<3pF*MZkx}gBUsx_l=!)bT+!w9l@5N08?wob7<3?3RFvTnJ^>Iz zb)?Y;=aN`Dq}{Yo;X9zXN%ubp{1*trpwzVvTj)>CMW=GK!?zN*;T>l?R`nSGJAZTg%+LHFqo4ybnC^QrCy@xY{1*IA<)D0Le-nWjYSny0W{$tR7U+@JaKz7( zOq@_(wKid42-0sp`S`AoVs2$|zFB}Z#p%%AEh@<8Pcf82c$GO#(jQn`G55rY^DW+P zy+WIXqW{h)RPV{9zQhKQRdFg6>aR-sze4{9=pv)maW$mzSw0~p$_X3LJScs}tfju; zc2^}x#l2{Vq3O)O)8!6(B&!MHYr%VXShZDXT9B@f{b_4q4naiKk}&YbE2u z`m9IDt7d)OVAOfDyWzQD-G5;3AZH-hTUp+V6op z?5`7rEuQku_UOmm)>LOwd_e;MB{HHtYb0Bis?Qwi@I=r zw8}iy1?Au7Ml(Em_ZrPAnT}TWvHy7CHgH6~m%+vS@$Qi}+C*aQyrU64$%%7(ThbrD zs`qua@)XQ`nDv2~U0Qw+rbX-iDE!U(PqAl3czASs_7c=_%g4p`a=(y9$@gh^P$ zGvL6RzIQ)3Q@9(*ftI5>=UsTW<$lWyXyVTIm^E+z+>E1Sg#WL-uWYMh$-)g5+}+*X zg1fuBySqam!QI{6HWu6=BuLl7o}QLC^`W@GUseB7 z)E>O9%i&~0(vh$tRB^c#kNb`*}KU9`BjOIGrO3C*s^q5JWJKBKmPvfNX8 zefPu*x~f9*>vRzX=wTNZWj0Y?bi4=syj9qW*m`KIn*WS_`pf4oAwwH)^q7s8K}p|A zX?ZdjOY$HmiZ5ClN~SFe492z~LHbG7@YD6d4)}MVOo}cJz`Nzk9feBIOBc*(48J^w zUyS0atnyYqLd-MZ464Wf(`&gQfHYX_XXC4IP;SuLBdR+|y#P*xl0zn584C0ErJtio znHkFN5`ZdFSnBIpp(aAn+s`%xgx&8JgdpsrnwK#ptp6Eu@`pkH<%*3qjA;(%fLkRQdk#BRBsZb4k~1Qpj#XYkhuOJ`*l)OBuI97?=WrKIcmv1 zb!Dde*)RRzSbd~iziY+QU|U~8VGAJvFZLg^-2%ZGg|BO;0WV6hW#%`!7Sx0-4uz)p z&(fviOaj`s{CDdEUKpo7L~i{W`2j{>gomw`BEW919$&Ct@{f;Rd-qr9Z&4pDCHRYm zT;cF&{$s@dLwCOli@gIlxgS;poTSY*IC&H$4Cch8)++AfeIXh)IB1CxrOZa~vLGr; z(J_0mmiV1?f=k)fJ2AayC)9Vd?8e`Bfpw*MdllcHgIi6h?o+*x{|K$3{6;HG3(3AX zUFFgqRPiJ8bWNzz_;)RQL0hnAat@vEs*XGMG<*aQ?35RnGlFttjM5*xJp;;W04F+2 zc+3%u(8F8*7^?s4{KA9LVS4dEX*l+b7M6&(iMypMpzY8p7e$JVK)R(NZZH+GE9LD= zPps=nxOl>&FF~a}DQ@eFa>z;+Sh~$?khbf{30xtGAN0YqS)EWbz$n<7sr085pdmJ= ze%qL#G_d;arZVNEu3001(jX!Gtqo!5Y|@ht;@!kGg(U6U6(|w?;I?v^&I}Snh`V=! zZ_9F7h*2UW1DMK8F8YHEskCDsjXS9L>F-{L#+w=5JLv&q766(iDy$z{MM82NL>k-r zuAjU0RaQ!Qe!i_exFBn${}12h4-W^g8rr&5*Z`B%#3xRD0w#&BK5i~9XY1zHv_qmf zD)dW8k<`>W3&4&J5f7#L_(jhDcB+hgc$K=i!}*%znKu1pCO=yDv<1JUH& zXn2!6IXcwTf2~vjkI0yHJSZ;znYrUHP#Gr+xzBp9v!-jI9OnBdjC8K3usT~Si^M7p zSaa8=A(C#(m+2!iK27Hs2GEDhURaAK5Ue( z=6!L~NZC6vCB$f{^O{r8V2E*|#a@iYJK~o+slebTfr4^m3|B$oNLg;%R91<(MSUThz?Qy)Lf-zoB`>bvH6!rNNg=(ke?CL<@@ygPz`|Ri)Zb;g| z0lTIfdfnqm*`e~1zl}Vt|GIFcO&tDwb8ovq=l1URylIWulhzvVC6x&dW`NS@D+a-k z$~BsJ&79EbmH&c%Ic;^T_U+yF^}<~2f-S8*IIg|U?OA|wVWKKOraaN1y8btw)Z$~f z^gUr#polUpcT%Z3JZSN3B{L<6|=WHAylVGd)^x1+lnwNYZc5j_Gmt; za-FA8UV*c{P675nCfvR&(QfM7Gy{W~-#!OQe_sE6-AHnh@T7;wLnEUf1`{5bcG`J{ zeK=-N>E>4SAz@^D+cLXPL6=79&GXR}JLorc8f-kUHX%?!GQEDkh|(;4~;P^ z!0JdBR9;b*^x1DBzbs*=U1$RnLaHzJDfT~y65_hIZH38*U05G)b!VyLOvs}_3Wfk(o`$mQ)eulgvIss7>|}h!`-wCo{I*lJMq-cJfmL3Dq#E-xj40uc47nebpmLFC zJLF%LMNnkuMXAq|-Sq*CyuXC}k25~CwSEBVI3-3J!TKbkhC}_8E&o|wB8FzUJIaAt zdvK%e9`3_inQ&Z9Acp0WWQ@gAc|lG5!IckN?OCxCQoXQt6}m& zW0-qY`jHO!Y^XLEMT}l5RnEo@*@U%JBGEKH9}Rh%y*9te3qDWfZ`% z^WN8~KHJTi__FQcC?pQzGUhlq(hW5k@=fw4`v<|dpkzNnS|Mku-%mG#x;l;{ZYi52 zkxNTJsvW@y(O9u4sqQ>fG|yd>=#YH231&V-EBB`(W(ZsE6^<-S~eKwe11C4 z4^zkA7EiwB3rQ$rzc;RsIo?da8WgZai`q?!>R~Qn??Ze~Gk)i6YT)U$WN;j1Ws$Wp zj@=SczboPb*TgI_!1uXv6fc5%$(4AsA|)!CmM!Jiw(e7vjpEkXNhT@FBu`w_XE*l$ z;-G)rf?S{{Ufx)dm(xyJRE!ZM`>r`0v0aK z&`+57B_e$lidoiCl^kRjHCzCPNUldqh7}!^=XqYlgT>i^Eh|${Pu*nfZ#old>rRmr zjb}XwiCaS7CS{v0UIH~5IX76TIanzxZGOX;Q#cnc%jll=(H}DHK-brhcsKqi+F^+!F|6gO$zayDf&Uwl1kJ z4UeR3Da$%eh;iggQJidZVL`D`jH{BD%3fNO#TeirTA)bif#IgxW~CYe$$>vJg~lXK z{vh@QHBZn23p0+nqAG|yP`X3R`4c7nErB}CTqvqIeNj+Q%A!p~r0N)I_9b4W&X2Fa z^`Tx^Xq7qXE+UR;J}Vk`PBBG0wRhS_#`x^kFuF)G402xwFgDfG%*^6EpHTg@69|>z z_~23^oVXA^VkAWb&6J|~p`Vmv|GMU*aiWabN4r(@#jtf_qDQO#OgsV60wPIAa(%|UY_U){n|Vz{yc81aTY#0`3S zM@c;8+x>ApM<1&=5|QlWsPVfOJU-SPY3Pal>yG3|yAqSe%LpMJWtKdDbv?lTdl4i4 z6tY=xj8#HmCY>Fm&dk)ptIL_8`F7WYKoBYCcYOIWk`^n445znU0tda-pqvmNTpPGZ7tM02z+K5YAPs` za<@J$eSPh`od_jTZ*kPX0t@W?6iPh%xS#i{*8}(Ue$UXPC3SqDB8V^^{b^o#y`mZ> zDHYs&WG@oncP=w=h0^7lZ8(*GMqPJC8c=s#IN9sFwcVRHb~3z@@ObhtjRFBD`VJE9 z^E+s=cmKEewO5Jk<-zCGh28jAIF;t`OhGF}H1El{*0vjMf)2eM!{pR6Ifcl6e!x6g z15KfpTQBaCOiZyRjd&UQf&ov@vDvMBA5d9NdF-LyE?!mW7|LQr>7bBd`JD`?OOJAt z&&Z|ks>!nwE6L5QSs&WBTSo&D)7CDkv(TGMH{30w8)MUPsX2NUW%dd8>#94#0bS$d zfM}4k<|FVI-!EVZDW)E|Yp_pK^ed5~qECc4FoEP@-h8Mw}Z$kE0w5!R|2`+%@gq+K7L6Q|Gg z(zT$+YVxY2&bI`s(av{2wIhR_Zn6qP`XM=f!VgRu^m_qmSpc&16pRp-{L z*BZY9Umw7uqdlAK#rui-`M0wtji8uUmE&&bDW)~HFce3YU^NLJ)4Vabas!-l)FkNZ zA9Vi!Mb&F(55<-0AY~RXo#5F?GnT%+8$BIHYE#(d=BFm*IHT+H zf>dh0JC z6Joe%Iyu%j=<8Lya4of_WJ3Ys*y^*@6sV5=-uD@XLPp899I7$Lq>Z@3!`=y?c7n_@!CnWj;8?MG~x3 z4d|#jOWnV(R}LE>|Ch%9TlqT#pbJcb8oIx!O#ZH_^4qG`T)ntX*5}{Iq9~)Oyg7P%^Bjf|Ha|ElMqo} z#N>gbvv)J$VD2Lb=P04i$8qfhZYj_n5+j^=tk6Ed`X2b+;T0g``qJyI`I_0(dT~?p z%U3+N{cLh4P)7DYjPs9AT^oVk5P5B1b|HP6S$UpK{FT%L5DEf+<{cWx@vHbHiM!sh zYoqLhoA1XnAm`+9Z3TA!u`#DG1Tb$3G6D4Xq>@`myo2uhG8T}Z&KGer_}4G9sg(Nx#D2ZKgQ*YI*OU+0 z*C`Y`SQM3IfkC;wL1(^X{NisG&=Cn|d*&5A;7_mK@#A6R>Zzp7_(cjmv*9@Cu9WKN z<+0|Mu70OZhUDORuX{xn?Y{x=|Gv~T5w7R9b?8M0x3IfOtv0YqiIY_U{=S0=m;t%7 zB9%NTV^z=Ad1U7tz(pMq{PxfnRJemiqzsyOGE(^cY1pG8Pv@*EeHRlo zpPF56F$-W4qc-(4t3vkWSOcdqlo1|GHl8J=&7|;=p49BIy*aZ|FShxr5M-C8eW!93}Sb*YH9t& zWLxdV_puuNUAQ_iY#&(*xc89$2lJOCASZ)vx1Ji0r=d>n?-1Sef}|ivUF1}K)dTE> zafWtNfa;OkZCIO{D{|%#R@ZUuMd*}RXPbxSba0}-XVIoqD5dE?j$+#&V362Pg0+P5 zt^%L6xAwaRdUM)=i=WQ-QB6peH$tFq!ZGeBH(jb`NJJ2QT>LR}kPD$sBdgVG_ z_5O?yM&^BKOqGC!^k^nko*+%*4!IN}sgqYNrh$7BnIRYYAWkG0A$h2P!@Q9`iR@kQ zvzTaq*i_(H0Nn9o-BR~i1f1FWKnZGEpu}zcr&(OHSM2nQRjG_;|BLIx+weJzw_^QC)-BX9M5r1E)CLjx zZ>XwTs39t2xV)*{N^HBi+UyNwcJ;ERXs~82=E~(;sy1v099KDc*XOKm@N(nm-ZT_8 z=kqD;W`AEp*kjUF7or{{%a~%gSFf=4W<{HNzozuXD-dKO$MxjK%J@t8RwuFRS+p$Y zTd*!-?7#HoFF0??3dfW=+D!W?$J<$GE+@9(=QwJjcWFznF4c5OfxJ(X;*3mrpCCEJ zUfhl@{Ln5s{Qxlx;-rIrBsdjhymlljk)ahuh7zKP=6KX@kF9R;v>5fHnB%EswNqai z#s94ApytW4@e&JEV_X`u;#_eNhOYM}dQr5jox4WB8%w;el{ODYzNXFuaNl9KfY#{$qXxmQ;o1DBG|F_c<)SYNurfSm(7bAU<651s9~3-`(ZPy3ox(+ z-+L_+G}i!hz|C$t^Il*zi!p0{C){bl59=$mzIf3~voFKcekexZ4_4jr{ca;p9;rgT zO>Q|X@y8-!EFD#TCxF!*NAKC-Tuz<2Gds5N4HeEF zotKL(r^AoNt6ZE5)cUCFKilYC1WNOfKxK9=M9!Bcf!a2{q|1pM7LW-S=Haj#ZZ#02jb_z$ptOzwtEkfw>{h*&$+$4^aDBq#=*jkGyN7Jr?i# za!#(8YYjU0|8(!0-T%IU2KxH(#Y`$BJ&&iVeWdT2OVHNYzq*^cppa9c7rbk^ITb9g z+On{!rQ6~auGig!-MzKc9E?>n+`(XQhv(|#`ppf`%ZTCU%+Tc0O4qao>6%6*1kZ0& zJ?PPNGHA7yd^ejsJeTpB@v)WasAY~eeQCQX%o6@bc_L0?O(vCfG|)-`g&WyQJFr_jVie+o}ygi&3rlxCrYawOKli_9~*6XYGEjOpZw=gj+AE^{K$$fKzH6FGk;f zy6xA6!2M?qMiwePZ#P|}2BKrn_tQXm5+Sf=&?(Hil&6JVgpjQaI>q1kTknD=6TdE> zr60DAkrJI?os>!y5FJu|zZXybCYMdZkm4)$h)J3*I_;raC`mxyA}7O;08p1g$drg4 z*2BO>U}0H};XRd~JE`i2{#})hg%Mf~V$fcC#7p!-(Hl`uoX=oX@2vXB=&T9@FEkTM zuv~SWfD;|`;q;{%AwhhBh>FS}s?DYKEqmx->!(K+;!aTG_l~3OplFIT1sL&e6Z%gH zmfAYtD_`i$Ts1gXn5kf1ZQb!4N~!=N0LZIu2f0xYVoLdqWb`?ibP zIgA`Gp-B1ThNIu|Lyn2SHqLi$aa-K?XJc&FTJ4{QPXMZ^9%gA|&11EPjvBP67NabZ z9*cpHJYF{~gWT*c7pznd3gd1Qtjt&sp|1xP6{G@gX;&0( z#>rc{HJlop$hL}crgZcI-bJ!zw5YhQEe_3R&NKTNCMPnw`v}pm*5o{fH5sn~f6}VEXtPd4g7^am_w4CTC z^gEA)7#FJ(=k>Ip(T#>E&?Vu|GY;1Gi1i{lIv8MU^y9;LBh7IAON#jIp2$MRe(Vuw zef{=SwfUBSOgsjViRWq*Co!*GK)9$Q;5OC*X?e-fV{}w=23=UiN z?yB`(NmF|+sY;Jk0$BU34%xd8b9!2|yo zg}`WyJp!s(+Xr>J39KCvEVUC^%(oxL4e*)??&zalklqCib_`qnu%CA`F*VP%N2mkr;ienJQKj!yHu>M8*RzD^*8J5kVUhNwfQoe&mzGp* z#*^JT?X;WObak~(FL|n7=@oiS45z8wmBtTwx{D+w>(0iOdIh8eJEOp2rhJ2OmdSOd zzPpv~p-vChI|z+t^{1yxk#gMn`bwD$<+AmSP0vzCTA`B<>~xDMwr=Dx+S;Y}#yloO zL=%fxhK3}@4&~Kc+Z1vsK`9j;jaY|4DRv1c0pJ>0W-SFlg-EdrFJnOF+=ybzLEhjr zC`ld>V|K;Q%t3CGTwhO_x=Wr~gMe9&AUl-0rtILSyc6P(IM90bx4)300_W5~F>ruI zwr`_a!r$?<)P^pw$@OcklYO#KiyTgy`BBfaZDl;&r~>@ZMVF^hF!mJ_;^sIBx2#Xh zNqQ0OC~xKmTw3N}ne)W^avZYxP8^+}AYY zqgq3TnDrQ^*25^!`qbUU^vj4G@y?7RK(iI5dd>Sm#o&^Rux94PN3~N26R6bA*4`NT zg=6`l24?Yt0}4e=eN07eqOlKn@2BKtnWwOfo!}_2kWi46mQ^B7qRrUlyXnWd`_y15 z>*MD>3`n-nSw62`Jv}<_yWVGb&mk739~(7gvl?|`4%K~qvhMi~<22JS#gh#xmBM6x z+Iw~-HOf|>a!Z`~$(z8`)n{(Cl!*D)Pc3wp#ov}wizoJqQjhDW5*9wpoYrkE6#W7& zL@rCui1a_f$Y82mIP7`$lT@;tK4L>2NBl1b`rSv32EDm)F?$$aOGs5a0E`r4J!C=w zDlpPgQ}vRz*4JmA33`-7u>^`FW@Hk|o%Dr!!y@9&j^`Mnq0|6(ckSZsJMqo@N>UxA z!D^m2)s+>GRbw(P!n^>3-VQXGN$KffYLQh}2Y-+~?Hs8wLEP}&l9!5Ot5LtVSp}+r zu&>6dkw{nTWNnTQs+NVbGhscitsdkFGpv#hy-s>-ZZF{~hFG*5@t5%;O(ZCIzvR_7y53 zfo+B;oG;#3fyV}3MCIm+a%j9A(6yNE@uX{4W5B;5(SKX*-wa0oOZ5MLWq%=C|8Ep; cVS-;_5n?fm#5&o5@7@kMDP_reanq3h1568t2LJ#7 literal 0 HcmV?d00001 diff --git a/2.6.0/images/redhat_reversed.svg b/2.6.0/images/redhat_reversed.svg new file mode 100644 index 00000000..37fe83c4 --- /dev/null +++ b/2.6.0/images/redhat_reversed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.6.0/images/solution-dark.png b/2.6.0/images/solution-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..800d0f9785bc20c78b2e675c17b90fb372bb9c14 GIT binary patch literal 381256 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 aNpQY~%|C9!OZFA`@4dLZSeb~P|NjH5$<5pV literal 0 HcmV?d00001 diff --git a/2.6.0/images/solution-light.png b/2.6.0/images/solution-light.png new file mode 100644 index 0000000000000000000000000000000000000000..044bd3786d8287ea7f05636197fdc127572d8a10 GIT binary patch literal 343937 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

    ghd3>v;_v+q0hykx`EW5MbFZLOuP0+s;!YrvD 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%0AQG~af^O;o0#$hEsA#s}^ zq4SzDC#rwFjbFI{&u`E87o+kdD5Sdmg~t~o_67|WHCYaotma6qwwGzx4pwNGjcC05 zt6`nsXxp^4eu}J3F!Cxug-TAh%u*>%C6YN0EqOric6C=pJtNxg!-h*Us@-U ze-*tt)|PJc!Qq_xPS~U)NilO#M#dB@b3W}OcP%Ya6d+8=uZj&4IpB4Sj>+UC^u`F% z#}V&IE@vp3+RZ_+k?tg*+O#Y#z`#pIPy5TDn{Wu@qcQ#+0mkGgmnAeNAlS z2S1Ixig)>&Le9|W0txolVs|C?U&BRu7?ugk%i?|ruR^(%EuJ}-fliauw~W=+xZ4NY zI1QrNWsTNfo7=bTvV7aDWNC+I|KXBsolO^JrJNpYAMLScX4N4L=M^BQ!3y|#dc|(G4 z)+Az|Sv@I=@6$8GA z&SLD9CQ1v7I{p|xh5lZox!Aocb>|Z?cx~5?_5(nSRl+XN%0fsSk&-elP(JEDFxsqc z*P!n*F?xGqwvKMXl_%1uFBssmmW3W~AUy4bSFP@4Ts`!+6P+T?YNGaVecpMmrekIn z&4~JYq}zN;&GFCj?avZ}ne2bE-n@SuNh_vOx=+XGhZBj?ka0A?^8TEq!vcg_x4gs50xhluiz;b zuclxm3D*&3cGt>%Q98<~F2=}n&pi`2T8H)6pC~5yzv8VWXVizFz|5>DQ!&{yB*aHq MUR|ylWFGpz02jRhl>h($ literal 0 HcmV?d00001 diff --git a/2.6.0/images/stork-white.png b/2.6.0/images/stork-white.png new file mode 100644 index 0000000000000000000000000000000000000000..8ceae56591397a4eb4775c574f653c75ae7684d5 GIT binary patch literal 48466 zcmYgY1ymeMv&LN(w*?kk+@0X=1PB(~Avgs0;O_1O2@+g`yL+$@+$Ff{Bljlve|yfH z8RqoVbXQk>^;LBbVQ&?sP>~3cARr)6Wu(PbARwSnAs`@Q5#V0$Fe0cXzMdeRRHQ^9 zD#n5PuYb6iYRZ@?C_vD?UL!!jKoUa0{%-Pm2tpG5cP$A?0|EWdeJBWs5K9P{KW!9W z&%b}tugC9a{yjtILjGy}dM_91Z)+&jTlX^VW7Hc|9T8OKUknKpbo>RT5)RXW=E6RPvBL zy%r^!NKMf%grlDMjs#eWt^+C)g+Hyrg-6H$`2%=yA%kqRXt6@F4TI_YVcioDqE&H^ zur&rnGOsWE=e-s(Fx{8;U$+Ensi-9{o>{htgjg8Ki>@dLSp*Adch>e>)EQ=cAx38Uh9wJYjhNC#Dyb9sM6d0)z+sqUlNnZTTnbz(65C3pG+3V zQ=?_D`C~vr=9D8YBPx!(VFC2YK95vdp#k7mD^1-&xXs}$c9){#jA0C}WuSLgV@g44 zs%bAFPb(VYJ!Ub!I8>;83Z_$>%?}s;iZIwh`;B9QDng=bWGHLP5!0bv^M+rfJ-`e3 z&bFrMOLlmjUj!4`iBd9Su-M>3Tp>ES2>#c%3^vagcYNn`HG7U0ukPVb;3qs13ztZI zf*i6L!WSJ`KU-|igE6>U+gLOcH1G29!l1q#!8 zyi(_TXQr_o5^Us44BT ze;wOf9ZKBQ-4nWPoY{IUIeMr~P*tjNahwuZDB@L9X$w>_iruj2 zW@)B`z_wc^Z3LB^@AYX6CGz;)9Dr5pcRwVV%3kX@JDd4Br z+;2c($M^qXHc2qIZryOw7$^Oh6iu{tR3hBirALYcn`46?c2z%DuuBW&EH12m zJ3&n5`BURg)G7(tWe6M)kgQ9IHUUqA`5)aN zv2%{6g_m_KAsD^YcW5%=5A-FRtw(L6s(t*(h?+mlt4&)VX(>Dd1Jp?&}e2V5$xgnzIWOHx>!NFnR3 zrk7b>Y$ZMK@HQ}!{3|q&+D%zCpg2qQFLFzgO@1#ROOhSy8Z=}T#64(7g?6awULQRL^&yu1Odpp?7U}<)*na?=gA+a4==jWe*h)`c01At3f;BzsQjANmw-@*now) z;UJl`aq3pDlVqk1w%c9`K|xBWL=$@&5Seba7tpM;n&&e<#r8K+bjttJr(iUjFYLE< znXw4!{m{1`Z`peDxbZKkc>p2Gd2hW)dsvtqmS;CUY5c31-zrT+;NY}mi3DBmNia~G z>>3_XE@4QcR0%Qfgy4bBL;P>xNnQN?{MuY9 z0Lqs1lRy9jUhko_CC{t0%uB>;;L z(|&rQa3TS2eMH=d)txh+!_dT~nhhAZ4j;t(9&LCSj_;o+15&ZIj8uD*CCN)pREm{! zk%XMB2>wbjIKX(7vi7Ynv2lCNDug@~O&mVqsiC_s-;?YfNl6subm**9b0@(k|$TIr(REv^HvCz(+Iia`iCFNCU)tdcU6R9btzJizT zHw!u*rAT7ASi zqRcu?EV?uW9a=OdFP2(MfdHJc#1XiFxwsCYHGEb|d}A$+fwfU=_4Reoyk=YY-9GlMA?Y`}A?1QO!VHk;-<@fCxmC%fIB-~kV* z(M#rk_3FPPmRmy2)_}!E!*07?n~(cB7OsKK3@4&Lb9s43JpbVa5OT8K(skCNu#SOo zhHvT3n?ow-;Cgjn_gAr<@*=O!72t~XvtItv%@Zh;*9bC8(M`2vA}llE;Cs|+cw^g8 zeySb|#0G2q_m+1Z_Bx6GAy{7*5Y{lQ zvh|Jru_gV|6N9n%uQ(0}|6~wqY*5STJcL)$qfClSkh2%4sw5v*3nK-`__}`n(ZnzN+e-^W}eTK`Wk1B@G?%;CVJ_p)qF_dyBOpTyy)Wt7{EP=mz#F zc*&7>_d*&xopgBf0b2+i6N4R_jd3PYCr$AtYiIZUd&&QFE(`Pi69-FmrJ;&1f-fRY zbudJg#8h%G+eRM_atwB;IA2As&n3~L91;J<+nO(Xp^~3h6^lLfHg7!MEB+@0>9-KK zPC{QyD|qk?63@ulw0i#`9rjNbe5ki9V~lujqMdYkejaZUu9S!ZfdjbPBkofckMxVy zCnJq&rTYIlt7Y(S{?o(ai-)ivC{GzBoCm`6>%4%6hetp4>_9QLTj z+!?dt-<2#P31n@XaxQb~{yxX0L~hs)R~A0dy>6k#z35OQ&0`b-7qCuWv-s>?%BO`) z{}(|}C38)sp#veEgEyj@bxJMLliGN~MJfGDu4{f-s7=E)>jz^z*$JL(eE3$y2drRN z#P^PIY9_;z7~NeTSoZ{kv`LZ9ocxCZ@5m?F3Pgk($~%oyC7z>ZUlTY98Rbj?4CW2s z{IWMh*%@6}Uwq^CMG(3OkV{Kv!S2%{el&aNvBaZWXb(C(9M{R=jn4lwOHBV{a#Vj| zPo&K-qCWP5*iW)UGd7{X*s*?n{gR{OXesg`eH^6Y7kb>~NK)>(&xiJz*u7mIBK+A+ zbQ#MvFMG!Ky8kKd)h5C@gs~l?6FLetKhE7=mH5?>`JZoTbJ_ghs7xlpMr(XZ{gR3o z3NI}rZhFbdPaM)YmG}0DE{P{nQnKTZ(&S;G7$pc{40PzMB?qhEsHF7WMoE5hdmkT>6VD!kdoZkRhJ6GZ+>y(_b~;}G|o2#UFH58O9}*Gx5{t43)PVAI4&A- zmM%w{iOk;w-2XT|tzy2J+jhEA{X5bxcuR%Msinhr@c@*36G3F! zt~9sL6-N;sku3oyArm0pTPRlQ@Yy|{$!iG1CNi`kRmQSYt$E@-l16#`S-w+I&2PBi*Ejc)wYIxQy@|?$tt=$F#q+(wJsBM{{5;Y6Ua}n0ZYW9z z7bd*Nqn)vgC706oFYo@6Hp15&IX2kyxLGQb9Y}zX2!1IQ!O6!!l1R|h^XhX}bt;y)J?el_Qw z=Z6V9DM(CY1c!MYZO2T*284}}{O`BhKR%p}9~`fkgRqBvcye4TFt?>yA+Iu!f{Y-n zP<|M;S*~{Zrr5*4@m&O2aYdkEm(GMd)CGhx5ZN<0eFLK7j=>Y$X#zAQKJV_05_5rcE zXM;^8n2rv@y2t3;VaJtmrVA45SgKhgGdr%kJU zcUYM4WUMJXz3xhtI($za0j}MeRW$@sXfza&ydH6wmX!)mm%rZ15t(t1R6mh-OaXdPE zC;W_se?#c4*lPe30~w5qb+PQEaJ<_rQ8sV^Iy5EnkP|9Ac011xJc$Uo(2}7^v+9NM z?vzSXN{V#!cBw{-m()PlPRi9TcA*RNJ)Ss4E>jBR|CL%7oC7z*ag9MOYh<%Vou_jP z=Hn>6kw$WH5lUFH+ul->a*ai%>K@p;Za#Z}!!r)rrB9;0Zjy-4xy z)&A|vu*V(!TF1wOt1th0oiH-lRc5Ec-Nf8XdziFxnx8o^RdqAf)J&N>84 zdNv3D<7tn`j_v9b11{A?KH!)Igs%dpLi(%)oA@^|GWp`3=@M1ri! z(TKpV=~pnukFQ0B{OuOR!=bw@`_IG)@+B2?L81c$!90Q4cKGY0RRZ>2+t-o$Q1EXX zu_MOs`i#)v-#&*$TB}N%jJ_TGW-wR2^)S#8PNMcV2J-(_9Ej7vL0A4x*(lLZ9eafW z+i~Es(vNL}Q2f!30ee~$7#Q|W0(kla>Rq?D2KoAB>}tqgiqw@?EXDD7g*IVjD9m&W z2U@Fw{8(AmDLZF7TMCG4u2`q8_wN2!!B~Vaa%}LlS&u4AVyPQmUk4Os*rI&490=W5 zF;^5QO19~|N3-@=A`YaR(`5oJL2rBvtHW;lRA%G37PW0$?<4uSMr~aOhV`6Q`K*Gn z7qZ6xec%<<(y>rm>y@(An@j%xsqK~j&tct&5jQ1lBE$B|v*AZZSZ0MIXzd-IQK+@gbSs93=)WE-n`mi zYWV_GkBUDY<3uruSwNQKdV&Ze4iqXnH3(_3#^0$CHc*wQ4b-$=PbmMsI@-{mHEWHU z$jl`QoMc4sqRu+j(s^#1Qwr@VY{+WP|G|SJnjBm8QPiNqKJ%I4LtA_HpCoAVCqf;J zWvJvBJgYMBe0RRn%&x=!BiPvGzWHj(VqjBDY~N|Y`IabwDWNi_wv{bElXitrEKeFQ zn`Yw5cV~f$A}-o>+c7N%i?D^x{9TQjf1ROzqA+vqudndY-mrfmeX{iTYgi(;a2tRK zuDZ%@oelm0`9@x7WzMT+ald}mlA300*z`6w&DQ)VO)n4P0hQR3p-Rnek`=V)n-ZK1 z?fxR#50M6VX&lm8O6K69NOr^zT^{d0h%^{(eL3n=ncPcaXuEmR6-mBAC^f zzd4;6M3{AfZ&*IjUw$riYwYKiic_gpk@E`@x-CNd?j+17TnW+WotN+>qxi-eHzL=a zS8_v$zN}Y7W%Kb4SI6!L-oKMA^*e1q^7WN`s>;Xi)J`)`JB`w~zAR_pH9md7@7=7O zLqp$XrosIcgB8u^rv+6Ut)x<5+n|tI8A0@x z2EaRMQ=I9>H97eYiLikE&Atj|v`?Hfk36Q{d`T3a@N>hsSo*P}PGuA8(bCcaU)6bw zDI1NK@3#LgTAH?idwlB7$>lcY@Yt>;Xh=i{UH2>IIb3PtN!2fc4tiWb+Xq4q*pn{I07Oq~QVgSg zVTe-C&r@4Ur5!5U?3iJ^Finnv!^u7NocE|I?7xu2$n@&n?aN7~TPlfZ*+-w3ly& zABEJaS)FP8<_DOC-wE<>Ob)q5QOITq+!nZLP)^?=uTp>bgZutPqPd0A0pcGs-*Dd* zzNK+!-z=b8k;d3%pQ@ZNQDK(qSQo-k!Y}R|PNJuH<@pA_q20ilkH|#?UO!m)NJw`R zzmYmF&ra#sa_Lcg#=}NxaQk%W9c9l$&Qv_VF|iJ$#N)mbRQ?;2IZ%J+Tw4{UwQa>~ zmFs-B!V41xLoT9mVdqGhJXxzKuFKBw-;jgWcE$1*no~`T7}upbdJdb#rx~yv%WU4f zq>JZYteAC*J^WtAdxgd|QvczMhv&m|3@X+_FF%?DR|=8SS-l3VPkW@9@ng2$ag|s_ z?qmf-Z4FsZFoElhdpz%E-!D!>HWtQ(Udb&UlpL5amj5e@WfQ}KciPY5Nv0gpR^Aaazac$d1jA5E0?1*%#EF67{U?p*D~X2q#f?VTZbnuA_jBF~5Xs zk$)2e11XsI(HyzOYnYt}a10dc_w|&6yHtXKcQw+KE==(u2g$o{HUw;*Kk*B!^8__+ z#v7_}_KIBcTYKV<#M~M-XSzSFt=%uq6si6I{BhM_@=3=6kx3IFA6Re__XDRBHglNf zn>B^$$J9-f%<0KDY%)n=xRK)dhpW9mc;ID*XY%*O z(;|fB;^CTgyK+5YNi#z4)(($(qsMsj5HLeVruSEjy|Or>kjYqREQK)@AGjK!py$CKDba zetoeU(lZwm67mp}xWq(%o#y$_mTXLL9^%!0igw8zyzuEPC}iFh?=T|XcJQ!j<*|Eb zjBxEkkr46^pMMn4FJ{oM5y`&i)@tIv>V2pi6xkVlMP*zI1fge75CDLWE6#@teDCKic z#|`G$BJs3l^l!+dkLB4imFu^|)J52^76$$h680;5x$?~ZTX0I{eO)iaF;mPbwWW>w zyyV1t=$eW_vdhz>mPLw29jX-9j0GKWK_0gyrk2I8fZTGt(;!Or>@D46MJ5%jzb(BV z4L}WB^r!d|fiU(Y@yw(+WBZ}@51^Hb=WbJ>eo8SMC8WIH4!ZNY#+cIh0!AES8S7=0 zzNq||nU_vsr0z5(nZg;_EVlpgEQ>}`&rYklw81veVC}>E$M-tv6U8eXUU!bQQ@>{K z|KxaJct|Q#3Lb6s-2ksP5`m!7xRf=GA_5^kY$P2<48}qz@B{&4pXF=8cgQU20;JL* zI-f_k;TQiUvGLUEtYZLJd*n6WCZ1DUnnNe>k5l>YhxnoGP~5=4ODwyE@uM`0DYzoi z2Jrau;ZHqsE?Q5>rE)y+@_*U?kl>`kmiE(nY2S7GLTnz<;R_gJ3wZ+|9W2^!UbA@9 zQJ?NqU;Za$z7!Xh=^6B{F1N;8Iti&!P`=2*gnwJmCm!%vZFAG{Z6~~FD$K^_f{R!2 zv@NLnl(c94AW=e~R)NA&E6*+;=-$t9kjy3Vrz`*mlgJV2*WYVVQwTtY0T(q=tK-l} zjMtVA;>ahO*C;Dz?Bxe%EPheN4C{rXgg;@zu6Y4%n5(5=ghA_Z_a*GiHe`K3B3HwK zc(3_e9;@9vG6aAulX`_}imwh9em{6W*yrMcNsgk~pWll;10@l1$x>xA z;GfOYmZz=^b59zfJ??J)I*fvJsgK_EvZnxIcuKS|gUS03Ox&l@R+Vio8%D(X8uOxm z81R*_u!biE&9~zN3qhen6(~(_X(-iM=H`uBzah50{1ba!@Mb%fQ~%eiGT#p$FlSUQ zxqNVuB=AH+1A%w8p|{B|=yn9YV?%(HMa zdbK?ZC>XZ1_O@8@_DIgY68Yze`tmOeoJ4MFoF-@FmgS7XTA_&vUg$xhOqAIB z{}v|0h`14K zq+?i^;d?}82LT*f!r4pKL({&?B5BHN*wCKG*DN}49c)B{i+fGoy?#9rAhFp=S_|(X zj9~$UYQ3&6bU5jIO;>Vh)Feeruk~4nsb(|_jlJNqTGGXF@>8Hm= z)((7GBO4U1I4b(R4^wf!XKw6->$R& z-Y3LPz%Ng`8fdhYQXQKb6(pg?hxUoAjLd-6Ylx#ZMRu}0Ei$M<7Xtt@SD{OkA=L52 zqca*|T&n>WaK`J#6h~9_Nb8}Rzz#Fw)?;K5$j`%e{OBJv#f@m{i)B*C>RElMsCq%h z!mD(I(#@E#?@pxRSGjYcsG?VQ7T?HbZ<;?*tzxFs@l6-5gp{f{o+fU#pOXelFI9eg zm4Ah^_<_|SCrY)9o~7)lLY;S-0&Qbp>B*2Qqg_)+Q|adU!vnT|H2?%RCKu3knxT9z zfPvVfgTVR?PL*E#VlY6OBp(p+6Sv@#21e>}1g5!JxzFB7c&Ej0aFq-=!CWDPZChP? zc0+uKdPBT?reqiI^q{=ef--&T2p*w8IDI#Zr2PT=oD7_{hw~gQFyLBOUvKmCOqTty z(z@Y=^0X7k&Nk8zQra!nKo@&iRe!hw>+qn-FjwzocBQAibbtVIcmo{j4sm~0GC_9C zE*B_WuE{__5l}siPh3Y^sYeg)$+}VOcfKNICxUc7uA6zPE$hhuTtUf-KwAb4)utJ%^p^)(yN6;y!3NM zOm}6DlJ=$XVL+C6zl`-Kc_2-GB+TDODEe@tD8l&y$fo6`7 z>`7Jmc0mTE)+k5G63cTs_%nITY&A`OT)pL@RQWp=7}~$9t4r&w>5PC9#Z8X!-PcVH z0vq5VVT}cbs(p1+mCbI?l*PkKl$yG)2F$zZstj|8zFwiKm%Wj6k!za8j@6W;zKAz( zZVuSTzP>;&HW5-Q-+h37Bcr-NV%WiYS8DP7Df!SAJ873712YVb6872?KXNXNrtSx2 zK-y+OCxxRI18z&u*J$?nN`2DG1`@_f1P&y~>?zO^#zeSe)M}8Z&F;`a+xx;j$@($7 zHqr6E_wqkT!YCcwS6}*)=rzV~L7qMjmD{Ca!c?fnYe9AEis0v6HFX`#h9&LlC!sL{1L@6Z0i6LQ~Rit4+-vV%VVJ|%lT6Cp9DY3FDe z#v_Pr^-fdSYsq0Ni+~gi7VF*n#WvItBJ-R(loP2t!ABYk&^q&2yXi$o9P zsYYW+$`fXFbVd}dU`jpXi<~tMR(Y_AI>Ij!kYn+0 zJ@zTzabRt3!x(rB?9GMxx{vZyN@%R}`W&8vrR3@|`o@mVr>@4fPG~reiBWbcYRVgo z!Q|t_TBsuBqhr!0J{VyILZyGn({95JbV`|WGd~VTNFH7rb9sC- zbzWiUuvGaC#}_EVgm3Lp1S6?A<>ZU$sM7Y*dTG)C6Ck8*N(X=H+v2HVnHow6UFUO>X&yu8htg)LxNkr z%DMcsBsujiAFnEw#4bk%l@>FEw8%xH+hj4af?<}3_gl`~?Z5BwrEh!Mos>qqd0p?G zZl3mwc3HyLI-Gv_X*C6jVanPNS~0R4kP|hqi7rO-Vdh)87cb+K5kix#nNmYH=qZfC zo>S?hjFeA;FIZ6#?S;z9{ieeveg8x;INwldV))v`@fdI68&Aefr?pNQ9CM3(88}F$*`T&H42Lc?J)yKl?C7)}kg5c3SkC{9G^M-0?TzYI6 z^wx3#0f*)TM#L!;Z9EEkde!?Yyzc9@%l!F|8tXUf!C5ifGpp9~nUIpCrVl%5m}}@x z8s9XYjA;Wh%Gcy;w|2=#ZoOb1s;vVGNLeF;>Uqa3z`6CzoD?iPO;-@|KEBb3rz{;y z5ucgCCXj`aWPN2i+%E~)*`uyI6FFY4XEd%kA z#m@Z|Q^t@rFC^_wO4XjI(MFEk$eWVS?&y`WL>a&Z`RbX&P$Sx(OEgq6Gt6nb|e~nEVQ$R$e z;#@Ppfg6nuJ2GPGfk!NJ_EuT=>vx!DbOSod@g1>p#^*k}`P?${UTb(ZjS?n-6+(o| zOa8W|va*MV%LX`l#3`8rzsn+xT7^3%hAP_~-VAkQzvpL#huno*&juZ|OF7`yc*IuV zFR^BOxe@Io9H{0( z?NmIx6yIBOWC=@~8bj&z{lRDGELfS_8b3g@a*NX9p<*&4 zCmYU(4PM5(zryL#r`RM^OR@tH-L9NPqjUV~z?xBWjij;m!O&rVgqrx`pPq;V-l{B` zx9kxmFECJ9V&9cb0GSIUVL8DTX_f)6bRv4kQCGjVJo>_3Slz?*iAxczq6K1s)EDB< z^mTG|ZA{gYU+QhbE{L%cS>2E&)T&LOo8VPLz?we75i;K9)m zaKlG|p4F+0A39-5DLaTo@EsFsNWx3y`|dR@X_&LJ4Luwr(-kXxCzq=9^vLUZ$Eerk zV9J(nM*6$NZpg#)YH6 z1KHPX%4;e+YG^LUTLR-z(PWs&gQS<_5n^7`FF%@VL0ofm(f4y;%)DZU!CL2ezRQ%f z(9ZMikul>KT^ClvUqW#c=4BoYfh@Vq0V}ravLiJ@95dj-ygY@Fej^*9-S#{`eg{Q{ zWL)wtWEktNGuD-?4x@@^jdu~po0Eh+dj~mT6QK=@V!8X$0Wk3*)3`c~wgzrf`4ad~ zLXpJA3vQ1Nt@S4@c4sLakERa!B+yb`6E8rG!GSyH`??Eg>haKCDd>&XH}1+EzPnjB zk6VFQimA6mEf+!QM|L`nIerMYy7GI)c~3T5jy(XRMUgKzpBYrt78^OqFvF_x_Q>;1`IZeFR1qlaZaZ#pDdvqF~WiEO94%!97*LCeZ_h<7jy-=u=A)Y%l0~ zF~E%h7}|%jvEm}r9B=JqVZkn9Wu&n=xF3{V^X^JF1qW$Zd|LdG&E!kjlfd^%&pn)6 zAP|^|6Natd+t$_SbE(uC#Jq!B0KMIv3l z>)O)%c73gvRUXnrF30h$+^zI%a3e;vA$9ib;-ZP-FI{;VVtE@`bp8tj_4{`>kz}Y9 z8Ov`H2>2prJJ*l6Nrz>fNJG1I#D{Ltxl-LDa08k~J1K@{It~o5Z`%_@DB*?Au@ra8AbuYJ6;2eiMcv6e z^hVlS0!%fP6f^{@vqD-@8k(pq32~OPu@j4e%I;Hsa?+TS%5FaHv5&)tV(p%mV@Phb zsdG2vib)@)V|%(puTjx*x)y*Aw!RuwOx0`0WblD?$2=uWZe`V6AtGBRJ5Gs{P^nEr zUKtX2nC%qaWpvsl%nvQMBqV2HlnFSjr~>X1Jg|ibp^rvy*86hhc-9gM&r#`NA(x-` z!d~=l;M_Ko7P=dn7y%lN6fjqyCxqWM$_#tPeR99AOFD_^G)36^{_NBq0{{wrwHaf3 zdV10g6F(*9M?3NNVl?m(2EJd0d8@Rwr6-Dy51>MmSurIEu!d7VJ9>bcXh7$~Z(3q!@J3lV25aGMU9nU!n%tI-#xp_jH8B*o<{yLOFvgM5-6G#cPv{|EV zLR68ye7|eQt{_zqX z(=|}hX+cGWmtjw^SKO?d!%#d2*1ib2RElB}+tuwcNYm|T-gvEWDBa`s$n+fdM1ai7 zz<`D%B528t^bM;*mP88(%3pxTm397o@2*$$nBlq7xho2+Xeoe%)k8WC96io~`;>70 zm1Y&|j=^^~&|xNe+soBmJBxhwbK9lL528Tvf}v?iUzu^7TG{L}qTceF&!3yGw}^{R zw5*BCAyB7|F5zW$<+{kpg1d5QRB+vtrZZwCf66=gL{MQJm#L;!kB``s7UerQ|Js-T zYJEv0Xz6XgJXYm@%D==F3x>%afr7&DJzI36KBS4#&0f^DtRHlkPULW!K3%vIWn(d_ zdG~`^!t35sowIU>DviJSVH`Ex&^MxeggvKuH6k@%u?OV{|5OJmn^m2uFli?mYr@1u z5zMP3yWLEXBBQRZajvBp4G4z{5-Q)&vhr07cxyG?#d6=s3X z0}H1l8NPJ}0r$3H!i)A5#_n3X&UN%as+1(Q=tw<({5OGk5=up&&lzV|rqhI#RIw5&YQ+zd}p^T}UwSG{8T znoU;Lg~kJ~c~O!G?Im4<-gqfzy1BqT{RHL&m2ob>#{D_GwI%JU71?*4pd)Pea&^6` zcAUj53|nc2lAOiTjsqPsT09utaP576JGpq5X1{@x0S)$USZvC?S=DF?9LVq@ogYSX zcFl?Lf@_27QIoZV1afJ`10rT6B9^~3)?tqZE+2LyCQq|YZkqmNG2>wOEB};7V0Qvn z5-h~_?8A6MLncK8qr17ud6Da5XA8vxo1>qG;`fiT%vi*UGHt!>7-t!e0_o+656o(b zO3brb9;BuaDMyBVQnX1Ev@gq#Ipl^A!JetDTi(_`nvfd=J|bLPEk{mGeQ2~HJi{KW zZOjr5Y=++`oY5S5Jaf%{S_)gP-MBw|IX@Nux6`}NLRgyfbcr5T*ah|J2I45ZcCfh&j_QD?hQ8c?{6G1W% zMrz z>b$slyQ^{=Qz z#;%L2HE&kU5VqJ$(@+U8NImxQPJJF2`QW+SSj7zm(Upga93;uu6$lUGf;V)JSla;% zeLq!Ivj7IUBGsD!c`x=e8sI*LT$=2iWV>HP9UfF%ViWjVz(G^mJQH(?6WxUEWuJ1`4gY6D^fXDYV zi9GB%r0E>VL(o-nH>N>MJ8H(o@kaO|ZT`Nl=yi`=Niz3-s9xbueYNCq6^F$&j9~mYx5xOicD;$x#2F^AiFp4O$}LYk|Y&alv~R}AHEY}|LT=cQ)li6= z@Yk)ez+pD6vuQ0fv+0y0D$mEfPC?sRss1HS`AOzz$=!;??ur&mJuV`FFvFw5R%R)` zeVv1@Vkr>ioA3FZOSd>H#R`D}HYK%P}R0@}UBwg`21t=d+IjL{@7Ac8XfT{|K>E52DS$f+ZA zLb?jUfl^h4xRD3!v*W;H9Jn|ioczr&#=`CW(TdNt#ReIr(MJ-?$%YuV%yX@0Cirb2 zE5W(^_boh`%{CS`3mI+eHy64(m^mj|c`r(wP(N!e_?CThO@pG>NQ5%X_tHY`@y>x` z1H7o=Nliq3a(Cl59;Hjm*7GSrqVCn58Z4{zA);Hysomhe{|n%Q47uT&pimg+JZzlw zgPm2$XM*t|vxghW?=Px4azc0^a+@wP$FR|Sub<)NxxQ{It5|M+-HwtB%i!mxA3kuN z%^*hLBeaqxa2wUK8?{=$QkhlBIk&pfN;Vw=IN4=+CW-8*d1}h+IFaOgcGK2g>aQN3 zU2UXb@i1F@wn|zx0ZEKp!ynyciJ$~IQ1={^CdcIhIi!!Arwr)@39U)~UWtbNrepVLWF#mCqo3Evm%vnWV4) zn6{ru{X1X=#n%CFU$nBln}3>DkDf9Fxslvz*A#qf_0dyPJ@;)UU3!3mD;&~M&yE*( zK|81QPU24wyf9agsW`j~I~^ooCQ}<}p%K?^NA92Hv7yWAY6}ym{OG-IdA$DS^|Nx< zbI&sHDM~fOBkshxdy+i!cDwO#gaP=5pg~25m&8nbHZz2Zc;|Y~uzWi@?|IjL_4<4T zuiE6Cd_gwrO6mM46df4WOY0;{3%vD^PbS@Hk5Hw*91wLagY91!oZqe}m}w)8mNd>W z3Yxg&_W%(*bQ=@LU6@v3WbDx90oW`->yJjC35KAt_3Ip8G->y6v`I(igm&qo{%6A&GXA|2A@lM{<>2ZP-P zO;@Y3}}a91K(KoJ+uy!y!Y zh3&jK1{fW!Fz zXgbTTxT2-qVu8jR3GN=;-Q5Wi+}&M+d*h9}1_{9-Sa5fDcXxNVocEmDKcGMCvG%St zs^)wuT1C`nM5eHyXfVB~qILS0s-W6)`N&DLSj_v!;*-F-BJ3f?T++=rg|PT|0YB}8 zKLoWJB>OVuVy1{Vi^hEdn<4o{81lFAtJRTHrt=vs0M08Rjc}73HuiXzN3-xZRdrqU zA-V>ZT#toqYrSLFMa~4?CMpN5eBqmJZqX6K@bumAhy${4S}NL5=3Ww{<_dYRgYds_ zY*B?z*UgI_wj+d<2Bp*8kIKClZn{%o&;SFa$~(&FF{+P+nK=O6*%GyXq$hqoTRetI z{JDD4TPZ{s#A^0!aWfXXY{r1!g%ZAgl!rf9LRyHIUJI+RujS}mVaw5x$H}B&{>WKD zc`QVV(kUmn_^B!lfC_b!ArhY%MiYHQX|cE0S5yhZ?BrmsVI;w=yD8}o(m)M@no~ru zwl~aH-0fT89R4(Gsaj2k&?PsJ&;Pl7!M;Yz;&RAoO`n#!gV3TLEh)e|uWQxWFILFx zzS-|1i^a$qFm2@OI2);J=Q5cy9;V+;gk)pJE@D`Od3Du67bU$&Y%HRLzCUcO(3~^a zy;{DiPYqP9Z4FNFPy+1o>uf^}x*HH$e{o7Ip|NV2_qw7VgB|(^HMMz%MdmkN}zPEQQ0PBNuiIg zl7l*#uV4dsTnK)G@_qkd*g>MD1a_&%jc&5-gHm& z4=|l|5R}EwT;doiKLjhoF1Gha#xjrL)!2}`Xlsq*)!@xAWc-5JDcm@zSde&hVlxA^ z*xv{6LH&0yPkt{lzPrvYA=qXJE81LyOq7=oC<8S%wzq*bg`VLl~(#IK6bvpG3gEU$Z^{Svum>6iSN{nIV@CV z3kxJ}PU4vPgK@W6fa`@r20RuaeMkGc;lZ8f ziVq(wgo^sGG*(?xYufOTr98zTL_&ZtF?1me5*a>HS|Gz~j32lqUo+ZPT)3Ji(dp%1 zOUn{QPP^5PBo~W~`Y}B0M>A-2!0xx@Qk}Gx!%C=X=9<$?lkn+2311tcbMs)X7ZysX zI9~4-x}Oq}==Q5*kp5a@=JB6rtDF5XyR);Yovi>1M>47^mIluo$)XpnISE=!Ec7!5 zbGa_~h3oOv&Xxz4nblz|Nt?Q8*A^jqZ`F9|l{nm9{cY~vs=IXY)(9o<*WH7~ zMh}fkl2RExMkAEPu+11v zM*C<;e3tBx2-Faq6WI&SC^6D6W>kTXbCk9oju0x7(4>b&x(+osgwf*H+$eG&V&Kv- zU25(W4!KoU>mGVk$xtA*R&&)V-O8}rW-j}C|1h*R`eZ|Y^Fc*(XvueNjGuqf9|rm(8#KSd z#L7{cQ?A$($H!=F{gP`A-~So3meSIbr6WX&_B0iWP^qydR3>PN_5eGP?v-i%UEiMX zHja*I35F>A2#yV@9oH=C7=l7G!Qql#zivfIliEJ9E_kKLR*0bi#7p63QXj1Me- ziLJNFuC80(n}Z1lUZ!>qIXu&j(iXn^zV9^d?K^7yU$AI{3U%PaebveGAtmtcC9V2C zakgq`D0;_g_hSr<4rnmvs2N}K<#ylzJ>3T=gY5!h&i=#Ddpq&a*9WGJZAyih&1+@6 zi?lp^oT_uZs-J!_0Q$&vf^5Df+%W!LMY?ySI%rXY8>RT9$k3Hc&)PKMS<01nGR}#4 zi)Epf+YcD@)4Rs)%Hfhi<u6#)2hnPfQYC@#{ zF`4EN@ZV0p<#aMUFkKQl`+gEQ#cGaW?;31YfKc1s@9&pkWty7* zO-z_1fk|SXg`uZ2^&hSg9c~g0wTsSJ-aIJ`Ma152A-|+J^P~kn?lIZEP|8L1&6YJ^ zI2hjf|Mpy#2rtUt&lDx;JxWVOuvEn3hCv!Lq1*Xw$m|b~75;FIua5JSNfxh#`gFX= zPOHXdCG6Z8yagp~HcetqC+*PSxZ`M8_&<@&u$bg?=(oe~UtyNTr8ySo&b@un%bRLk z8ILtG`o{f)m@sqHWfIgyAV?9NTDw*YQ5FSw_Dlo@pfvW%;+^L1#mk+@l};G@R4l`MzlNYYqw> zoCN&%-e)a>*k=2GyAcW1P~pNPgX7_%`KuYCMq74$+nW`oYN*oy3m2W0SHJxUt0F|@ zo3WU_0tsEhm*tb|`*>XfmvWMQF&CO(_U*uF-v8r$)9eA8j#czF4^!-%x5`wP%8tX4 z%x9!o+8qhs!s3M+-)Rs;} zYn67pQjYz9#&n)KjP6DxSXaaqueiR@h#r%dm-i>nz0wd6lv|@$4TqL+1sy+tVRj|4 z<;WNLA(2GDMoF#mA8OE;81yuaC~=-dFObF;k)*o{Co?Drz>V#RpJOgGf<{Pgbb6cE zA#wWgw!-2b!?B_3Gf@&xQjUohOMJ;J1&;=Qvzwp4E;e8vOQif?Z!Jv`Ktf~g-5r;g zZ|XcG&&wv$V>ucs{I}jsNSL|*lZd>kldp3WuSpYRN|j@hV#*J|Es>s(%AE#Zh?0n_ zFs;jnN^eHX%kyD81}!es794;-4!Pe(@SLw$Xe-h`?fh$35QOTJAI>DsoWq9}uadre z`E_06$DfV=k>|y1P?oP4f0iq_2ibb#3NuQQoxjZNtKPy5YV{oI5+YDm0>TriS>psS zauIX8VmfIXn69@Rd++KTD>X_?8I#YVeFURmHkMJj<~6Q#Jlc+{)FwjC8Obs~YAxd84`$o?}{`}Vs&E01|kTM7|om{q#^CVlx3X# zE9Lp@iga!GQD^?s^*@kp@&j&P;t(-05#czZOzg2%i9ucBOaIs~MTe`>gPjh?%%Q=6 zLx@(AwB&d}rmR9zZ1`bnK_3)6_cPYS49bMfodjp4pRU7AZ)ft?nW zf6J3}FT-;0R{)ITB97y3;;6haw=NyJsq(+S-=#m4bTYkY?!?9N4-+*pRyjYR+tg5d zGPH?rO4W!X4BvAXrTgmd)w!=ZexVrWDFgf#&STw1{7C2{Nq5|p2z=|bLyK7lBO?RmjYtArVIVvnF=}nHp0j#LTF35Y+yr=Rae_i$+^LrR2|p?I z36v<2v8jE!$7J@EK{h~zP%8w9(?!aO{6y7>Tf(gJILa30XS_evXjaLvm@tj_&1)tXDSbRy3|-A9_~<0yiP;y zPEx|elWJ=%-0kG#{eR!R7zUE+AvjH=B~94Zz+iaTcGNegu@|FRhxMB5s+zVekMh1E2NAkr}>^NAdW;u>Tn3@YSl(Z4)QQg9J_yjefi+X)v2EN`Hvz&0XwVgbaUrqna_@BfE z4U{h89H-3UChZ%WmTiGdous7(bq=Zn3%g$TVal$3f9gpG>oTB6=*k{Wty|k_C4lha2G5`O;ak-Dd%%(2O*dJ`1%8p5wAV z>Z>SeQBJcfM8qCcQ4873H)zT-_GwasUhArB*4 zOwjvwP0t}dRfCCNi`_R{&#kr!k?sv8(_$vB9_n+=Q0k`+YX5B5i2=N1fA3yR!|G!}qElf4j!A`*W5irmN-6|}LQK>>lLt3qO zpj1vI9z+7uMsepUd@q&y)G9>VE!sWLMmR(L})%{23G2 z8Z{DsdGOpKsMfv&(mdra-qj|)jvUS}+)dl6W{u^Hm{k`xXy5mSa2xig576#dEiPy% zKQ^IHswt{3v=k;HL?b3#vzxq(1w**88 zb#K=6gucC#A~9e_<}s)1_wWb_!|hrG3b**A3X|3U82)emrxc7Nm8ah;#ZEW%Zl2SM zT_f%QvA@reH%T?hlNI_0?N-Q+DQ{4hCf`qKJ)|`5k8iGZvfJLuKK0ULXuYPd+gd*qKdv5}(v>{p@a8l_1?9a{JIq z2V?K$-eT-U%kRde!Y(=bst@B1u2HYthp@CGgTgn#LQatKDq1zrC-vZy)u|NE>20pZ zm%c$F{{k3vhb$y%N(oj97428OwGd-Iv==e1ro=k=oD?75pX_zdFvqOU_WvDqt3u`( zm-8Ehc7sKSTXj))XA@AD6E{h+#0EL5pm6P*!u-b_VonSkFx~RfE4xysIhNuY%#X!hHb6eIZG?EpAr)L{U16#8Qn3>9r{TB$ ze0Q=_XED%Wo)O=8Ns^9^y^2rqXF&bDTB0z)@Ow}c=#aWDJ$#!HFeC(oTnjF{a)Y5W z`Yt2e%Ys|+8I8&i6VU39h~?^zin>y#z&6-<%4oK!BdXtf!k*fNud<2o4J;yvg#Zr^ z_Fb4Nm51O*C)qVv@4F@wZuc&I<#}GU4ol0PV4{miE}&MivLf27fJmGg~Xv2F16!(6#N#+)nRct&R{mzOIukD4*c5B(3{7u zf1^bO6>2AL_>!kb)JkoZb{XNUPC_^IioqUaq<}^s+y!P z)~{R9lrv=1lfjYMNaS}zePF%9)V0~>!8U+}9%Z^P<=f2AKAF1dmol7|geFC4UY%TNDm5^5c5umh zZZ--4CM79@#gl(ViHmufgmo2SV*x4Q5ZXEZJw{SEH%GiMs@^OQf%G z+Tr;aUTyb12h81=+vp)n1bBQ)n?NNTS$xxGycJasM|_N~`GFmeIFhG7e(ga=?ZCeo z!xRIzo(94HN=PrvsJV=%DCockgr7>+gg}O9EGZ)3ZOxtaO1P*lXcaB{Nn$4UY%R_eppq(ssT24Ogd~hf_YAOO8iY9G z|J|;xku#ST=C6j>y5IPD;=S;yqcKS&N%P+gt?^zHc_xPQQxwQ!$5U!o2EyT}R`&GF z*SA6-$I0mTiwb>(>;N#Q;e*fLaB>YM*naYQcf#e(A$z60dJH;bTFCN{Viu%DQ2b?Q z1i3=#!fl#A6u>!)ah|L$t_zlYqbAKMqgfdcD!ix)c74vknDmCoJtbT^owQk+7LF@# z=&cXtpTXXiK9)1C*b1+X_Mlv1C9P>x;T~h>qhcWH@wBsUFli?OOS<8~kr4;%`NQ}l z>4A{M5*3IvS@0ch^5Aq(p{eL}I+|fe$eQJ~8-NC_Uc2kzuq2RT~ z%l0hO3_Dw%#iAw#zmqBFIdT#VaGLi>Q>SL%aQ`FR&z}n-%kTWmU@bn2ae@YZ^M*M1 z^uKKBfe%u@;wOZ0y8Ze$<0Ek4W4u$WsH!T6md-4i>`~2I(6GQYbtjZw<}c|UCWkXL z7JeBos#-iI-Y&P9s4&Gz?9wmHCr0&{kJV=BOj5LAR;-Tzo74E$rh65U{UcF zi2IZ19PiOm*eR?sxs4I88KWX zd3*g3x4z6JD$j2sywzwEJy@i5ls8L5HpO5#<;%cPpU-hPcgL#Wn;HxiB4koXTqn;c zF8@naPvEq%c!j)LdIH%m;7WR?dycAwwn5?B_TZp#ASsOKXuI8LdyKzv%^eqk$`#M+ zcc}qm+lLZ=QI~rlic^!h;3+d^a;*2OHcw|4VT}K#Q566a`ri;xdZ;Tc5m!U6jY3&@XMk|cfH-$`a z{GmJ3T!0ubUb?2~%EV2{_jdxD-|@VZ-o?4bd!!ftz#c>EEP}FD<-EfK)HgFL%ceHT z?HTea4f4flu2@9kqyBs-0rs*K)?8w?u1cDPZG_=o#3g4@f3&t{3|u>}g(wrQmR3*T zBU+m}NDDbFeg!@S)NjWD+IGB=l@H z3l$u?@dIF3HWA4h&2hNhHXXO=tp8C_PuYtwNE+RJIbRnDk5KiYNSfVng11AuAwp&G zt2;)yXL(vVZFM(;W!b|6`KVn?Q7l-ZWlNj0Q**k?pM%-DN5 zvd_UoPSl8G)0Sy)teRd;y#bgAmxp!QQ-{QJtTIYxp3ag%wfFZ~Gt#crx@(I^m3B;_ z4B07w$I2 z9G4Rad9e^GSU!h?F%nT&PPWi>XF-~bT$4FtSS?F&SPsdEIMAB>IG$BW6PusODY+Ln zrW?!TNVSV&ELifoH#w2kihoPR%?qKH>7p%AFZHCE3sMbJJip~&eSpySP)%y?JLY}j z;d2iE>0s^O#E+22U&<}&R~L@?B_<(<@072zi4*2<8-Y*kmy_5n#+*}!>eN5f64VLt z0jpG_sxo4PkU2!`YZl?2j^t^N1cV4*l|;PuLusgu{(Teq7MYg4Cwnf{_R#q;Qr#jq zVmKW1El%#ZE#9$wO%L}?0WFON${0V+bZaH$t3WXxniIo<8Cha-^$1ihq*{5Fi#T`; zl^Nb4dF~esXxk&`3`Z%`{F~)0l_{(MDCT8(ITHN%1@|~@G3tk0j|Xo!3&b~5gcKu! ze(yN7er~Y)*4y+NMhB$)JUS*F@$MVL7nwf;p4F-tf8JI5F_a7Fu?YKrw zpnoL_vsF*>986&edA53n@M3xRO+jiDr6aA&ncH|DHL!EiZyEHi3k}5<$$q*jbn1;N zzO{!FR6x+T`5=E9{U98{+Qo-s@jZID{ZAV3iG>_buMyPnJ>-=<63m4E*5aoDa~uc( z?G=62sF8R2_=76(%iVqKu?#AOr&9dTFd0HFA5!W0p3B$7<6vp_^I#x9DCa71ZEX!0 zo}Ntt8*P$KdE|P}OtsU4ix?t*I%X=6DG_Sx-@C{NVn#^|LgqeAz>f*gRjstsVqyHj zdbZEziMq2u{Pe~o4=OXRA$u@xfZ52r98No_=~i@Ga=+4&A3jh$u-Yd0i{%`-LrHad zD(l*sV=!TdbxW%lDZXs~r+k7$CDwfz+-*~++_|!&weH^kIFo82!E(#`${{?-K8F~1 zrChb}gDRg$AH7uph0!RK^!=V?hdv(U>!p<2wf-&sW!Ol2z#%#fgQfGHW%C_Xmfa)9 zKs$~WYL4_%5lw5rB{nAcAffZgS-Kq*^mMz6W*iIo&I&JX-6cD3pr3~Vy3JdRf zF(iHVp?c9ESps$tN#-;6HmSFPTBm`8`Yjr7~``3iMBu!9Ru@D2;k*yXL3}XIcKd1cg5kh^3bHt!q z&+JzqgW56jo^GfkjvcU27_=H{!k!MU2n%SnVB9y0A}um7y?gnojEDL5CH>MyhLy(t zfe=E1W?5&cR;R0RW#|FjW=}cjp8tp3+SpH&v~)4C%zrg_B#hzWuSkr$jYTy2jD2`(yJo|=+JzM2WfaV_aMkKwm)Qwm;lYYRQ!{-wY^9l8OXwpk_LbH5HQlPgkB{Q|8`6!yV#0M`)qfxrX4f<>lp)(3E%AR%&^{0-7Hmi4-H0Wlc5^jik^LfX`W0bBR5}GfBn+jVwH^Slf)`7GbnxO5;&bJ zAeNCHYX^>AySad&Bi4^5&D&E8?y;W6HF|d0hFyRM-f1qRg$01azTF)zp|QpMX!<-7 zI+S_(RFeIVITW~)%Yo}X#wHXZ?dwN=6eF-)gdfxj?c0^7;SbucK@@vjVrd7l7tylM z^no#J!BWf_&b|aka%_dixy88iHaOo ztBkyX3?SrZ$VwLEhm#$%`m|qqA z9HCMIe3*gbnm`(;Z(`Vey9fr~ zgF^EC!}>Ab%*>2$+4=UfJ;bnrS|e z;3pF;KNlDzE|?TYTsz+Uz>nXorcfO+wZ&XUq+hZ+hJmU+tl zmWlS`)H8F0jTUG?MmFazbR7Sin|m1V?87kT-ABBNrg6`K zJvvaC63NMf^vSC_snol^s>&g)>)1RC#&`3?;A3F`Sbfa8I^qwkcq61qC3_y9`--2K zy6UIsWnR!B>3P%KcqXXBrbDGdKa4AhdP_=GKE{Fm_QhuaGRbU&h15JD2G*GAq!{d+T z0a=0k+Y*9RJEzH4vd-`Yn&f_>F{#Iqu=uV~1@n>$%5)=yrBG)1yvEC(` zET6dMj0)*xLTYO-_C>4@_WQJxJuk6dQc3>9?Kjw>Y;d@YD*!5eZum{RLS{L3o084t zB38D~m)5ALqdCpjXlbV#gv97^?D0 zAf5bL2wCOw(UEpap22>oYEVIH0FeW#2QJBwP(3{WS=o zSPvJsQZYY%6xI9z1Le;So?(ARJa^N);jhpnXmYzk)jlRq8tOeVr z6{1h2o7mBBi@1AYn%R3{DUlFW3lQd>0kG#PGYQCVbCFq-%b{^!|7lxjkou_BTy3I= z{0lCxJElWskp+`=krIxXkG<8B_XY|X`**zBtg$|ZfYKAgBPhAx)ZbN#fc@Lb?Id#z-jJO2tY2Ih z*ju<+ixI{ISl(8#rk}RpTsm#4*+no9-e6fpX!xtp{xBFtQZKlneEQ?gbxBwLunqc_ zP1JM;P5hXtWPx?X`Ury7j^!Z2ePDzv^l0_LCGEK)3 zkbRWmgKs-JnJIejo{6u^`>MXW7LX>faHdfGtf?V_mkL5ZVF@6j$E;S(QPdOzB^ha` zm`PXf`_kvkH|aMbisjizLo^GFk{Cm%wM%_ajvw(`kh zrLRtMz1Y^py|?8D_o3hqc+#$u+xa*+UW0OSL`G>iD$HTlZ*m@hN(B$UH4T}gK5Rz6 zO}`f?uw>iDw9$95$l`_92nd1 zuS7{bXxp)S8^wcAq6!%UNRndXVeg%y&d?yMus0SQ+5&F0u|A={NDx?oj{1YVcOCi7@5ytqfejsXfavJx+m^~ZQa}$KE|NI! zoXVGLg5l8#w~>!%z>AWn+YCduq(hNPVA2 z_q{EroLFXyKj@h(wyN7V#cdd=bOpH1JV1nbppZZf$r$aDf5_ou()`?-a(qTR-3h(F ztp-z56+wJA`YS=)J5eN{Xb{pI+JRJf-fk4-Twe|~;J(Ngrn<6=PVe~Qd$n(brDvlo zj%nCX-QkV$2afRxSN#Thn{z#BKpm;_=}XWn%OM)N&#kWc1a_@I%d`U2RZ#<}`h}Dh zOV4v#6NFgrab-3+~+3auOt}%XkRvGvMj{9aSo8`Lo(qG)KNXY zS^*uIQu3P}Rzt~=x!qGD z)A!?@dPo>`SA;NJR&Yqi!Ib{?^Zfvx`c6uNw6l{M0c5=IIXa8>A?pjnxe{GVa>Wuv z+WrF?DW{D)2LpRX0#2>#(?Ic$ zKoswg`a;?h{DzSR$wG6VZmzBSo{RT@9Iji9zrWRsX!5#`kX-+Sq|b5d_jIad)`EZSUS1?7$zGH|`?FJxmvb&*y|cS}*{3P(gTDRr*ktML z!eNxbT+MjW!I#*4u@mOh466KG8aDt;o96&aE7~a5!ecMWW<_ht1RolM0n>Y^#L(tH zOLXs1u%h}QK{KUw6JvMyrR(4QJ1D&_GEZ8G+NZ9UZ3BNHi< z?Gpz>$_3udn)&aqDHbeq>ccx{XSX(n4_rPz^Ow6PmkT8ZOMtMPs-q|ymtzio7r%gE zxHk1Rs7z<^WXu?l>yRwI{Gk_Cr=P%eXNxgGU+8V`D645l$pF>{dT%1P2m}kC&Rb)v z2TdSWIwRTEB#A>1UKC-rBq*i_W0cGgKnEA=rD8RrMU;z$2qG3%e}@Jw0Lvw*N#!ML z%W2(IJMue#jF~dyR7Q2ze3>URaC7F^ivF8*85c2IMqNCkUX)3-oc8DXG}H|7-@CXi znZm+K9$D-78cgWR&Ju=3fV^26Xb&o_Z|GyH^whBXx^Uvec1&{EHTv}ArILei>x=z< z*Qma=lJ0tyl~l;ijeXwuCpHcksfE?^y{HhpXuC>6a7rc@+ak8yX-YnA=DLIcwKAy* zYR6eOQJl*;kzYF&95FfYpNby^(!2j5o%?nW`SF=eWmgA9kxVBCB&VQ3%2?DfFUixz{=PV4uMRsv)^uVHVsMSeToy zj}J|BNA(#>Xqsh!%O!qjMiM{j3@R^woZS+VFWVEwIZ3`Cv+xLti=yA(F9lJGX6p03 z5N3Md(WE&=spxI%&098u5UoLR8>mi??Vbm68O3+_2n}|vjVkG{XN3z^?a6V%;yA3i zdp&Me74zDg-=07`it6UF2IXqq8oyjyT=pI`b$$cr8KHoOWb@X>U0}miv>^NFOmmvp z?0xxW-SdExpKu5KJSQao#DR~70(Yq6yhTDf;v`*THZ{FJGV}`Ijrn}sfNJiAGd1Fm znoN|;@n$@knoE!DDE{Nz?xG&*3{V&tQWFDik0oi@x>OI1$sq~0pgO8mQ4Jxl!^y*3 ztf)S5;(GPt$=1luV{t=Q@ZLW+nPnpQyKZGDzq3pxp(%O@%d2VkUe2)|Asi_ z090)*lrc}I5g*pR?|YQ^fQ|h%F8{M)U&jwdwx~_VvFnO*gqFWZJyZJrN2a~IshbJR zob{dqAo%ru?;@r_7){d)kVn^!))ur*p--T-e}i-I(0@mURFO?1)}Ijen?M!RvtKuk zH`O4;iw1lS?j`RpIJ5 zP&+$P<1Sf&A0{gU05M~>2&<1rpUt2S0Uyt8>zqKIu^x5J)Ow!C&IIz#7SYiNl2q~O z0C;|z;I5n|$$jU0vG$9Uy_HPn?BRs)rrP;gs?P|XeaOo1I6t|O%DDZ|`vwcj!^aYD zc6-pjVlb@HX>Gjk&dwh0Q6Ef_(|rllwmY5bGk(7T^QTbsTd6zGXgz(0w=!(LHHl?= zs;tmy?B~tU`t~;OP6H(u0kJW`e=(w-)Q{mO7lT)|5PW4fN-P@W+Z$cQAhd?53D`MU70&vTj-q3|CtZ=x;J3PzP;dLsSb2m^vV$_Uu-vHb9U+!OgGuYlQV{cPUJvUXnk&va?fD>f zbF+3US@j>ZP7!V5#NT5wDL?n#jIBIZoub1N+;~HD2OFE83K?tjq>(o@q%c``mgH)O zTNqOl!qRjYpOMq$H$KcApSa1YzY`s*CvXRleMhS#j&!(c9Wn^ndfd@z*1vJbf)vEU z!a`x{idaZ}9L(x(vnmY&F=Iadj`0^Qr+8d@m77yJ%Fsg7%mk3|;D{SJMUCF?sQjG; zZj=4Q~-fDx01#U-%CE84rM@2w{kna3T^p8Xh^EaBGnW@w&x=5`gy`1$o z7;Ug#itN-DA<39qLH}(H=BBS%>qewYEhGYsdC~`a5z8jNS_|eUie4R&{6t<^nyNts zF3TY3iq3v^BA9tN)qM$jw?3-n(Wq2g)3us3)stABSP1{#ZX_#ObR2t`OrZ1#{7GWN zD3(|z{``q|UqZe*ytb(YdYP^*Q(Cz>ckG#j^&aI8^rN)mZZBql$gCv(QwmG~t8NQ= zv1Xwb)dZl*Af$7rA<+W-cPd7W9sY}L#RUfH6eyE)r~UOd@5Cw&F4}23!q4bs27Z8; zm>5Q^suu&<*+i|R#zL0E*7Z+ytxCg&s9Dkv&t6l5`!_dY(cll3ij-eZiR8kC!-$a* zCwS*e_`V%fMt^iDkkBip(ch9L6cl1w%^WXnS?d084KqA&vn9RXcnc|gk6MP_?6R`R zUM@l7x^U))6Nm3?Lt@f}m~N{}gY8m*iGfOh#h&V>IVAeS3^S*^qI{Es``R!yOQ~%X zHz-X$g>Lbd+{=?Ncqx?x#lH+Ce|ys5jUVARlPTd%6urzV(Sv-qTB921bBTn=u9(YM zulQL^TboX7gIa*OI?O+U!2Epq3w(S*h6|GTheB(=zRdPH_bX3kNsg1iVJs$SubRr`Q*CNv1VVFK9-s6HKIxTlmHB zv?goz$^eHFvaKvT0|i{{@b@P&>qCvwvBV^bQ2SPwI`4|L2Tj#g@@MXPfWGX&?TXP3 zd(yB?4NdbGAZdhXqwca?jn+>BHJe4m$X_rQ`$%LPGi-mYGzlEGf6*k3do{!gYBac8 z%*0v4V57C-MvLq1cz$`2qA$D0ZX$SRhHjtu>9K8NVV)EyZ{EQ_inZdxntmHTUy=FB z!M0mwzCZJ}3m~cYI(@zq;36aSOgwmMyUqu_q>VD_0ifliS5vPZj47{RDNyQ{ylxvm zVN42@@Sp zpFS7+E|%8&=5m@GxeUw(h|ZYx_{a+g67$R%xpjnw)CYmn52*ohZ>%A(jVzmuyD)#0 z$44uG;o5ex=Km%JP0K$zJ9@%#k%+qxf8%wq1!kuehydSZ6|ea2!3HUODHeK(-P;e9!{_#x8(*NMj;WgIoHo^TtZ zrAK=)RH;!~=3ixk{c$%`k#*-_N}m+JS*4+-W5rq2y$Oj+Z9Rc{gy5qDWI?A5NfZ|9 zbf3|-lveWW8-^?UjrbQBg@_)LJ3hdm1^~2q zbwSoop@+-*Bi9R#wdjg_J+wnisMeA=`C5J&xgZ))c$!5)?xgnc!2VuTJD=S_xc z=4Q@)Wa{LTn%#tf`AKq>I(RBL{)CPWucf$}`?;}1AV0)Z=rY^n)q=f{Bh^woF*1wZ zjGsG3HPdH zGXK%Op7*}p*~`@Xg|e!hPOG>%PaXfQaL2StB7E0v^z+j-Lti6qMeWo<;@+lf@J^IM z&lL3dR+#O4i}%Uja^pgR1cukrk>gpfhYsS1;{yf99>)G9del0Y+a{E$Sp(<0KZQ=B1Mj$lQ6Cf)ON#pG3Rc373CH%FF68d-6dKv!Qprb;drb~ zm%5{2>tPf-7Nh?@Dzybz+w2$JujrmdlL#gXbNw&4=i@GqA7z;rV~vxi7`1>-rRDy- zvAywWuW;vcQJTg-4JCr}VpL(&387%+AdD-(y%>cd8A@-p*^Htv-74Q&vmMSfTlJx5 zyQ`E~8C5*qD}GfJ=DUre8<3(p^R9iIRQbPoYZMH9s5A0s41qMuo8xYq5I(aG>cB^&RjjmRphHTs@x7Yjn%T-cr}9uMQ^V>MbnQv%-*l^`Gy)nc-05ybB@8Rbf%*h@)lVaMS^|$q`&&%Q z5``tyZfScFnTdxSAWFEzIH>92k(G)novLjD1t|y!ejOQc5jCAT=n?A{tD@;C25zh; zM55U;9N@x;Emu0O%1w@nx?W_LZF)3O!TquV0XeJ1Wt)6IUz%)1rt$Y^kAeBt3<)9p zFg|deEj_CVH+gnLu31JG;*^%506Vmzs@q#^C_3X+N!K#Db*lr)?_#FBr8XQy5949PSkCb;a#)id7cw*It4WOJ?FM#Ft1Q_>@rDcT7a7 z#07Gsomez{nKG`-oG5TGk*>0B zSJAx*$rq*l*PZH<{`C}ORU3X@5kGXWW4^1Lxd=<-;$TD8j z0i@^b8Bp^RE|^kqt!D+7KSG3<-|^AWY+}A5n;PwQ0uLYmr06`*N3bqd5V^L1b+EQu zl7az$lM6px4+*^&HbM@<>AKOFRjV-*CCFOu&m>fqLTwlguWXHIK`ZeN=;YUv&&NlR zz}Q}qg6yp7r}zPk6RzNNjxbu}x?x~`viTW!=#w9J`4%5PjYwJGI5VoCSn$hHi&N(j z@8W@zrNTC4moIA9iR&qcBE@0s`nY)q@VhQ=N0a`D2(^5X#FrXL%76c5JQa-a%4NQ$ zRBt!+<1m^;I7=Mf2%H)W`4dA0q<}Q4!R&a$iQ8j~>aYl2(kYEzMa*xCN`F)ApZ3j3 z#b>}o5O-#$)&1GMLKN2F9!s#4Lb>NyoK!XUx=!-D{NR~%RCEazADm;`+jbx3vrh20 z+?Z(q(T6=!ngkJP)oa;A%DxeQmu8u<*VMT(llm=X5l!Sf)u7rLdF6?J>G#RF9$n3& zPqFw0fFq4mXMU^CwSM`fn@zplfDY|dVM1<&uGPmgCiC(zDu_y?&8eB z$<|}1$v%@juP~oSFv@S9`C01sZYBl>oL|lm&VK{2X$$$?$Ovg*jY{dE z?{1Oojfw~vl5~g{+6aZxzyY7RqEYhXl<74sw~Q!@qiwA^n=U9o!mlA;uPpRwU7rmj z%rE85miH`Aer3ePG|vZ@8;p{~=BwPxZZ?@hkuf|aPHu|t1op%ze=f3nMF)0CawzFWKtSnk5fJH61f-yvBFZcN=X;>ZvVmb}FJ{!sRO*!>s&YCY2Gb81XOVRuyzfHndzVir;K zXehJ9yM9_>TUuJ$m7<{Bnf3IFKXSgYMo;wll>2*r9;ed=s6sKW4(__3Q_L;P2*%in z#9ipGQOeDSvp<)GoP%`z)tX;;+1JG*6Wdn9*k|K}TyojfGjb3$M#c!yQ|z3P;3Ja(3WhXjpjU`zC6i8KlD_ zE%^JX3K=rE5!lbI)1UmIwe~cH%u$5ge|qgzq)@j5#V5<48CGQ2$vt7benx|n`N2Ln zCQ|N{(1m%4be`Har5GW5JH!jhzre=&|x1chf>P(N$KpYrHtXPd%!#CLAgoI6CF&F)O!9WAJF$a135jRaH*WdJ2z(iOU^PrwyOghbJh8 z@aGkK7{b}q0{YpjZ%BRhI?L26^v}l~4IUVdJ3o|CPfai*Re})Vf#A;)zan7pFk`0Z z8EQDS=FeAz)X3e&!?ap*67rb1`c)ssFg`oItkF2H-FA6}NJo4 z7~y-(2cALZZgA{@b-05ZXVVkrWDlLx5{BP)f>%#&bG1{F}V@!dW%pV2y5 zSc1?hZu|w;x5&h~VB%%!%wXrAMS?2(MZ`e*pNTkNv&bLI+RtXq8S=C1=BWGOI*#o^J&(P`2VHNs&b;ED&<=Yn_>W!`gJp$>DEKj}FQ_X9Zp=CI zg@ZEGdO2Zp;YU6o88&ew-wZnu2?seeo^-y*rqphndnb?8;nWY9gwvb8ieI8m+#Bgq z*p_^?Aejmz*@*mpDljReL@gTvR2AbLn&6I%ZjYnI#@!GpDbd%N7U$hP-wQr9^lM4G zqWGUE85p47Vv$&d?lGo%t{)Xru445rElg{)`N;6=lfDDkX{R)* z9N3PMt5&m}#1^@UjtD=>cijeDiq%}}wM7t|KM+3oVV@XYYVw+FV%THvRqiA;Ic#N) zNvicNU^9&!^tHC9txrE6&0Zc!K^oFV_Dq##@9h1>)4NYqDf+74su~GONxLV4c8=U= zaIOrsK^2+)S7orkL_`~-D7qzeRy#_QH3_g2t~m{}yymo`6Ph~juo#w($Sq4K_NQyd zcU1*8nKqwZrqI+~L!cK{q{*MZ3%rGk@wVbL# zh`CyTAAq^~DgblbF(f&B=dx<45!~tNsdVRgjqSqq!P>@Vg9eUGNW0h_h#l=5Y>zHHu*mp@&4`7+zpP_+1wI**pwSZ8~0D3`Ib%DHA& z9d$n1Kds2F#YL$X-&`hGjr2y`n49?E>FWBCNwuFvb>g+<3$oWUQtl62F(W{tR@`z zBBMK3Z|6`a!!nKrk?jb##Jp?T>uTDGpC+X=mA!m_L8Zz< zPCT}aPV+%&&bUDt_j)HtI%|2T5BJHv9+_)9oy+fAd)(Jo@fuB3Lc7Nvcn2>(doEc` z|Lm5|6Ry7ZDHnZYF&fEG1=6`7Un}J#gNQ@5A&HJ6;7Vb_%HvGyRiZReapT0(rkscK z?PSG$VHefe+`lFRk3jT)u9sv%VuIFKf+(U<*LPmOvxV@KAB}IL650y}T4l7hADW34 zzB&B@swm$V)t^v#8$R7x$RD5u>&@=&U;4K_FdZB;JB>*c{aOTn+b%|JY4t;1x`5|8c1z0J1xb&{e$(te9Lb@;euZ3+#AfiaH){&bf< z?GV7i5>GkqORtQNK;1S7XG#S`0XCC7SLfWjoV105-Bdo;8@$3hAg~6ApU9xE?hKP- z_pa$=CW=x8K?tsg<@>twhy*W;XRcVSQ|1=gWKb!ouhbJ9(`%O}`Q_??+Q$8VyWQv{ zdm3WT$G$id5WXaFx~1WLApiK$Er2^}#PLPSKB`B@;auw6qDa*JJ83kPH(x{yAC++B z!qBJoFVD6o7zetT7}e=Uz|Dx>mK4wY(iOuD0sAO&_-oQ^U%jB@SdI@^>Wn0t5l)%B z-lSgPYIB;q;-dwVy7=yM@BuK)Oh|c>2!rxFPXyFWO26x`bG=t}1;^?MX?mTyP^3b= z=AMyObWmtxV<+p(R*4pSW&J--2jU2}3BZiOYbX^gqX-|R;l{$Bv5#s5_M^%VBt6OQ zKgT4Wm5`n?S?>*W)c9#Vo>>TJZJ8=!D=fxS> zX^=%qHl6Z(s4EJjI;h(gjjldZ7wwS#T=S8=n-&QbqjaFv?*+Ou3usm|eULI0o|G3y z}3IWqn@wp%&OPA@2xE@tv8$Z>R|~<887r0Ht|bR6GdC?Jrp#mlhH}0c44xLG(4VrG*l4;A#b4gUGYPvK}5Au8Kv~Yt8~1$oin8(xnorxbNTYHA78`Q3s%~6 zTL*zu(uoXX<-c|IRyc^#S4b2cprQI2F+NTr^( zh7$8=7FX9_^-ke!Kh+G+MXvBX+i8=>X8t!Pgb8UDREUyQD=cdhFVEL2XC6qUxxhc! z4zeU4^vw*^^^Azk;47SBHr*sP_H47n$!>Tb1FYzI?^y8M;8A+pG6?iTjI!*J8o{ah z#TO7<_|N`hbck9J`OQnE@sK$`CN%3r1#(7F0YU5hFZHNZNx`XnRY{~3EB~yNAf#t$ z4Xq;e($Y#SBq3KQ&FM#OyJ0#;dV6(NtjCm_ZIml>AKr8ID2l=Q`CyYTaq2T%7?8V) zzgH&kFUko?*j`3%t?CE#r7|baxVPD8#FXFHRlZG{JigdZ&c0l~g16|X*r>ZmZfTOy z()h;ODS@&RVllvKdOW{mY9pQIK_Qjrj9r);DdWFZI;*uBOE*qAbmN~!4(Pxdq;bL} zD7->+Rma+&{a;V^tc}h{BPGDjH;_{4KkD6FU#G|MtudIq7{#hTHiWa6R0KkmT{A=#(SBtSsTFuvpUAv#GCg$(G)M+SM%?P!i_ZM{Z;d+8k%R;ZcNBBuL<5HW(2hYEVH`hx*ymDZldMhxo=xv7Cbw1`(<6At=;Aa0xo5(mnp% zeiccVrcOV-=%qA1wkIRH5s%l;7Cq>sVvi}8K9q_>MiFmE&6naEX@&>$#Ik!^?}hEN zSX$gyuMNEyEAtwCj%VKrkE|~qxS3(A;}X>7+af2;m#nK_k5f2VM_Vo zQ*Mf>Z6rY?`-?BuGfnK8DX8tsP1kaF56i;XwgSnQvFf?_#~)sI34-F!6i*uISjdjy zZsH0d^1G7wBTqxNd!Hp~Ykm-)39)myqQ0ZGkezO+W>2CRjJCROcrFR+ZTMW9_ULr# z+96D7@l}>oqMQSlMzUpNJjjR2yjW~E9QsC2`xsluahOLoOg{_djKRL}nvCin5CeDb zk8t_Hqq{Rg!*L?B#8VHED=dTPRWd1D`@8XED6Wv@c%kurb$9Y$(M;1Oin5_!6*PM_ zg8&+aD56wa{I|4OdlVEI`TZ0rSRhQ#SKPlDF(GM>_i_&#{L28=_KIb~uQ^+o`5@-y z#ul?kimw6*0yUb+ai$H{qw?biIY6mGUJtJFjOQ|e2L2HGp{kKwdf5%oPfX3uzKz^Q zV`JJ#qt;-4*{Op|L)Q7geF%g1azW%<`L0gqD=1by_musDwQ)MU|& z87DP|_yw&kqw#WjJ^v>AEk)r2@O$Ig4fPwg;`D=_u~=&dy^zU)KSl)#Qbtzg7cgM| zV~3Vv1D`S8yvw&yv$3P9CV#%A&Gz+>8a-x4U|ug`dy}*M3rFB)ovti&J!(fH1hES5 zLDdz3#`*4+aM){fBx&-p!uaecTYUEv5af<_`wb9~feCvrU1!1v~1QoAzVn8yV8NjzrWg{s;S3DJit zz~#8Pw>^5i9Fa0T4V|l&*2S+;C)-k0$~0<(1%KVFpF4YHTy-+Be#?eqO83+0$%1B| z!A@$oMS!buvNGTG=$EDtQM9u?bs%(VfvL{gCj3OJz+yXW_rjn3Y&4-?ZyB<9;C#J< zHgtd|%Jh&PeGEhZjKT`2?Ql=yw}z7nE;Dja-kx37r+K`}D9^ZI^H9_Z2`i%J82(|v@cK-+{W-Js-jZG|`M*d~5NZ2l$bExX zgc;P?*Jx{^eoK{>?b+rv%(`ip6-xS}BiS=NRh#sOD}!EjI;TEywPC&%leIR*w`Q%! z8=@tG6uDXO)cR}u8C6U5#!;X)9uu@(oCnzcG{7p3iHWJ{9P?4*>={jE!j3(Ibc;37 zpUs?I-DS%(zN&+p%8!r1MIk$Y?w~DOa^DH7;@R5t<&}R@JQ=teA`IDFozn^%b;6PU zBokbR@e%cmG&?6*cKmeMEVmo1{DxZ-&_V82Nz&p+9UOsDfge`fbH`XAD~9Xs4tDR% zdcw3l<%#{(nZO4LAB~=vL#^?izTCN|%crK6cIE#jYq%*Q3E(~5TbLC{gks9lOCMkK z9+=KBU9JVF{kzSMH6+w-U~~j9uY2~aJA>&IeWcH&ms-9zgh_g!W#j_6^UYF@ZS(qD z6W-csFrXcKaq|xUw1WbP_9HM|CD7b_HlL8wJW(jKBx2s?Tx(Fr!_>!(V^wp}&IbQu zI5JExaQO#W47VlYc=wkRW@~L*k5@N;%LdUsNRZ!mV|ex*PDT4FY6{72{w~Ds#27J? z9ED5f9cSUB4q4^%od5$%dL)r;(d_fow=O$OgPmx=>zrav{d`n#Z5XJ|;lalGC2kBF zsw%e>U9tJq!qx3{Z8hAV&VDrQwE+wqy{4jNtN=@;rY00{1F0zL-s_H*!Hug|)D99J zU6(x#knH(&+Us@id*MY{tYlJc+^K!Jy2EbL*^X{w1C1e{nbSm>J+Z|gZB7_3zNx1n z>F$e*Jk9&iH$MIIU*PHoiu9t{zfQnHG9^b3x?}?Ng*8|~qA84_W5Eb7P{k@A?44$RkQH>J7Anx5WUpegmCYfj-_&E!s3;pTH=0*Nz(U`H4bB(vJ~(im-2c{ zjTZaREG1VqUBy~UsswAuQ);8QmD+jV7X>eDo0p&!y5w@7jO=phLvT>{X~DV?ixj|2 zMPq%;!aGOuDy_Kb@81p7q|3SMVC(E93g*A=vXpkBnsw>Zx#U0Lj?bJjFdjSq-euQp zLgEEHI%X1S&~JJh@~xT|Da@mH={HGX(5~zs=)I4@7n=Vvz-HJICyrWTO+(cw{b$>9=p<0FNp_WXpAK#keQR>k(<*8f zC&nL(P$a3BNccd_dQ<~0io+9nmDaMdh|87U)YkY;>vdrJuDV=2 z*{6#>Z-K=kz8U;`HedEOtQ&#ah8B%4H&mv(qb`b#bZgV;Ja>!z@!vuX;*HgCf-Mz( zZ=ntw4-+;_l3>|e7PQ+(A?Pj;uICT)(yEjoJx3I@xiyKR>&vDU`Ft#j?}mN1WWGEh z)~QXoAxO%BuV5PP>}|)z#q4cHH!sY^735TCnR?P=x(@R$`ESHxp$y>0rzg!C!(MAu zYD8J=uoDyr2!}|Baw78~<8IEn;`)VLU#1Nq(HOysmvE1bRTTu|!NJb;Rb~ijbRqS( z{QjdY^^=D%*!4V7G09DwZ85uY;W%R7a0HY5uR|f@?3$s#a-!L1U&zIH3M2Mt;bdHI zt;F@Vq|OkT5zJqe3ajUE{7qSGer>l@0$T9e<2;fZh*iRukA_SsT;b?H_r z`#sNCZnCxbSbg~7P`+}(`rnrOc7mXairx&%#(qcM(NzJTLT#@?X=L3~cXl(TNLF!{ zoKG=LiQYR$LEsjiJ=uWM1=;=(Aq8Br0WayXS9#r0WvSc zp3v*4v=ds-RKEQXM7q<#a@h8hua6qO`)J`Z!w?J*3wogQo7~-RuB@F=e{SBXX!-LI zi;F=hy8YLEVDu;$wbsmv0`ayXUn5^_dS=I&(*|sMZno-EW828!zn)YsDZTGfCw|}r z#!!D8998J@&`(dhB^m#hgS@6iF#Z~z8g%|J@U*>heQJUe14$Cy;+~&mTHwp2pRZnJ z+`CXcfz^iC3@K@|yLa1gc#-+g84}|y5@vWCrd z%hWRa#BXm|Lb>*@0pgG~S{Axx$;GXn_TUCDoohw~?vL=u80$6LJh%&!tIkYe*?7kR zm)DgYNkgL?Ij;&sa`GCk%&Vd(5RHG zn1lQ`q$Ky#Ew&PK@tm|ssHG()47uLVu|7`NG*jD%PP3R~8v;>9I|*Vg;kuZBnW#V( zE}bHA<1Hg!(-Ns(kj4%m%N(y7XZl$9$Pmzm zf2%mD(sg0o&$+xQhDGu^H&Vv6%YVL#KNs(mzs6vwWx6IT zm3rYh9dx?uR<5|uu9G^J(AVM~h6QU(7!NZ|<-Ha^u>JYfEsn>G)Rt~9x@PDB9uh3zA$t1S5yQQ68~(~ zn_U6X0_ul)oISurbLHP|F)CVIdFO0y`e0-!y%aYu>!)wnPd~nWZMOFQ%NvT0nv72e z-1#}!LJBhPLoVO zec_mn!*YneH^z6d-M;Dt`dNuqLief|H2$J&=9Z?(@9*7 zso(A(^zGXR$m@Y3Y1P!Aw#6r4S!UGyttgkUP_A;3A;b7?$$Y5%Zu{Yu3|KW0eB+N= zA?zfs1V)!VF}03{D(vsuXN6`q!89@beG|$5eCKPa4pOyJya1`xybUba+^*O_KGYfAen}pK4tLjEo*adiANrJ6 zzDads`P<< zmUgyrU^=FzeDmzkAu2jv9T@Jqda>bmCUJoRcu=xi1ukxsnQ}Dh_0D)UYXW%A+1esM z%N!b<%+FC1Jdw9bD}zWJy5Tun{KxRAR2z>W2jR6}_cv1=F^R@tGBPld@ki>EVev+- z5K?~FiIL=vHdduQO%4E4*8ai#m~<>jQWZ=JkNuqDEPrX3lm4l2ylV1XEmvC3_{R)7 z9Y);5!aG@h|GnqLNFuUas5nZwiP9&M(qq@F^>~RqsicfG(1@L^L9B^JS`@6{AbF-R z6UP($hb=}<#kY_3qPkL`;4sb2CBw|E=CacBvaC^2fdrRdiMLu4MLQCGy1KkptpAT% zBzve?%Z&8wekvbdnB2?9N1e!m^7F;S>Poda>6DDU?5fuX@xAJCZF z0~s06!V$Np;8GnTgP8yiGdca6WK#CO;&gKqf)=t>D{1Cvf0_IlY5HPxR6c`@(KL?0 zepOY}yn+K3d8FVzK}D$flM=y~6K_>vy&^q(#*fEoL91F#Qp%J=5AfQXA>rv3&W-!C ztI<$a5Sd_d*qpBRMIR$|bEwA!`5+{0qz}*ylXAXye+|1Z(#Mb1zs{XMdNw@2A)AV1 z>~6;^PkFVvJ5&{cAM}Ja@lyrLJy~CZlwCBPF>@+Ir2>h`^bGj1zR?r}{qPIJ*vbJx z{Efp_a?jYtGNNNZHhxgQ90GPR@wd0R*?r!Ut`1bqn{DrGhAV&;Ey07B4JPn#oh+n> zw_vdK`7}x0*H4YHNvjPdnetCf;-K&qZCMo1V*c)jWj1H|4ct*8wt}o1-T4n{Gmwa? z{D0*n5&#Dja?uaal)E>m;D{wKIM^D078nl~lK>^UE?b-S#tYz1Ln~^QnW+ijKokx2vbI-8B%eq>t>`seB&~-_SXLkbQE!9;8x?1FY_sVXF8B(r*NC< zv*|J}Rtql!Uv?KwB;oGNDZ3M`VTc)q~-7;%|5>FztZLhYN(=C`IH1H z&24?z+=!vS8b`L14xGKt0o*+Vg^bY`RiU;18eD8kd!@Sfu_*6)qu|gpu=-CDFj1!3})$=cK5E}&&oAPaZrtSb*Ph#qHBm#4$v!8Ia+W(GsxRLH| z{JL9&v+MaIg7{74rM^Z8Tvlwoo*mtB`my*N2jCSJgq-c;PWFB>jTH;AFOw-S=1Zyf zpI32HAX)k^ysD8wKnuxy^F7=&*XG+(T_~=LvCfXh$o9Ho2La!~Wibr|W#`mR*zr_< zU=EKaYUsD+y-3lRvrT3vEDD(+vHEl?p7L=q1ZiS3IDE)iI8>pyd0Rj`>v>m~n5 z&LcRG%}b4xIJ3G5Q%uxLXZSgaCvL*{-F}OV9&mNY_@a-6GAJ*w_&A7^HSI(+v!l(;cq+h zPhT>@!+`#RE`nm?quH8*_MBGPX04Fp$_Y9%>)I03K)SfoNDg8i zClSyAEa4iq$yHvpvF4Pmgp*Kl3W}Ooy2$_&6?#m@jiT;H0n3L%0Wd@4WOzVJmHwN> z`YV}mtEw`xGAHL|o31J^1JOzlom8RjfzNw;;oW{#D2-v@H%X4tA)n1J)p~eg9tD*^ z-(p8nCgHJol86vw_xujFz@A3N=wJN$q9WyeG=0A?gdUrL$)NEsq5{JHHfwUwa>yvT z1dST=(yA?{(_=! z1DqCbm{6XNB<>_!y;PpohX3MqmXhOW%{$8$7_3)`&-HI$j2}dR1Fb!FeB&|WL3X@L zS&*nyr<8P`09R;IiYA!8^7+gm%4|J9Jbc^6c zL7@(h>53I{kZZf=imO3^)NAh4ry882sDl`9Qe zMqB(JkpRnTt*c|S{-$Fom=tN@5Bf(F$_Giz%GviWIJq0t-cCUpWHT%rRRACZ*wd1_y386Vfqg z>lBYEBdg#A_$jv&&kL~eo?wgpoprO&$?YWxUj)q*)X0Q9x%z=YjIi#zHCe6)>m)6= zYCK8!`L-8tvyl@8 zp>_j|Nj&&wXq$RJ&U)C7uTr*EXA;4T<0XH~b5J%UU_hWBli)qO?msMqFfMI57%kG*+InJK7PZ@mKMVPK#Rj;qYB_&4>U z2-2^4Ab~$!?W5!1CTPeFS`Ei<99liTtC*A^;~EA~9MT|A5*^e0gJf`;$_9^aO~V0= zI_eQCP|GuP$CabU%#+p_eQbLmporA|u}Gaf95gj7Zr%m)QDfn?Wwitp2t1=CrTAVE zRDEXso_5X4)KS*>4;t*V;ph{S>wT{jysZbPGHRgxW-Z+;@;7<)MnMlNil~qG#M~d= z%u;H3vOyKv8zw+h+Y{0IG=W0&{X{|gt@Zm?vIPS!86t|uh$=k_Z2p*1w_%|RTc;5Y zM|?m_MJTR3z3lICApjoWPMq#b-+o<^&)a$hf(zjDKF@o<(t|P2(7L?}uolG_y@ZbzoA+Xn)~CK-4w_1R2O3I%WPJcGLVv zVpVMvTeR7UiOKX^N1!HR@j=^fArY@RUEVfd(n}f*#*-6w26yFHZaTJ2lJ+UP&X}{^ zz5p46RNMSS352oP+*4A9LCj^;hBbZpm+-Qo5b?Ee8~J|Xi(^f0 z2j%O8vgw%d2wG(GC-M0PdLkDUWdq=g1bGn^q#;zd2nrYC zM*sjnKksD#CnpksmM8-T$c5P+du;yRNAl(7`t1{SPDoNssE9T+XmEJW`g`-(F>X__ zUUQ}npUIZ|pAnTXGT9iSZCD&DvlG5quF-Q?Y>YTZrkjm1lEE*S>;uJxB<+veV$EadI}g3 zj+muue0_!ns(J98Mpi%lc?8 z3k3l_H#W98Pk*bh$|0t)b}y+}wfVH$J5*<8wg5Q#ItXj+a`*KwL*eIIH{XE~%nYPg zuFGCPVb6+FJ)f{d{mW<)#T)$a!@@ZlMVte8B-a)dm_nWI=%ro9(P(PQSN+yJq1_Hy zSg-HUp7UeQm5vyM{1glS`sQsdjaI*55!JAgW+zfhf!U(uJrx8|j6yZXNeAPi`%~3L z0Z&$b#}cPbZEhR@p*bIVH4-2ga*Ltrv=aM@nije1wmFC9vudh&nX&w!Ca!4nN`sIy z&`DM)EH{7D-zj61_w&cQ!tr+=U=qFMyrPMDIx>(lt8%(;Tc3xY`0b5S=|$OAHIyUx zL(Q})BTbKJQoY7K*#dbtk;-phhWkl=<$cNJi7fDM@JU`2VVX*eTdW86J()qeieuY$ zUpm_zC!pF1AHF;bVvn8h23+fz8Gi{#rqq)VUVX7cM&2wqE#F=9+FgD z6FnETY0>q_+r!)-Y4)z%!y!aiPucW$C6@V&+E=#}y`ag#k_*STw>mBM2EnVCf#vg} z?!|jw|0K^S@tIpk`K-O2d`RkIAZJ3G5Ri6St(zy76D0=vpTCNcGp)O1!tkiob;;GuvvHL7|zlrRp-D zyz`6&q?jo3vF>*Rd;1}k7>nZcX~9y^Hj&!knxMoF6X3GBPj^F32_X@c^Go6ujUOLk zOj%{0mhgVey~6+b&m=`d<#3GbUib!_^~?9J4h5bQp{8C}wP+xx@o9ljMybzBFs|Yv z{gABt$eC7G#tN9!?gyN&kIWHRhp(EG_dMcVQRMn2Em^5a#8E9_oKfu8H6 ztHsI(pDl$kwL!urYPLZ48|8|)_Ls)hTGu&t?!SG`ky-Z&04#wkZxi#s>na7nr7Slj zes>ppBX}|4zwu}g`}(4zH193X^0VVMHeb zj^X9}-XM39mOxvg)E{GW-c=+m#^X+?W@}3LQmqO#}3{lgQdn8zeUBA&x_?qA;c3+>-*izuQCo?)Rk5o-+o z<~x&Y`R&8Hd5_x3?DAdZtwm}cj~*u`ArS1|ywrEfJ?hIya+AUBLl8F5U+dY9N{w?e2+m_} zBc@TQ<$1dr#6Lhz){O@18@IYUA|b7$SZuPMeU%&@wcB@pk0gY=uE8AAwU{8?fW*vI zE_L>_^E$ShyZpt{)K~NmNr;($lpOmZ&s|Q}%*^=(~wLY-)V_I`I=|}kUj*!Y~&ZU3%9v=}> zu9c8K+5R!|vLMKlQXGjHxX`b(WR$v?E=mCQb(SAw6Mqb1v*!9YW^~BNmgi=nf1zr12FOkXSRBUnAwoIh>%|fhRSi zmL_R?f3>nEK@_4!bf$_osc^yWqI5vXA+=lnILxK>&>%H)Qw67HRtLrb{7t9%`ZG)5|=Ztm=zUlrTOvmb@d7)^$muAzv z#ARkoIEtBwvWb=c_OK`I&)u(=RmXD1-wy#oGa-p+(PQ9nL8Dr&VidG4`W!SidR*kx zwQ2T(JJG?+=-`Di&SVU8S;xj1bts5WJp_L!8A*&yfGr?7*!vcQPsm6m|Bj5Ph*NHF zSt_yk=E~2pn&6uTn>RMeK)B|nl!SN7*B=7yF>g}RA7u%|wJbP9l$3@A(HqPWaFI@c!*+Z3Q*pjl!ge7>n~ZEmq)ST0Q_}Z6c`O+4{nesHEZK& z^a(~34v&+s-UZTda|H|Bl58e$j>-*G@a$S`tn283`OdWu@0(l)`u^}y9L#H#+Az;q_-t{mt@z?SwUr>;f1~oBl~RKGUI~CD1)U*AcBFoCRDIgu%h%_Ri&1IHa(figJoj+n~fLfXdthjF$|xz zYy^~Ds6qT7$uMs-J&OwS=p9_UQA!B~p0MH#v+C#ki_0D6=<1(&LQA!91pEheKdPVp z2Q~+Ke~C|sw|VjKZg@mRLqyXQwp~-7CP9hHHsyZ0%73;7@03AtuNOJ%95IZISkdUE zq_kyvxKS_hccLot + + + + + + + + + + + + + + Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Overview#

    +

    SmallRye Stork 2.6.0 is a service discovery and client-side load-balancing framework.

    +

    The essence of distributed systems resides in the interaction between services. +In modern architecture, you often have multiple instances of your service to share the load or improve the resilience by redundancy. +But, how do you select the best instance of your service? +That’s where Stork helps. +Stork is going to select the most appropriate instance. +It offers:

    +
      +
    • Extensible service discovery mechanisms
    • +
    • Built-in support for Consul and Kubernetes
    • +
    • Customizable client load-balancing strategies
    • +
    • A programmatic API and a managed approach
    • +
    • A Quarkus integration, but Stork can be used in any environment
    • +
    +

    The problem#

    +

    In distributed systems, applications typically need to call one another. +In a monolithic application, components invoke one another through language-level method or procedure calls. +In a traditional distributed system deployment, services run at fixed, well-known locations (schemes, hosts, and ports) and can call one another using HTTP/REST or some RPC mechanism. The service locations are often hardcoded in the application configuration. +Nevertheless, a modern distributed system or microservice-based application typically runs in virtualized or containerized environments where the number of instances of a service and their locations change dynamically. +IPs get randomly assigned, and instances can be created or destroyed at any time. +With such dynamics, hard-coded locations are a dead-end.

    +

    the problem +the problem

    +

    The solution#

    +

    Stork handles the service lookup and selection. +It proposes an extensible set of service discovery mechanisms and load-balancing strategies.

    +

    the solution +the solution

    +

    What if the infrastructure provides such a feature?#

    +

    Some infrastructure, such as Kubernetes, provides service discoveries and load-balancing features. +However, these mechanisms often lack flexibility. You cannot influence the service instance selection, and the load-balancing strategy is generally a simple round-robin.

    +

    Stork provides more flexibility in the service instance selection. For example, it can select the fastest instance (based on the previous calls) to improve the response time. +However, if you don’t need that flexibility, just use the infrastructure layer.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/load-balancer/custom-load-balancer/index.html b/2.6.0/load-balancer/custom-load-balancer/index.html new file mode 100644 index 00000000..c7f686c4 --- /dev/null +++ b/2.6.0/load-balancer/custom-load-balancer/index.html @@ -0,0 +1,1147 @@ + + + + + + + + + + + + + + + + Custom Load Balancer - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    + +
    + + + +
    +
    + + + + + + + + + +

    Implement your own load balancer mechanism#

    +

    Stork is extensible, and you can implement your service selection (load-balancer) mechanism.

    +

    Dependencies#

    +

    To implement your Load Balancer Provider, make sure your project depends on Core and Configuration Generator. +The former brings classes necessary to implement custom load balancer, the latter contains an annotation processor that generates classes needed by Stork.

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-core</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +<dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-configuration-generator</artifactId>
    +    <scope>provided</scope>
    +    <!-- provided scope is sufficient for the annotation processor -->
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Implementing a load balancer provider#

    +

    Load balancer implementation consists of three elements:

    +
      +
    • LoadBalancer which is responsible for selecting service instances for a single Stork service,
    • +
    • LoadBalancerProvider which creates instances of LoadBalancer for a given load balancer type,
    • +
    • $typeConfiguration which is a configuration for the load balancer. This class is automatically generated.
    • +
    +

    A type, for example acme-load-balancer, identifies each provider. +This type is used in the configuration to reference the provider:

    +
    +
    +
    +
    stork.my-service.load-balancer.type=acme-load-balancer
    +
    +
    +
    +
    quarkus.stork.my-service.load-balancer.type=acme-load-balancer 
    +
    +
    +
    +
    +

    A LoadBalancerProvider implementation needs to be annotated with @LoadBalancerType that defines the type. +Any configuration properties that the provider expects should be defined with @LoadBalancerAttribute annotations placed on the provider. +Optionally, you can also add @ApplicationScoped annotation in order to provide the load balancer implementation as CDI bean.

    +

    A load balancer provider class should look as follows: +

     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    package examples;
    +
    +import io.smallrye.stork.api.LoadBalancer;
    +import io.smallrye.stork.api.ServiceDiscovery;
    +import io.smallrye.stork.api.config.LoadBalancerAttribute;
    +import io.smallrye.stork.api.config.LoadBalancerType;
    +import io.smallrye.stork.spi.LoadBalancerProvider;
    +import jakarta.enterprise.context.ApplicationScoped;
    +
    +@LoadBalancerType("acme-load-balancer")
    +@LoadBalancerAttribute(name = "my-attribute",
    +        description = "Attribute that alters the behavior of the LoadBalancer")
    +@ApplicationScoped
    +public class AcmeLoadBalancerProvider implements
    +        LoadBalancerProvider<AcmeLoadBalancerConfiguration> {
    +
    +    @Override
    +    public LoadBalancer createLoadBalancer(AcmeLoadBalancerConfiguration config,
    +                                           ServiceDiscovery serviceDiscovery) {
    +        return new AcmeLoadBalancer(config);
    +    }
    +}
    +

    +

    Note, that the LoadBalancerProvider interface takes a configuration class as a parameter. +This configuration class is generated automatically by the Configuration Generator. +Its name is created by appending Configuration to the load balancer type, like AcmeLoadBalancerConfiguration.

    +

    The next step is to implement the LoadBalancer interface.

    +

    The essence of load balancers’ work happens in the selectServiceInstance method. The method returns a single ServiceInstance from a collection.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    package examples;
    +
    +import java.util.ArrayList;
    +import java.util.Collection;
    +import java.util.Random;
    +
    +import io.smallrye.stork.api.LoadBalancer;
    +import io.smallrye.stork.api.NoServiceInstanceFoundException;
    +import io.smallrye.stork.api.ServiceInstance;
    +
    +public class AcmeLoadBalancer implements LoadBalancer {
    +
    +    private final Random random;
    +
    +    public AcmeLoadBalancer(AcmeLoadBalancerConfiguration config) {
    +        random = new Random();
    +    }
    +
    +    @Override
    +    public ServiceInstance selectServiceInstance(Collection<ServiceInstance> serviceInstances) {
    +        if (serviceInstances.isEmpty()) {
    +            throw new NoServiceInstanceFoundException("No services found.");
    +        }
    +        int index = random.nextInt(serviceInstances.size());
    +        return new ArrayList<>(serviceInstances).get(index);
    +    }
    +
    +    @Override
    +    public boolean requiresStrictRecording() {
    +        return false;
    +    }
    +}
    +
    +

    This implementation is simplistic and just picks a random instance from the received list.

    +

    Some load balancers make the pick based on statistics such as calls in progress or response times, or amount of errors of a service instance. +To collect this information in your load balancer, you can wrap the selected service instance into ServiceInstanceWithStatGathering.

    +

    Load balancers based on statistics often expect that an operation using a selected service instance is marked as started before the next selection. +By default, Stork assumes that a LoadBalancer requires this and guards the calls accordingly. +If this is not the case for your implementation, override the requiresStrictRecording() method to return false.

    +

    Using your load balancer#

    +

    In the project using it, don’t forget to add the dependency on the module providing your implementation. +Then, in the configuration, just add:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=...
    +stork.my-service.load-balancer.type=acme-load-balancer\
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=...
    +quarkus.stork.my-service.load-balancer.type=acme-load-balancer
    +
    +
    +
    +
    +

    Then, Stork will use your implementation to select the my-service service instance.

    +

    Using your load balancer using the programmatic API#

    +

    When building your load balancer project, the configuration generator creates a configuration class. +This class can be used to configure your load balancer using the Stork programmatic API.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    package examples;
    +
    +import io.smallrye.mutiny.Uni;
    +import io.smallrye.stork.api.ServiceDefinition;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.api.StorkServiceRegistry;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration;
    +
    +public class AcmeSelectorApiUsage {
    +
    +    public void example(StorkServiceRegistry stork) {
    +        String list = "localhost:8080, localhost:8081";
    +        stork.defineIfAbsent("my-service", ServiceDefinition.of(
    +                new StaticConfiguration().withAddressList(list),
    +                new AcmeLoadBalancerConfiguration().withMyAttribute("my-value"),new StaticRegistrarConfiguration())
    +        );
    +
    +        Uni<ServiceInstance> uni = stork.getService("my-service").selectInstance();
    +    }
    +
    +}
    +
    +

    Remember that attributes, like my-attribute, are declared using the @LoadBalancerAttribute annotation on the LoadBalancerProvider implementation.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/load-balancer/least-requests/index.html b/2.6.0/load-balancer/least-requests/index.html new file mode 100644 index 00000000..bea2f27f --- /dev/null +++ b/2.6.0/load-balancer/least-requests/index.html @@ -0,0 +1,939 @@ + + + + + + + + + + + + + + + + Least Requests - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Least Requests Load Balancing#

    +

    The least-requests load balancing strategy monitors the number of inflight calls and selects the less-used instance.

    +

    This strategy keeps track of the inflight calls made by the application and picks the service instance with the smallest number of inflight requests:

    +
      +
    1. when the selection happens, the service instance with the smallest number of inflight requests is selected, and this number is incremented
    2. +
    3. when the operation completes, successfully or not, the number of inflight requests is decremented
    4. +
    +

    Dependency#

    +

    First, you need to add the least-requests load-balancer to your project:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-load-balancer-least-requests</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Configuration#

    +

    For each service expected to use a least-response-time selection, configure the load-balancer to be least-requests:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=...
    +stork.my-service.service-discovery...=...
    +stork.my-service.load-balancer.type=least-requests
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=...
    +quarkus.stork.my-service.service-discovery...=...
    +quarkus.stork.my-service.load-balancer.type=least-requests
    +
    +
    +
    +
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/load-balancer/power-of-two-choices/index.html b/2.6.0/load-balancer/power-of-two-choices/index.html new file mode 100644 index 00000000..7ff58721 --- /dev/null +++ b/2.6.0/load-balancer/power-of-two-choices/index.html @@ -0,0 +1,961 @@ + + + + + + + + + + + + + + + + Power Of Two Choices - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Power Of Two Choices Load Balancing#

    +

    The power-of-two-choices load balancing selects two random service instances and then chooses the one with the least inflight requests. +It avoids the overhead of least-requests and the worst case for random where it selects a busy destination.

    +

    This strategy acts as follows:

    +
      +
    1. when the selection happens, it picks two random instances from the list,
    2. +
    3. it returns the least loaded instance (based on the number of inflight requests),
    4. +
    5. when the operation completes, successfully or not, the number of inflight requests for the instance is decremented.
    6. +
    +

    Check The Power of Two Random Choices paper to learn more about this pattern and the benefits.

    +

    Dependency#

    +

    First, you need to add the random load-balancer to your project:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-load-balancer-power-of-two-choices</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Configuration#

    +

    For each service expected to use a random service selection, configure the load-balancer to be power-of-two-choices:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=...
    +stork.my-service.service-discovery...=...
    +stork.my-service.load-balancer.type=power-of-two-choices
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=...
    +quarkus.stork.my-service.service-discovery...=...
    +quarkus.stork.my-service.load-balancer.type=power-of-two-choices
    +
    +
    +
    +
    +

    Supported attributes are the following:

    + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    use-secure-randomNofalseWhether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/load-balancer/random/index.html b/2.6.0/load-balancer/random/index.html new file mode 100644 index 00000000..392c281b --- /dev/null +++ b/2.6.0/load-balancer/random/index.html @@ -0,0 +1,953 @@ + + + + + + + + + + + + + + + + Random - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Random Load Balancing#

    +

    The random load balancing is a straightforward service instance selection solution that picks a random instance every time.

    +

    Dependency#

    +

    First, you need to add the random load-balancer to your project:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-load-balancer-random</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Configuration#

    +

    For each service expected to use a random service selection, configure the load-balancer to be random:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=...
    +stork.my-service.service-discovery...=...
    +stork.my-service.load-balancer.type=random
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=...
    +quarkus.stork.my-service.service-discovery...=...
    +quarkus.stork.my-service.load-balancer.type=random
    +
    +
    +
    +
    +

    Supported attributes are the following:

    + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    use-secure-randomNofalseWhether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/load-balancer/response-time/index.html b/2.6.0/load-balancer/response-time/index.html new file mode 100644 index 00000000..f2e8efd7 --- /dev/null +++ b/2.6.0/load-balancer/response-time/index.html @@ -0,0 +1,1008 @@ + + + + + + + + + + + + + + + + Response Time - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Least Response Time Load Balancing#

    +

    The least-response-time load balancing strategy collects response times of the calls made with service instances and picks an instance based on this information.

    +

    Erroneous responses are treated as responses with a long response time, by default 60 seconds. This can be controlled with the error-penalty attribute.

    +

    The algorithm for service instance selection is as follows:

    +
      +
    • if there is a service instance that wasn’t used before - use it, otherwise:
    • +
    • if there are any service instances with collected response times - select the one for which score is the lowest, otherwise:
    • +
    • select a random instance
    • +
    +

    The score for an instance decreases in time if an instance is not used. This way we ensure that instances that haven’t been used in a long time, are retried.

    +

    For the details on the score calculation, see Score calculation

    +

    Dependency#

    +

    To use this load balancer, start with adding the least-response-time load-balancer dependency to your project:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-load-balancer-least-response-time</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Configuration#

    +

    For each service expected to use a least-response-time selection, configure the load-balancer to be least-response-time:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=...
    +stork.my-service.service-discovery...=...
    +stork.my-service.load-balancer.type=least-response-time
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=...
    +quarkus.stork.my-service.service-discovery...=...
    +quarkus.stork.my-service.load-balancer.type=least-response-time
    +
    +
    +
    +
    +

    The following attributes are supported:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    declining-factorNo0.9How much score should decline in time, see Score calculation in the docs for details.
    error-penaltyNo60sThis load balancer treats an erroneous response as a response after this time.
    use-secure-randomNofalseWhether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference
    +

    Score calculation#

    +

    The score of a service instance is calculated by dividing a weighted sum of response times by sum of the weighs. The result is additionally adjusted to account for instances that haven’t been used for a long time.

    +

    Let:

    +
      +
    • \(n\) denote how many instance selections were made so far
    • +
    • \(t_i\) denote the response time for call \(i\)
    • +
    • \(n_i\) denote the number of instance selections done until the moment of recording the response time for call \(i\)
    • +
    • \(n_{max}\) denote the number of instance selections at the moment of last call recorded with this instance
    • +
    • \(\delta\) denote a configurable declining-factor
    • +
    +

    The idea for the weight is to decrease the importance of the data collected long time (many calls) ago. For call \(i\), the weight is calculated as follows: +$$ +w_i = \delta ^ {(n - n_i)} +$$

    +

    The score of a service instance is calculated as: +$$ +score(n) = \delta^{n - n_{max}} * \frac{\sum_i t_i * w_i}{\sum_i w_i} = +\delta^{n - n_{max}} * \frac{\sum_i t_i * \delta^{n - n_i}}{\sum_i \delta^{n - n_i}} +$$

    +

    The declining-factor should be in \((0, 1]\) , the default is \(0.9\). Using a lower value makes the older response times less important.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/load-balancer/round-robin/index.html b/2.6.0/load-balancer/round-robin/index.html new file mode 100644 index 00000000..13ae814e --- /dev/null +++ b/2.6.0/load-balancer/round-robin/index.html @@ -0,0 +1,917 @@ + + + + + + + + + + + + + + + + Round Robin - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Round-Robin Load Balancing#

    +

    The round-robin is a straightforward load-balancing solution that just iterates over the set of service instances. +While being simple, this solution shares the load among the instances and may be sufficient in many cases.

    +

    The round-robin strategy is the default load-balancing strategy. +It is provided by Stork itself, and so does not require an additional dependency.

    +

    Configuration#

    +

    There is no need to configure the load-balancing strategy to be round-robin. +Stork automatically uses this strategy when none are configured.

    +

    However, you can also configure it explicitly as follows:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=...
    +stork.my-service.service-discovery...=...
    +stork.my-service.load-balancer.type=round-robin
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=...
    +quarkus.stork.my-service.service-discovery...=...
    +quarkus.stork.my-service.load-balancer.type=round-robin
    +
    +
    +
    +
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/load-balancer/sticky/index.html b/2.6.0/load-balancer/sticky/index.html new file mode 100644 index 00000000..0fb1cc78 --- /dev/null +++ b/2.6.0/load-balancer/sticky/index.html @@ -0,0 +1,944 @@ + + + + + + + + + + + + + + + + Sticky - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Sticky Load Balancing#

    +

    The sticky load balancer selects a single service instance and keeps using it until it fails. +Then, it selects another one.

    +

    It is possible to configure a backoff time to specify for how long a failing service instance should not be retried.

    +

    Precisely, the load balancer works as follows:

    +
      +
    • if no service instance has been selected so far, select the first instance from the collection;
    • +
    • else if the previously selected service instance has not failed, and is still available, return it;
    • +
    • else return the first available service instance that has no recorded failure, if one exists;
    • +
    • else, find the available instance for which the time since the last failure is the longest, and
        +
      • if the backoff time since the failure passed, return it;
      • +
      • or, throw an NoAcceptableServiceInstanceFoundException as no acceptable instances are available.
      • +
      +
    • +
    +

    Configuration#

    +

    To use the sticky load service selection strategy, set the load balancer type to sticky:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=...
    +stork.my-service.service-discovery...=...
    +stork.my-service.load-balancer.type=sticky
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=...
    +quarkus.stork.my-service.service-discovery...=...
    +quarkus.stork.my-service.load-balancer.type=sticky
    +
    +
    +
    +
    +

    The following attributes are supported:

    + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    failure-backoff-timeNo0After how much time, a service instance that has failed can be reused.
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/microprofile-config/index.html b/2.6.0/microprofile-config/index.html new file mode 100644 index 00000000..cdf321f6 --- /dev/null +++ b/2.6.0/microprofile-config/index.html @@ -0,0 +1,955 @@ + + + + + + + + + + + + + + + + Microprofile Configuration - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Stork MicroProfile Config#

    +

    Stork integrates with MicroProfile Configuration out of the box, enabling seamless access to configuration properties. +This documentation explains how Stork can retrieve configuration details from the MicroProfile Config file present in the classpath. +Quarkus uses this approach for reading configuration details from the MicroProfile Config file located within the classpath.

    +

    Dependency setup#

    +

    To enable MicroProfile Config integration in Stork, you need to include the following dependency:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>smallrye-stork-microprofile</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Initializing Stork#

    +

    If your framework lacks a pre-configured Stork instance, you’ll need to perform initialization:

    +

     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.ServiceDefinition;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.loadbalancer.random.RandomConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration;
    +
    +import java.time.Duration;
    +
    +public class InitializationExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +        // ...
    +    }
    +}
    +
    +Upon initialization, Stork scans for the io.smallrye.stork.config.MicroProfileConfigProvider SPI provider and CDI beans (from version 2.x onwards). It then builds a comprehensive list of managed services by parsing the properties configuration files.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/observability/index.html b/2.6.0/observability/index.html new file mode 100644 index 00000000..45002ecc --- /dev/null +++ b/2.6.0/observability/index.html @@ -0,0 +1,1147 @@ + + + + + + + + + + + + + + + + Observability - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Stork Observability API#

    +

    Stork proposes an observability API that automatically observes some parameters to show how the Stork service discovery and selection are behaving.

    +

    For any observation to happen, you need to provide your own implementation of an ObservationCollector. By default, Stork provides a no-op implementation.

    +

    The ObservationCollector is responsible for instantiating the StorkObservation.

    +

    The StorkObservation reacts to Stork events thanks to a StorkEventHandler.

    +

    You can extend the metrics collection by extending the StorkEventHandler interface.

    +

    The following sequence diagram shows how the observability is initialized :

    +

    observability initialization +observability initialization

    +

    The StorkObservation registers times, number of discovered instances, the selected instance and failures by reacting to the lifecycle of a Stork event such as:

    +
      +
    • start : Observation has been started. +The beginning time is registered. +It happens when the ObservationCollector#create() method gets called.
    • +
    • service discovery success: a collection of instances has been successfully discovered for a service. +The end discovery time and number of instances are recorded. +It happens when the StorkObservation#onServiceDiscoverySuccess gets called.
    • +
    • service discovery error: an error occurs when discovering a service. +The end discovery time and failure cause are captured. +It happens when the StorkObservation#onServiceDiscoveryFailure gets called.
    • +
    • service selection success: an instance has been successfully selected from the collection. +The end selection time and selected instance ID are registered. +It happens when the StorkObservation#onServiceSelectionSuccess gets called.
    • +
    • service selection error: an error occurred during selecting the instance. +End selection time and failure cause are registered. +It happens when the StorkObservation#onServiceSelectionFailure gets called.
    • +
    • end: Observation has finished. Overall duration is registered. +It happens when the StorkObservation#onServiceSelectionSuccess gets called.
    • +
    +

    The following sequence diagram represents the described observation process above:

    +

    observation_process + observation_process

    +

    Implementing an observation collector#

    +

    An ObservationCollector implementation must override the create method to provide an instance of StorkObservation. +In addition, the user can access and enrich the observation data through the StorkEventHandler.

    +

    A custom observation collector class should look as follows:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.observability.ObservationCollector;
    +import io.smallrye.stork.api.observability.StorkEventHandler;
    +import io.smallrye.stork.api.observability.StorkObservation;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
    +
    +public class AcmeObservationCollector implements ObservationCollector {
    +
    +    private static final Logger LOGGER = LoggerFactory.getLogger(AcmeObservationCollector.class);
    +
    +    private static final StorkEventHandler ACME_HANDLER = event -> {
    +        //This is the terminal event. Put here your custom logic to extend the metrics collection.
    +
    +        //E.g. Expose metrics to Micrometer, additional logs....
    +        LOGGER.info( "Service discovery took " + event.getServiceDiscoveryDuration() + ".");
    +        LOGGER.info( event.getDiscoveredInstancesCount() + " have been discovered for " + event.getServiceName() + ".");
    +        LOGGER.info( "Service selection took " + event.getServiceSelectionDuration() + ".");
    +
    +        //        ...
    +
    +    };
    +
    +    public static StorkObservation ACME_STORK_EVENT;
    +
    +    @Override
    +    public StorkObservation create(String serviceName, String serviceDiscoveryType,
    +                                   String serviceSelectionType) {
    +        ACME_STORK_EVENT = new StorkObservation(
    +                serviceName, serviceDiscoveryType, serviceSelectionType,
    +                ACME_HANDLER);
    +        return ACME_STORK_EVENT;
    +    }
    +}
    +
    +

    The next step is to initialize Stork with an ObservableStorkInfrastructure, taking an instance of your ObservationCollector as parameter.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.integration.ObservableStorkInfrastructure;
    +
    +public class ObservableInitializationExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize(new ObservableStorkInfrastructure(new AcmeObservationCollector()));
    +        Stork stork = Stork.getInstance();
    +        // ...
    +    }
    +}
    +
    +

    Then, Stork uses your implementation to register metrics.

    +

    Observing service discovery and selection behaviours#

    +

    To access metrics registered by StorkObservation, use the following code:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    package examples;
    +
    +import io.smallrye.mutiny.Uni;
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.Service;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.api.observability.ObservationCollector;
    +import io.smallrye.stork.api.observability.StorkObservation;
    +
    +import java.time.Duration;
    +import java.util.List;
    +import java.util.Map;
    +
    +import static examples.AcmeObservationCollector.*;
    +
    +public class ObservationExample {
    +
    +    public static void example(Stork stork) {
    +        Service service = stork.getService("my-service");
    +
    +        ObservationCollector observations = service.getObservations();
    +
    +        // Gets the time spent in service discovery and service selection even if any error happens
    +        Duration overallDuration = ACME_STORK_EVENT.getOverallDuration();
    +
    +        // Gets the total number of instances discovered
    +        int discoveredInstancesCount = ACME_STORK_EVENT.getDiscoveredInstancesCount();
    +
    +        // Gets the error raised during the process
    +        Throwable failure = ACME_STORK_EVENT.failure();
    +
    +        //        ...
    +
    +    }
    +}
    +
    +

    Stork Observability with Quarkus#

    +

    Stork metrics are automatically enabled when using Stork together with the Micrometer extension in a Quarkus application.

    +

    Micrometer collects the metrics of the rest and grpc client using Stork, as well as when using the Stork API.

    +

    As an example, if you export the metrics to Prometheus, you will get:

    +
    # HELP stork_load_balancer_failures_total The number of failures during service selection.
    +# TYPE stork_load_balancer_failures_total counter
    +stork_load_balancer_failures_total{service_name="hello-service",} 0.0
    +# HELP stork_service_selection_duration_seconds The duration of the selection operation 
    +# TYPE stork_service_selection_duration_seconds summary
    +stork_service_selection_duration_seconds_count{service_name="hello-service",} 13.0
    +stork_service_selection_duration_seconds_sum{service_name="hello-service",} 0.001049291
    +# HELP stork_service_selection_duration_seconds_max The duration of the selection operation 
    +# TYPE stork_service_selection_duration_seconds_max gauge
    +stork_service_selection_duration_seconds_max{service_name="hello-service",} 0.0
    +# HELP stork_overall_duration_seconds_max The total duration of the Stork service discovery and selection operations
    +# TYPE stork_overall_duration_seconds_max gauge
    +stork_overall_duration_seconds_max{service_name="hello-service",} 0.0
    +# HELP stork_overall_duration_seconds The total duration of the Stork service discovery and selection operations
    +# TYPE stork_overall_duration_seconds summary
    +stork_overall_duration_seconds_count{service_name="hello-service",} 13.0
    +stork_overall_duration_seconds_sum{service_name="hello-service",} 0.001049291
    +# HELP stork_service_discovery_failures_total The number of failures during service discovery
    +# TYPE stork_service_discovery_failures_total counter
    +stork_service_discovery_failures_total{service_name="hello-service",} 0.0
    +# HELP stork_service_discovery_duration_seconds_max The duration of the discovery operation
    +# TYPE stork_service_discovery_duration_seconds_max gauge
    +stork_service_discovery_duration_seconds_max{service_name="hello-service",} 0.0
    +# HELP stork_service_discovery_duration_seconds The duration of the discovery operation
    +# TYPE stork_service_discovery_duration_seconds summary
    +stork_service_discovery_duration_seconds_count{service_name="hello-service",} 13.0
    +stork_service_discovery_duration_seconds_sum{service_name="hello-service",} 6.585046209
    +# HELP stork_instances_count_total The number of service instances discovered
    +# TYPE stork_instances_count_total counter
    +stork_instances_count_total{service_name="hello-service",} 26.0
    +
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/programmatic-api/index.html b/2.6.0/programmatic-api/index.html new file mode 100644 index 00000000..7edcc345 --- /dev/null +++ b/2.6.0/programmatic-api/index.html @@ -0,0 +1,1186 @@ + + + + + + + + + + + + + + + + Programmatic API - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Stork Programmatic API#

    +

    Stork proposes a programmatic API that lets you register new service Definitions and do manual lookup and selection. +When using the programmatic API of Stork, you can: +Retrieve the singleton Stork instance. This instance is configured with the set of Services it manages. +Register new service definition. +Retrieve the Service you want to use. Each Service is associated with a name. +Retrieve the ServiceInstance, which will provide the metadata to access the actual instance.

    +

    Initializing Stork#

    +

    If your framework does not already provide a configured Stork instance, you need to do:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.ServiceDefinition;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.loadbalancer.random.RandomConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration;
    +
    +import java.time.Duration;
    +
    +public class InitializationExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +        // ...
    +    }
    +}
    +
    +

    Adding service dynamically#

    +

    To register a new ServiceDefinition, use the defineIfAbsent method:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.ServiceDefinition;
    +import io.smallrye.stork.loadbalancer.random.RandomConfiguration;
    +import io.smallrye.stork.servicediscovery.consul.ConsulRegistrarConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration;
    +
    +public class DefinitionExample {
    +
    +    public static void example(Stork stork) {
    +        String example = "localhost:8080, localhost:8081";
    +
    +        // A service using a static list of locations as discovery
    +        // As not set, it defaults to round-robin to select the instance.
    +        stork.defineIfAbsent("my-service",
    +                ServiceDefinition.of(new StaticConfiguration().withAddressList(example)));
    +
    +        // Another service using the random selection strategy, instead of round-robin
    +        stork.defineIfAbsent("my-second-service",
    +                ServiceDefinition.of(new StaticConfiguration().withAddressList(example),
    +                        new RandomConfiguration()));
    +
    +        // Another service using the random selection strategy, instead of round-robin
    +        // and a static service registrar
    +        stork.defineIfAbsent("my-second-service",
    +                ServiceDefinition.of(new StaticConfiguration().withAddressList(example),
    +                        new RandomConfiguration(), new StaticRegistrarConfiguration()));
    +    }
    +}
    +
    +

    The ServiceDefinition instances can be created from:

    +
      +
    • A service discovery configuration - these classes are provided by the service discovery implementations,
    • +
    • An optional load balancer configuration - these classes are provided by the load balancer implementations
    • +
    +

    Attributes from the service discovery and load balancer can be configured from the Configuration classes.

    +

    Looking for service instances#

    +

    To list the service instances for a given service, or to select an instance according to the load balancer strategy, use the following code:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    package examples;
    +
    +import io.smallrye.mutiny.Uni;
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.Service;
    +import io.smallrye.stork.api.ServiceDefinition;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.loadbalancer.random.RandomConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration;
    +
    +import java.util.List;
    +import java.util.Map;
    +
    +public class LookupExample {
    +
    +    public static void example(Stork stork) {
    +        Service service = stork.getService("my-service");
    +
    +        // Gets all the available instances:
    +        Uni<List<ServiceInstance>> instances = service.getInstances();
    +        // Select one instance using the load balancing strategy
    +        Uni<ServiceInstance> instance = service.selectInstance();
    +
    +        // Gets all the managed services:
    +        Map<String, Service> services = stork.getServices();
    +    }
    +}
    +
    +

    The lookup and selection methods are returning Uni as these processes are asynchronous.

    +

    All in one example#

    +

    The following snippet provides an all in one example of the Stork programmatic API:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.api.ServiceDefinition;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.loadbalancer.random.RandomConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration;
    +import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration;
    +
    +import java.time.Duration;
    +
    +public class StorkApiExample {
    +
    +    public static void main(String[] args) {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +
    +        String example = "localhost:8080, localhost:8082";
    +
    +        // A service using a static list of locations as discovery
    +        // As not set, it defaults to round-robin to select the instance.
    +        stork.defineIfAbsent("my-service",
    +                ServiceDefinition.of(new StaticConfiguration().withAddressList(example)));
    +
    +        // Another service using the random selection strategy, instead of round-robin
    +        stork.defineIfAbsent("my-second-service",
    +                ServiceDefinition.of(new StaticConfiguration().withAddressList(example),
    +                        new RandomConfiguration()));
    +
    +        ServiceInstance instance = stork.getService("my-second-service").selectInstance()
    +                .await().atMost(Duration.ofSeconds(1));
    +        System.out.println(instance.getHost() + ":" + instance.getPort());
    +
    +        // Another service using the random selection strategy, instead of round-robin
    +        // and a static service registrar
    +        stork.defineIfAbsent("my-third-service",
    +                ServiceDefinition.of(new StaticConfiguration().withAddressList(example),
    +                        new RandomConfiguration(), new StaticRegistrarConfiguration()));
    +    }
    +}
    +
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/quarkus/index.html b/2.6.0/quarkus/index.html new file mode 100644 index 00000000..b53316f9 --- /dev/null +++ b/2.6.0/quarkus/index.html @@ -0,0 +1,1039 @@ + + + + + + + + + + + + + + + + Using Stork with Quarkus - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Using Stork with Quarkus#

    +

    Quarkus is a Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM.

    +

    Quarkus REST Client Reactive and gRPC extensions come with built-in integration with SmallRye Stork.

    +

    This page describes how to use REST Client Reactive with Stork. Using gRPC with Stork is similar.

    +

    We will use the Consul service discovery and the round-robin load balancer as examples.

    +

    The project#

    +

    You can create a Quarkus project with the REST Client Reactive extension using code.quarkus.io.

    +

    The corresponding Quarkus guide describes the extension in more detail.

    +

    The client#

    +

    To use the REST client to communicate with a remote endpoint, you need to create an interface that describes how the communication should work. +The client requires baseUri (or baseUrl) pointing to the address of the remote endpoint.

    +

    To use Stork to determine the actual address, set the scheme of the URI to stork and the hostname of the URI to the name of the Stork service.

    +

    For example, the HelloClient below will use the Stork service called hello-service to determine the address of the destination, and /hello as the base path for queries: +

     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    package examples;
    +
    +import jakarta.ws.rs.Consumes;
    +import jakarta.ws.rs.POST;
    +import jakarta.ws.rs.Path;
    +import jakarta.ws.rs.Produces;
    +import jakarta.ws.rs.core.MediaType;
    +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
    +
    +
    +
    +@Path("/")
    +@RegisterRestClient(baseUri = "stork://hello-service/hello")
    +public interface HelloClient {
    +    @POST
    +    @Produces(MediaType.TEXT_PLAIN)
    +    @Consumes(MediaType.TEXT_PLAIN)
    +    String echo(String name);
    +}
    +

    +

    The service#

    +

    In Stork, a Service consists of service discovery and a load balancer. +The Service discovery is responsible for determining the ServiceInstances, that is, available addresses for a service. +The load balancer picks a single ServiceInstance for a call.

    +

    Dependencies#

    +

    To use the service discovery and the load balancer of your choosing, you need to add the appropriate dependencies to your application. +For example, if you wish to use Consul and load-balance the calls with round-robin, add the following to your pom.xml:

    +
        <dependency>
    +        <groupId>io.smallrye.stork</groupId>
    +        <artifactId>stork-service-discovery-consul</artifactId>
    +    </dependency>
    +
    +
    +

    Note

    +

    No need to add a dependency for the round-robin load-balancer. This strategy is built-in. +Also, no need to specify the stork version, Quarkus imports the Stork BOM.

    +
    +

    When using Eureka, Kubernetes, or any other service discovery mechanism, or a different load balancer, replace the dependencies above with the ones you need. +Based on the defined dependencies, Stork automatically registers providers for service discovery mechanisms and load balancers.

    +

    The config#

    +

    The last piece of the puzzle is the actual service configuration. +If your Consul instance is running on localhost on port 8500, service discovery configuration should look as follows:

    +
    quarkus.stork.hello-service.service-discovery.type=consul
    +quarkus.stork.hello-service.service-discovery.consul-host=localhost
    +quarkus.stork.hello-service.service-discovery.consul-port=8500
    +
    +
    +

    Note

    +

    When no load-balancing is configured, Stork uses a round-robin.

    +
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/search/search_index.json b/2.6.0/search/search_index.json new file mode 100644 index 00000000..1b57bc24 --- /dev/null +++ b/2.6.0/search/search_index.json @@ -0,0 +1 @@ +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Overview # SmallRye Stork 2.6.0 is a service discovery and client-side load-balancing framework. The essence of distributed systems resides in the interaction between services . In modern architecture, you often have multiple instances of your service to share the load or improve the resilience by redundancy. But, how do you select the best instance of your service? That\u2019s where Stork helps. Stork is going to select the most appropriate instance. It offers: Extensible service discovery mechanisms Built-in support for Consul and Kubernetes Customizable client load-balancing strategies A programmatic API and a managed approach A Quarkus integration, but Stork can be used in any environment The problem # In distributed systems, applications typically need to call one another. In a monolithic application, components invoke one another through language-level method or procedure calls. In a traditional distributed system deployment, services run at fixed, well-known locations (schemes, hosts, and ports) and can call one another using HTTP/REST or some RPC mechanism. The service locations are often hardcoded in the application configuration. Nevertheless, a modern distributed system or microservice-based application typically runs in virtualized or containerized environments where the number of instances of a service and their locations change dynamically. IPs get randomly assigned, and instances can be created or destroyed at any time. With such dynamics, hard-coded locations are a dead-end. The solution # Stork handles the service lookup and selection. It proposes an extensible set of service discovery mechanisms and load-balancing strategies. What if the infrastructure provides such a feature? # Some infrastructure, such as Kubernetes, provides service discoveries and load-balancing features. However, these mechanisms often lack flexibility. You cannot influence the service instance selection, and the load-balancing strategy is generally a simple round-robin . Stork provides more flexibility in the service instance selection. For example, it can select the fastest instance (based on the previous calls) to improve the response time. However, if you don\u2019t need that flexibility, just use the infrastructure layer.","title":"Overview"},{"location":"#overview","text":"SmallRye Stork 2.6.0 is a service discovery and client-side load-balancing framework. The essence of distributed systems resides in the interaction between services . In modern architecture, you often have multiple instances of your service to share the load or improve the resilience by redundancy. But, how do you select the best instance of your service? That\u2019s where Stork helps. Stork is going to select the most appropriate instance. It offers: Extensible service discovery mechanisms Built-in support for Consul and Kubernetes Customizable client load-balancing strategies A programmatic API and a managed approach A Quarkus integration, but Stork can be used in any environment","title":"Overview"},{"location":"#the-problem","text":"In distributed systems, applications typically need to call one another. In a monolithic application, components invoke one another through language-level method or procedure calls. In a traditional distributed system deployment, services run at fixed, well-known locations (schemes, hosts, and ports) and can call one another using HTTP/REST or some RPC mechanism. The service locations are often hardcoded in the application configuration. Nevertheless, a modern distributed system or microservice-based application typically runs in virtualized or containerized environments where the number of instances of a service and their locations change dynamically. IPs get randomly assigned, and instances can be created or destroyed at any time. With such dynamics, hard-coded locations are a dead-end.","title":"The problem"},{"location":"#the-solution","text":"Stork handles the service lookup and selection. It proposes an extensible set of service discovery mechanisms and load-balancing strategies.","title":"The solution"},{"location":"#what-if-the-infrastructure-provides-such-a-feature","text":"Some infrastructure, such as Kubernetes, provides service discoveries and load-balancing features. However, these mechanisms often lack flexibility. You cannot influence the service instance selection, and the load-balancing strategy is generally a simple round-robin . Stork provides more flexibility in the service instance selection. For example, it can select the fastest instance (based on the previous calls) to improve the response time. However, if you don\u2019t need that flexibility, just use the infrastructure layer.","title":"What if the infrastructure provides such a feature?"},{"location":"concepts/","text":"Concepts # This page presents the concepts used in Stork. When using Stork in a managed environment, such as Quarkus, all these concepts are hidden, as you only configure the lookup and selection. However, when using the programmatic API, you will use these concepts directly. Process overview # When using the programmatic API of Stork, you can: Retrieve the singleton Stork instance. This instance is configured with the set of Service it manages. Retrieve the Service you want to use. Each Service is associated with a name. Retrieve the ServiceInstance which will provide the metadata to access the actual service. Behind the scenes, Stork will handle the service lookup and selection. Note The service lookup and selection are asynchronous operations. Thus, the API returns instances of Uni . Stork # io.smallrye.stork.Stork is the entry-point of the API. The Stork instance is a singleton . It needs to be initialized once (when the application starts) and shutdown when the application stops: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package examples ; import io.smallrye.stork.Stork ; public class StorkEntryPointExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); // ... Stork . shutdown (); } } During the initialization, Stork looks for io.smallrye.stork.config.ConfigProvider SPI provider and CDI beans (from 2.x version) and retrieves the list of managed services: A service is identified by a name . A service has a service discovery configuration indicating how Stork will look for service instances A service can have a load-balancer configuration indicating how Stork can select the most appropriate instance. Service # A io.smallrye.stork.Service is the structure representing a service used by the application. Services are pre-configured with their name, service discovery, and optionally, their load-balancer. You retrieve a Service using the Stork#getService(String name) method. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.Stork ; public class StorkServiceExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); Service service = stork . getService ( \"my-service\" ); // ... Stork . shutdown (); } } The Service lets you retrieve the list of ServiceInstance , or select a single one, when a load-balancer is configured. Service Instance # The io.smallrye.stork.api.ServiceInstance represents an actual instance of the service. It provides the metadata to configure a client to interact with that specific instance of service. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package examples ; import java.time.Duration ; import java.util.List ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceInstance ; public class StorkServiceLookupExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); Service service = stork . getService ( \"my-service\" ); List < ServiceInstance > instances = service . getInstances () . await (). atMost ( Duration . ofSeconds ( 5 )); // ... Stork . shutdown (); } } The service selection is a two-steps process: Service lookup - using the service discovery Service selection - using the load balancer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package examples ; import java.time.Duration ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceInstance ; public class StorkServiceSelectionExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); Service service = stork . getService ( \"my-service\" ); ServiceInstance instance = service . selectInstance () . await (). atMost ( Duration . ofSeconds ( 5 )); System . out . println ( instance . getHost () + \":\" + instance . getPort ()); // ... Stork . shutdown (); } } Service Discovery # The io.smallrye.stork.api.ServiceDiscovery represents a service discovery mechanism, such as DNS, Consul, or Eureka. You can implement a custom service discovery for Stork by implementing the ServiceDiscoveryProvider interface. The corresponding ServiceRegistrarProviderLoader and RegistrarConfiguration classes will be automatically generated during compilation time. Please note that the ServiceDiscovery implementation must be non-blocking. Load Balancer # The io.smallrye.stork.api.LoadBalancer represents a load-balancer strategy, such as round-robin. To implement a custom load balancer for Stork, implement the LoadBalancerProvider interface. The corresponding LoadBalancerProviderLoader and Configuration classes will be automatically generated during compilation time. Please note that the LoadBalancer implementation, similarly to ServiceDiscovery must be non-blocking. Service registration # The io.smallrye.stork.api.ServiceRegistrar represents a service registration mechanism for Consul and Eureka. You can implement a custom service registrar for Stork by implementing the ServiceRegistrarProvider interface. The corresponding ServiceRegistrarProviderLoader and RegistrarConfiguration classes will be automatically generated during compilation time. Please note that the ServiceRegistrar implementation must be non-blocking.","title":"Concepts"},{"location":"concepts/#concepts","text":"This page presents the concepts used in Stork. When using Stork in a managed environment, such as Quarkus, all these concepts are hidden, as you only configure the lookup and selection. However, when using the programmatic API, you will use these concepts directly.","title":"Concepts"},{"location":"concepts/#process-overview","text":"When using the programmatic API of Stork, you can: Retrieve the singleton Stork instance. This instance is configured with the set of Service it manages. Retrieve the Service you want to use. Each Service is associated with a name. Retrieve the ServiceInstance which will provide the metadata to access the actual service. Behind the scenes, Stork will handle the service lookup and selection. Note The service lookup and selection are asynchronous operations. Thus, the API returns instances of Uni .","title":"Process overview"},{"location":"concepts/#stork","text":"io.smallrye.stork.Stork is the entry-point of the API. The Stork instance is a singleton . It needs to be initialized once (when the application starts) and shutdown when the application stops: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package examples ; import io.smallrye.stork.Stork ; public class StorkEntryPointExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); // ... Stork . shutdown (); } } During the initialization, Stork looks for io.smallrye.stork.config.ConfigProvider SPI provider and CDI beans (from 2.x version) and retrieves the list of managed services: A service is identified by a name . A service has a service discovery configuration indicating how Stork will look for service instances A service can have a load-balancer configuration indicating how Stork can select the most appropriate instance.","title":"Stork"},{"location":"concepts/#service","text":"A io.smallrye.stork.Service is the structure representing a service used by the application. Services are pre-configured with their name, service discovery, and optionally, their load-balancer. You retrieve a Service using the Stork#getService(String name) method. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.Stork ; public class StorkServiceExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); Service service = stork . getService ( \"my-service\" ); // ... Stork . shutdown (); } } The Service lets you retrieve the list of ServiceInstance , or select a single one, when a load-balancer is configured.","title":"Service"},{"location":"concepts/#service-instance","text":"The io.smallrye.stork.api.ServiceInstance represents an actual instance of the service. It provides the metadata to configure a client to interact with that specific instance of service. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package examples ; import java.time.Duration ; import java.util.List ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceInstance ; public class StorkServiceLookupExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); Service service = stork . getService ( \"my-service\" ); List < ServiceInstance > instances = service . getInstances () . await (). atMost ( Duration . ofSeconds ( 5 )); // ... Stork . shutdown (); } } The service selection is a two-steps process: Service lookup - using the service discovery Service selection - using the load balancer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package examples ; import java.time.Duration ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceInstance ; public class StorkServiceSelectionExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); Service service = stork . getService ( \"my-service\" ); ServiceInstance instance = service . selectInstance () . await (). atMost ( Duration . ofSeconds ( 5 )); System . out . println ( instance . getHost () + \":\" + instance . getPort ()); // ... Stork . shutdown (); } }","title":"Service Instance"},{"location":"concepts/#service-discovery","text":"The io.smallrye.stork.api.ServiceDiscovery represents a service discovery mechanism, such as DNS, Consul, or Eureka. You can implement a custom service discovery for Stork by implementing the ServiceDiscoveryProvider interface. The corresponding ServiceRegistrarProviderLoader and RegistrarConfiguration classes will be automatically generated during compilation time. Please note that the ServiceDiscovery implementation must be non-blocking.","title":"Service Discovery"},{"location":"concepts/#load-balancer","text":"The io.smallrye.stork.api.LoadBalancer represents a load-balancer strategy, such as round-robin. To implement a custom load balancer for Stork, implement the LoadBalancerProvider interface. The corresponding LoadBalancerProviderLoader and Configuration classes will be automatically generated during compilation time. Please note that the LoadBalancer implementation, similarly to ServiceDiscovery must be non-blocking.","title":"Load Balancer"},{"location":"concepts/#service-registration","text":"The io.smallrye.stork.api.ServiceRegistrar represents a service registration mechanism for Consul and Eureka. You can implement a custom service registrar for Stork by implementing the ServiceRegistrarProvider interface. The corresponding ServiceRegistrarProviderLoader and RegistrarConfiguration classes will be automatically generated during compilation time. Please note that the ServiceRegistrar implementation must be non-blocking.","title":"Service registration"},{"location":"microprofile-config/","text":"Stork MicroProfile Config # Stork integrates with MicroProfile Configuration out of the box, enabling seamless access to configuration properties. This documentation explains how Stork can retrieve configuration details from the MicroProfile Config file present in the classpath. Quarkus uses this approach for reading configuration details from the MicroProfile Config file located within the classpath. Dependency setup # To enable MicroProfile Config integration in Stork, you need to include the following dependency: io.smallrye.stork smallrye-stork-microprofile 2.6.0 Initializing Stork # If your framework lacks a pre-configured Stork instance, you\u2019ll need to perform initialization: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import java.time.Duration ; public class InitializationExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); // ... } } Upon initialization, Stork scans for the io.smallrye.stork.config.MicroProfileConfigProvider SPI provider and CDI beans (from version 2.x onwards). It then builds a comprehensive list of managed services by parsing the properties configuration files.","title":"Microprofile Configuration"},{"location":"microprofile-config/#stork-microprofile-config","text":"Stork integrates with MicroProfile Configuration out of the box, enabling seamless access to configuration properties. This documentation explains how Stork can retrieve configuration details from the MicroProfile Config file present in the classpath. Quarkus uses this approach for reading configuration details from the MicroProfile Config file located within the classpath.","title":"Stork MicroProfile Config"},{"location":"microprofile-config/#dependency-setup","text":"To enable MicroProfile Config integration in Stork, you need to include the following dependency: io.smallrye.stork smallrye-stork-microprofile 2.6.0 ","title":"Dependency setup"},{"location":"microprofile-config/#initializing-stork","text":"If your framework lacks a pre-configured Stork instance, you\u2019ll need to perform initialization: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import java.time.Duration ; public class InitializationExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); // ... } } Upon initialization, Stork scans for the io.smallrye.stork.config.MicroProfileConfigProvider SPI provider and CDI beans (from version 2.x onwards). It then builds a comprehensive list of managed services by parsing the properties configuration files.","title":"Initializing Stork"},{"location":"observability/","text":"Stork Observability API # Stork proposes an observability API that automatically observes some parameters to show how the Stork service discovery and selection are behaving. For any observation to happen, you need to provide your own implementation of an ObservationCollector. By default, Stork provides a no-op implementation. The ObservationCollector is responsible for instantiating the StorkObservation . The StorkObservation reacts to Stork events thanks to a StorkEventHandler . You can extend the metrics collection by extending the StorkEventHandler interface. The following sequence diagram shows how the observability is initialized : The StorkObservation registers times, number of discovered instances, the selected instance and failures by reacting to the lifecycle of a Stork event such as: start : Observation has been started. The beginning time is registered. It happens when the ObservationCollector#create() method gets called. service discovery success: a collection of instances has been successfully discovered for a service. The end discovery time and number of instances are recorded. It happens when the StorkObservation#onServiceDiscoverySuccess gets called. service discovery error: an error occurs when discovering a service. The end discovery time and failure cause are captured. It happens when the StorkObservation#onServiceDiscoveryFailure gets called. service selection success: an instance has been successfully selected from the collection. The end selection time and selected instance ID are registered. It happens when the StorkObservation#onServiceSelectionSuccess gets called. service selection error: an error occurred during selecting the instance. End selection time and failure cause are registered. It happens when the StorkObservation#onServiceSelectionFailure gets called. end: Observation has finished. Overall duration is registered. It happens when the StorkObservation#onServiceSelectionSuccess gets called. The following sequence diagram represents the described observation process above: Implementing an observation collector # An ObservationCollector implementation must override the create method to provide an instance of StorkObservation. In addition, the user can access and enrich the observation data through the StorkEventHandler . A custom observation collector class should look as follows: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.observability.ObservationCollector ; import io.smallrye.stork.api.observability.StorkEventHandler ; import io.smallrye.stork.api.observability.StorkObservation ; import org.slf4j.Logger ; import org.slf4j.LoggerFactory ; public class AcmeObservationCollector implements ObservationCollector { private static final Logger LOGGER = LoggerFactory . getLogger ( AcmeObservationCollector . class ); private static final StorkEventHandler ACME_HANDLER = event -> { //This is the terminal event. Put here your custom logic to extend the metrics collection. //E.g. Expose metrics to Micrometer, additional logs.... LOGGER . info ( \"Service discovery took \" + event . getServiceDiscoveryDuration () + \".\" ); LOGGER . info ( event . getDiscoveredInstancesCount () + \" have been discovered for \" + event . getServiceName () + \".\" ); LOGGER . info ( \"Service selection took \" + event . getServiceSelectionDuration () + \".\" ); // ... }; public static StorkObservation ACME_STORK_EVENT ; @Override public StorkObservation create ( String serviceName , String serviceDiscoveryType , String serviceSelectionType ) { ACME_STORK_EVENT = new StorkObservation ( serviceName , serviceDiscoveryType , serviceSelectionType , ACME_HANDLER ); return ACME_STORK_EVENT ; } } The next step is to initialize Stork with an ObservableStorkInfrastructure , taking an instance of your ObservationCollector as parameter. 1 2 3 4 5 6 7 8 9 10 11 12 13 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.integration.ObservableStorkInfrastructure ; public class ObservableInitializationExample { public static void main ( String [] args ) { Stork . initialize ( new ObservableStorkInfrastructure ( new AcmeObservationCollector ())); Stork stork = Stork . getInstance (); // ... } } Then, Stork uses your implementation to register metrics. Observing service discovery and selection behaviours # To access metrics registered by StorkObservation , use the following code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.api.observability.ObservationCollector ; import io.smallrye.stork.api.observability.StorkObservation ; import java.time.Duration ; import java.util.List ; import java.util.Map ; import static examples.AcmeObservationCollector.* ; public class ObservationExample { public static void example ( Stork stork ) { Service service = stork . getService ( \"my-service\" ); ObservationCollector observations = service . getObservations (); // Gets the time spent in service discovery and service selection even if any error happens Duration overallDuration = ACME_STORK_EVENT . getOverallDuration (); // Gets the total number of instances discovered int discoveredInstancesCount = ACME_STORK_EVENT . getDiscoveredInstancesCount (); // Gets the error raised during the process Throwable failure = ACME_STORK_EVENT . failure (); // ... } } Stork Observability with Quarkus # Stork metrics are automatically enabled when using Stork together with the Micrometer extension in a Quarkus application. Micrometer collects the metrics of the rest and grpc client using Stork, as well as when using the Stork API. As an example, if you export the metrics to Prometheus, you will get: # HELP stork_load_balancer_failures_total The number of failures during service selection. # TYPE stork_load_balancer_failures_total counter stork_load_balancer_failures_total{service_name=\"hello-service\",} 0.0 # HELP stork_service_selection_duration_seconds The duration of the selection operation # TYPE stork_service_selection_duration_seconds summary stork_service_selection_duration_seconds_count{service_name=\"hello-service\",} 13.0 stork_service_selection_duration_seconds_sum{service_name=\"hello-service\",} 0.001049291 # HELP stork_service_selection_duration_seconds_max The duration of the selection operation # TYPE stork_service_selection_duration_seconds_max gauge stork_service_selection_duration_seconds_max{service_name=\"hello-service\",} 0.0 # HELP stork_overall_duration_seconds_max The total duration of the Stork service discovery and selection operations # TYPE stork_overall_duration_seconds_max gauge stork_overall_duration_seconds_max{service_name=\"hello-service\",} 0.0 # HELP stork_overall_duration_seconds The total duration of the Stork service discovery and selection operations # TYPE stork_overall_duration_seconds summary stork_overall_duration_seconds_count{service_name=\"hello-service\",} 13.0 stork_overall_duration_seconds_sum{service_name=\"hello-service\",} 0.001049291 # HELP stork_service_discovery_failures_total The number of failures during service discovery # TYPE stork_service_discovery_failures_total counter stork_service_discovery_failures_total{service_name=\"hello-service\",} 0.0 # HELP stork_service_discovery_duration_seconds_max The duration of the discovery operation # TYPE stork_service_discovery_duration_seconds_max gauge stork_service_discovery_duration_seconds_max{service_name=\"hello-service\",} 0.0 # HELP stork_service_discovery_duration_seconds The duration of the discovery operation # TYPE stork_service_discovery_duration_seconds summary stork_service_discovery_duration_seconds_count{service_name=\"hello-service\",} 13.0 stork_service_discovery_duration_seconds_sum{service_name=\"hello-service\",} 6.585046209 # HELP stork_instances_count_total The number of service instances discovered # TYPE stork_instances_count_total counter stork_instances_count_total{service_name=\"hello-service\",} 26.0","title":"Observability"},{"location":"observability/#stork-observability-api","text":"Stork proposes an observability API that automatically observes some parameters to show how the Stork service discovery and selection are behaving. For any observation to happen, you need to provide your own implementation of an ObservationCollector. By default, Stork provides a no-op implementation. The ObservationCollector is responsible for instantiating the StorkObservation . The StorkObservation reacts to Stork events thanks to a StorkEventHandler . You can extend the metrics collection by extending the StorkEventHandler interface. The following sequence diagram shows how the observability is initialized : The StorkObservation registers times, number of discovered instances, the selected instance and failures by reacting to the lifecycle of a Stork event such as: start : Observation has been started. The beginning time is registered. It happens when the ObservationCollector#create() method gets called. service discovery success: a collection of instances has been successfully discovered for a service. The end discovery time and number of instances are recorded. It happens when the StorkObservation#onServiceDiscoverySuccess gets called. service discovery error: an error occurs when discovering a service. The end discovery time and failure cause are captured. It happens when the StorkObservation#onServiceDiscoveryFailure gets called. service selection success: an instance has been successfully selected from the collection. The end selection time and selected instance ID are registered. It happens when the StorkObservation#onServiceSelectionSuccess gets called. service selection error: an error occurred during selecting the instance. End selection time and failure cause are registered. It happens when the StorkObservation#onServiceSelectionFailure gets called. end: Observation has finished. Overall duration is registered. It happens when the StorkObservation#onServiceSelectionSuccess gets called. The following sequence diagram represents the described observation process above:","title":"Stork Observability API"},{"location":"observability/#implementing-an-observation-collector","text":"An ObservationCollector implementation must override the create method to provide an instance of StorkObservation. In addition, the user can access and enrich the observation data through the StorkEventHandler . A custom observation collector class should look as follows: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.observability.ObservationCollector ; import io.smallrye.stork.api.observability.StorkEventHandler ; import io.smallrye.stork.api.observability.StorkObservation ; import org.slf4j.Logger ; import org.slf4j.LoggerFactory ; public class AcmeObservationCollector implements ObservationCollector { private static final Logger LOGGER = LoggerFactory . getLogger ( AcmeObservationCollector . class ); private static final StorkEventHandler ACME_HANDLER = event -> { //This is the terminal event. Put here your custom logic to extend the metrics collection. //E.g. Expose metrics to Micrometer, additional logs.... LOGGER . info ( \"Service discovery took \" + event . getServiceDiscoveryDuration () + \".\" ); LOGGER . info ( event . getDiscoveredInstancesCount () + \" have been discovered for \" + event . getServiceName () + \".\" ); LOGGER . info ( \"Service selection took \" + event . getServiceSelectionDuration () + \".\" ); // ... }; public static StorkObservation ACME_STORK_EVENT ; @Override public StorkObservation create ( String serviceName , String serviceDiscoveryType , String serviceSelectionType ) { ACME_STORK_EVENT = new StorkObservation ( serviceName , serviceDiscoveryType , serviceSelectionType , ACME_HANDLER ); return ACME_STORK_EVENT ; } } The next step is to initialize Stork with an ObservableStorkInfrastructure , taking an instance of your ObservationCollector as parameter. 1 2 3 4 5 6 7 8 9 10 11 12 13 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.integration.ObservableStorkInfrastructure ; public class ObservableInitializationExample { public static void main ( String [] args ) { Stork . initialize ( new ObservableStorkInfrastructure ( new AcmeObservationCollector ())); Stork stork = Stork . getInstance (); // ... } } Then, Stork uses your implementation to register metrics.","title":"Implementing an observation collector"},{"location":"observability/#observing-service-discovery-and-selection-behaviours","text":"To access metrics registered by StorkObservation , use the following code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.api.observability.ObservationCollector ; import io.smallrye.stork.api.observability.StorkObservation ; import java.time.Duration ; import java.util.List ; import java.util.Map ; import static examples.AcmeObservationCollector.* ; public class ObservationExample { public static void example ( Stork stork ) { Service service = stork . getService ( \"my-service\" ); ObservationCollector observations = service . getObservations (); // Gets the time spent in service discovery and service selection even if any error happens Duration overallDuration = ACME_STORK_EVENT . getOverallDuration (); // Gets the total number of instances discovered int discoveredInstancesCount = ACME_STORK_EVENT . getDiscoveredInstancesCount (); // Gets the error raised during the process Throwable failure = ACME_STORK_EVENT . failure (); // ... } }","title":"Observing service discovery and selection behaviours"},{"location":"observability/#stork-observability-with-quarkus","text":"Stork metrics are automatically enabled when using Stork together with the Micrometer extension in a Quarkus application. Micrometer collects the metrics of the rest and grpc client using Stork, as well as when using the Stork API. As an example, if you export the metrics to Prometheus, you will get: # HELP stork_load_balancer_failures_total The number of failures during service selection. # TYPE stork_load_balancer_failures_total counter stork_load_balancer_failures_total{service_name=\"hello-service\",} 0.0 # HELP stork_service_selection_duration_seconds The duration of the selection operation # TYPE stork_service_selection_duration_seconds summary stork_service_selection_duration_seconds_count{service_name=\"hello-service\",} 13.0 stork_service_selection_duration_seconds_sum{service_name=\"hello-service\",} 0.001049291 # HELP stork_service_selection_duration_seconds_max The duration of the selection operation # TYPE stork_service_selection_duration_seconds_max gauge stork_service_selection_duration_seconds_max{service_name=\"hello-service\",} 0.0 # HELP stork_overall_duration_seconds_max The total duration of the Stork service discovery and selection operations # TYPE stork_overall_duration_seconds_max gauge stork_overall_duration_seconds_max{service_name=\"hello-service\",} 0.0 # HELP stork_overall_duration_seconds The total duration of the Stork service discovery and selection operations # TYPE stork_overall_duration_seconds summary stork_overall_duration_seconds_count{service_name=\"hello-service\",} 13.0 stork_overall_duration_seconds_sum{service_name=\"hello-service\",} 0.001049291 # HELP stork_service_discovery_failures_total The number of failures during service discovery # TYPE stork_service_discovery_failures_total counter stork_service_discovery_failures_total{service_name=\"hello-service\",} 0.0 # HELP stork_service_discovery_duration_seconds_max The duration of the discovery operation # TYPE stork_service_discovery_duration_seconds_max gauge stork_service_discovery_duration_seconds_max{service_name=\"hello-service\",} 0.0 # HELP stork_service_discovery_duration_seconds The duration of the discovery operation # TYPE stork_service_discovery_duration_seconds summary stork_service_discovery_duration_seconds_count{service_name=\"hello-service\",} 13.0 stork_service_discovery_duration_seconds_sum{service_name=\"hello-service\",} 6.585046209 # HELP stork_instances_count_total The number of service instances discovered # TYPE stork_instances_count_total counter stork_instances_count_total{service_name=\"hello-service\",} 26.0","title":"Stork Observability with Quarkus"},{"location":"programmatic-api/","text":"Stork Programmatic API # Stork proposes a programmatic API that lets you register new service Definitions and do manual lookup and selection. When using the programmatic API of Stork, you can: Retrieve the singleton Stork instance. This instance is configured with the set of Services it manages. Register new service definition. Retrieve the Service you want to use. Each Service is associated with a name. Retrieve the ServiceInstance, which will provide the metadata to access the actual instance. Initializing Stork # If your framework does not already provide a configured Stork instance, you need to do: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import java.time.Duration ; public class InitializationExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); // ... } } Adding service dynamically # To register a new ServiceDefinition , use the defineIfAbsent method: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.consul.ConsulRegistrarConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration ; public class DefinitionExample { public static void example ( Stork stork ) { String example = \"localhost:8080, localhost:8081\" ; // A service using a static list of locations as discovery // As not set, it defaults to round-robin to select the instance. stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ))); // Another service using the random selection strategy, instead of round-robin stork . defineIfAbsent ( \"my-second-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration ())); // Another service using the random selection strategy, instead of round-robin // and a static service registrar stork . defineIfAbsent ( \"my-second-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration (), new StaticRegistrarConfiguration ())); } } The ServiceDefinition instances can be created from: A service discovery configuration - these classes are provided by the service discovery implementations, An optional load balancer configuration - these classes are provided by the load balancer implementations Attributes from the service discovery and load balancer can be configured from the Configuration classes. Looking for service instances # To list the service instances for a given service, or to select an instance according to the load balancer strategy, use the following code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import java.util.List ; import java.util.Map ; public class LookupExample { public static void example ( Stork stork ) { Service service = stork . getService ( \"my-service\" ); // Gets all the available instances: Uni < List < ServiceInstance >> instances = service . getInstances (); // Select one instance using the load balancing strategy Uni < ServiceInstance > instance = service . selectInstance (); // Gets all the managed services: Map < String , Service > services = stork . getServices (); } } The lookup and selection methods are returning Uni as these processes are asynchronous. All in one example # The following snippet provides an all in one example of the Stork programmatic API: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration ; import java.time.Duration ; public class StorkApiExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); String example = \"localhost:8080, localhost:8082\" ; // A service using a static list of locations as discovery // As not set, it defaults to round-robin to select the instance. stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ))); // Another service using the random selection strategy, instead of round-robin stork . defineIfAbsent ( \"my-second-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration ())); ServiceInstance instance = stork . getService ( \"my-second-service\" ). selectInstance () . await (). atMost ( Duration . ofSeconds ( 1 )); System . out . println ( instance . getHost () + \":\" + instance . getPort ()); // Another service using the random selection strategy, instead of round-robin // and a static service registrar stork . defineIfAbsent ( \"my-third-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration (), new StaticRegistrarConfiguration ())); } }","title":"Programmatic API"},{"location":"programmatic-api/#stork-programmatic-api","text":"Stork proposes a programmatic API that lets you register new service Definitions and do manual lookup and selection. When using the programmatic API of Stork, you can: Retrieve the singleton Stork instance. This instance is configured with the set of Services it manages. Register new service definition. Retrieve the Service you want to use. Each Service is associated with a name. Retrieve the ServiceInstance, which will provide the metadata to access the actual instance.","title":"Stork Programmatic API"},{"location":"programmatic-api/#initializing-stork","text":"If your framework does not already provide a configured Stork instance, you need to do: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import java.time.Duration ; public class InitializationExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); // ... } }","title":"Initializing Stork"},{"location":"programmatic-api/#adding-service-dynamically","text":"To register a new ServiceDefinition , use the defineIfAbsent method: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.consul.ConsulRegistrarConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration ; public class DefinitionExample { public static void example ( Stork stork ) { String example = \"localhost:8080, localhost:8081\" ; // A service using a static list of locations as discovery // As not set, it defaults to round-robin to select the instance. stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ))); // Another service using the random selection strategy, instead of round-robin stork . defineIfAbsent ( \"my-second-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration ())); // Another service using the random selection strategy, instead of round-robin // and a static service registrar stork . defineIfAbsent ( \"my-second-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration (), new StaticRegistrarConfiguration ())); } } The ServiceDefinition instances can be created from: A service discovery configuration - these classes are provided by the service discovery implementations, An optional load balancer configuration - these classes are provided by the load balancer implementations Attributes from the service discovery and load balancer can be configured from the Configuration classes.","title":"Adding service dynamically"},{"location":"programmatic-api/#looking-for-service-instances","text":"To list the service instances for a given service, or to select an instance according to the load balancer strategy, use the following code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.Service ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import java.util.List ; import java.util.Map ; public class LookupExample { public static void example ( Stork stork ) { Service service = stork . getService ( \"my-service\" ); // Gets all the available instances: Uni < List < ServiceInstance >> instances = service . getInstances (); // Select one instance using the load balancing strategy Uni < ServiceInstance > instance = service . selectInstance (); // Gets all the managed services: Map < String , Service > services = stork . getServices (); } } The lookup and selection methods are returning Uni as these processes are asynchronous.","title":"Looking for service instances"},{"location":"programmatic-api/#all-in-one-example","text":"The following snippet provides an all in one example of the Stork programmatic API: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.loadbalancer.random.RandomConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration ; import java.time.Duration ; public class StorkApiExample { public static void main ( String [] args ) { Stork . initialize (); Stork stork = Stork . getInstance (); String example = \"localhost:8080, localhost:8082\" ; // A service using a static list of locations as discovery // As not set, it defaults to round-robin to select the instance. stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ))); // Another service using the random selection strategy, instead of round-robin stork . defineIfAbsent ( \"my-second-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration ())); ServiceInstance instance = stork . getService ( \"my-second-service\" ). selectInstance () . await (). atMost ( Duration . ofSeconds ( 1 )); System . out . println ( instance . getHost () + \":\" + instance . getPort ()); // Another service using the random selection strategy, instead of round-robin // and a static service registrar stork . defineIfAbsent ( \"my-third-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( example ), new RandomConfiguration (), new StaticRegistrarConfiguration ())); } }","title":"All in one example"},{"location":"quarkus/","text":"Using Stork with Quarkus # Quarkus is a Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM. Quarkus REST Client Reactive and gRPC extensions come with built-in integration with SmallRye Stork. This page describes how to use REST Client Reactive with Stork. Using gRPC with Stork is similar. We will use the Consul service discovery and the round-robin load balancer as examples. The project # You can create a Quarkus project with the REST Client Reactive extension using code.quarkus.io . The corresponding Quarkus guide describes the extension in more detail. The client # To use the REST client to communicate with a remote endpoint, you need to create an interface that describes how the communication should work. The client requires baseUri (or baseUrl ) pointing to the address of the remote endpoint. To use Stork to determine the actual address, set the scheme of the URI to stork and the hostname of the URI to the name of the Stork service. For example, the HelloClient below will use the Stork service called hello-service to determine the address of the destination, and /hello as the base path for queries: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package examples ; import jakarta.ws.rs.Consumes ; import jakarta.ws.rs.POST ; import jakarta.ws.rs.Path ; import jakarta.ws.rs.Produces ; import jakarta.ws.rs.core.MediaType ; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient ; @Path ( \"/\" ) @RegisterRestClient ( baseUri = \"stork://hello-service/hello\" ) public interface HelloClient { @POST @Produces ( MediaType . TEXT_PLAIN ) @Consumes ( MediaType . TEXT_PLAIN ) String echo ( String name ); } The service # In Stork, a Service consists of service discovery and a load balancer. The Service discovery is responsible for determining the ServiceInstance s, that is, available addresses for a service. The load balancer picks a single ServiceInstance for a call. Dependencies # To use the service discovery and the load balancer of your choosing, you need to add the appropriate dependencies to your application. For example, if you wish to use Consul and load-balance the calls with round-robin, add the following to your pom.xml : io.smallrye.stork stork-service-discovery-consul Note No need to add a dependency for the round-robin load-balancer. This strategy is built-in. Also, no need to specify the stork version, Quarkus imports the Stork BOM . When using Eureka, Kubernetes, or any other service discovery mechanism, or a different load balancer, replace the dependencies above with the ones you need. Based on the defined dependencies, Stork automatically registers providers for service discovery mechanisms and load balancers. The config # The last piece of the puzzle is the actual service configuration. If your Consul instance is running on localhost on port 8500 , service discovery configuration should look as follows: quarkus.stork.hello-service.service-discovery.type = consul quarkus.stork.hello-service.service-discovery.consul-host = localhost quarkus.stork.hello-service.service-discovery.consul-port = 8500 Note When no load-balancing is configured, Stork uses a round-robin.","title":"Using Stork with Quarkus"},{"location":"quarkus/#using-stork-with-quarkus","text":"Quarkus is a Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM. Quarkus REST Client Reactive and gRPC extensions come with built-in integration with SmallRye Stork. This page describes how to use REST Client Reactive with Stork. Using gRPC with Stork is similar. We will use the Consul service discovery and the round-robin load balancer as examples.","title":"Using Stork with Quarkus"},{"location":"quarkus/#the-project","text":"You can create a Quarkus project with the REST Client Reactive extension using code.quarkus.io . The corresponding Quarkus guide describes the extension in more detail.","title":"The project"},{"location":"quarkus/#the-client","text":"To use the REST client to communicate with a remote endpoint, you need to create an interface that describes how the communication should work. The client requires baseUri (or baseUrl ) pointing to the address of the remote endpoint. To use Stork to determine the actual address, set the scheme of the URI to stork and the hostname of the URI to the name of the Stork service. For example, the HelloClient below will use the Stork service called hello-service to determine the address of the destination, and /hello as the base path for queries: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package examples ; import jakarta.ws.rs.Consumes ; import jakarta.ws.rs.POST ; import jakarta.ws.rs.Path ; import jakarta.ws.rs.Produces ; import jakarta.ws.rs.core.MediaType ; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient ; @Path ( \"/\" ) @RegisterRestClient ( baseUri = \"stork://hello-service/hello\" ) public interface HelloClient { @POST @Produces ( MediaType . TEXT_PLAIN ) @Consumes ( MediaType . TEXT_PLAIN ) String echo ( String name ); }","title":"The client"},{"location":"quarkus/#the-service","text":"In Stork, a Service consists of service discovery and a load balancer. The Service discovery is responsible for determining the ServiceInstance s, that is, available addresses for a service. The load balancer picks a single ServiceInstance for a call.","title":"The service"},{"location":"quarkus/#dependencies","text":"To use the service discovery and the load balancer of your choosing, you need to add the appropriate dependencies to your application. For example, if you wish to use Consul and load-balance the calls with round-robin, add the following to your pom.xml : io.smallrye.stork stork-service-discovery-consul Note No need to add a dependency for the round-robin load-balancer. This strategy is built-in. Also, no need to specify the stork version, Quarkus imports the Stork BOM . When using Eureka, Kubernetes, or any other service discovery mechanism, or a different load balancer, replace the dependencies above with the ones you need. Based on the defined dependencies, Stork automatically registers providers for service discovery mechanisms and load balancers.","title":"Dependencies"},{"location":"quarkus/#the-config","text":"The last piece of the puzzle is the actual service configuration. If your Consul instance is running on localhost on port 8500 , service discovery configuration should look as follows: quarkus.stork.hello-service.service-discovery.type = consul quarkus.stork.hello-service.service-discovery.consul-host = localhost quarkus.stork.hello-service.service-discovery.consul-port = 8500 Note When no load-balancing is configured, Stork uses a round-robin.","title":"The config"},{"location":"springboot-config/","text":"Stork Spring Boot Config # Stork seamlessly supports Spring Boot configuration, facilitating access to configuration properties. This documentation elaborates on how Spring Boot developers can use Stork in their Spring Boot applications and configure it using the application.properties file. Dependency setup # To enable Spring Boot configuration integration in Stork, you need to include the following dependency: io.smallrye.stork stork-spring-boot-config 2.6.0 Initializing Stork # Since Spring Boot lacks a pre-configured Stork instance, you\u2019ll need create one. It can be done by providing a Spring bean performing Stork initialization: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.springboot.SpringBootApplicationContextProvider ; import org.springframework.boot.SpringApplication ; import org.springframework.boot.autoconfigure.SpringBootApplication ; import org.springframework.context.annotation.Bean ; import org.springframework.context.annotation.DependsOn ; @SpringBootApplication public class SpringBootInitializationExample { public static void main ( String [] args ) { SpringApplication . run ( SpringBootInitializationExample . class , args ); } @Bean @DependsOn ( \"springBootApplicationContextProvider\" ) public Stork stork () { Stork . initialize (); Stork stork = Stork . getInstance (); return stork ; } @Bean public SpringBootApplicationContextProvider springBootApplicationContextProvider () { return new SpringBootApplicationContextProvider (); } } Upon initialization, Stork scans for the io.smallrye.stork.springboot.SpringBootConfigProvider SPI provider and CDI beans (from version 2.x onwards). It then builds a comprehensive list of managed services by parsing the properties configuration files. Please note the importance of the io.smallrye.stork.springboot.SpringBootApplicationContextProvider bean in our setup. This bean has a critical role by granting Stork access to the current org.springframework.context.ApplicationContext . It enables it to retrieve configuration details effectively. Consequently, it\u2019s imperative that this bean is instantiated prior to initiating the Stork initialization process. In this case, we utilize the @DependsOn annotation for that. It allows us controlling the bean creation order. Comprehensive Example # You can check our Guitar Hero Application showcasing the seamless integration of Stork with Spring Boot Configuration.","title":"Spring Boot Configuration"},{"location":"springboot-config/#stork-spring-boot-config","text":"Stork seamlessly supports Spring Boot configuration, facilitating access to configuration properties. This documentation elaborates on how Spring Boot developers can use Stork in their Spring Boot applications and configure it using the application.properties file.","title":"Stork Spring Boot Config"},{"location":"springboot-config/#dependency-setup","text":"To enable Spring Boot configuration integration in Stork, you need to include the following dependency: io.smallrye.stork stork-spring-boot-config 2.6.0 ","title":"Dependency setup"},{"location":"springboot-config/#initializing-stork","text":"Since Spring Boot lacks a pre-configured Stork instance, you\u2019ll need create one. It can be done by providing a Spring bean performing Stork initialization: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package examples ; import io.smallrye.stork.Stork ; import io.smallrye.stork.springboot.SpringBootApplicationContextProvider ; import org.springframework.boot.SpringApplication ; import org.springframework.boot.autoconfigure.SpringBootApplication ; import org.springframework.context.annotation.Bean ; import org.springframework.context.annotation.DependsOn ; @SpringBootApplication public class SpringBootInitializationExample { public static void main ( String [] args ) { SpringApplication . run ( SpringBootInitializationExample . class , args ); } @Bean @DependsOn ( \"springBootApplicationContextProvider\" ) public Stork stork () { Stork . initialize (); Stork stork = Stork . getInstance (); return stork ; } @Bean public SpringBootApplicationContextProvider springBootApplicationContextProvider () { return new SpringBootApplicationContextProvider (); } } Upon initialization, Stork scans for the io.smallrye.stork.springboot.SpringBootConfigProvider SPI provider and CDI beans (from version 2.x onwards). It then builds a comprehensive list of managed services by parsing the properties configuration files. Please note the importance of the io.smallrye.stork.springboot.SpringBootApplicationContextProvider bean in our setup. This bean has a critical role by granting Stork access to the current org.springframework.context.ApplicationContext . It enables it to retrieve configuration details effectively. Consequently, it\u2019s imperative that this bean is instantiated prior to initiating the Stork initialization process. In this case, we utilize the @DependsOn annotation for that. It allows us controlling the bean creation order.","title":"Initializing Stork"},{"location":"springboot-config/#comprehensive-example","text":"You can check our Guitar Hero Application showcasing the seamless integration of Stork with Spring Boot Configuration.","title":"Comprehensive Example"},{"location":"load-balancer/custom-load-balancer/","text":"Implement your own load balancer mechanism # Stork is extensible, and you can implement your service selection (load-balancer) mechanism. Dependencies # To implement your Load Balancer Provider , make sure your project depends on Core and Configuration Generator. The former brings classes necessary to implement custom load balancer, the latter contains an annotation processor that generates classes needed by Stork. io.smallrye.stork stork-core 2.6.0 io.smallrye.stork stork-configuration-generator provided 2.6.0 Implementing a load balancer provider # Load balancer implementation consists of three elements: LoadBalancer which is responsible for selecting service instances for a single Stork service, LoadBalancerProvider which creates instances of LoadBalancer for a given load balancer type , $typeConfiguration which is a configuration for the load balancer. This class is automatically generated. A type , for example acme-load-balancer , identifies each provider. This type is used in the configuration to reference the provider: stork standalone stork in quarkus stork.my-service.load-balancer.type = acme-load-balancer quarkus.stork.my-service.load-balancer.type = acme-load-balancer A LoadBalancerProvider implementation needs to be annotated with @LoadBalancerType that defines the type . Any configuration properties that the provider expects should be defined with @LoadBalancerAttribute annotations placed on the provider. Optionally, you can also add @ApplicationScoped annotation in order to provide the load balancer implementation as CDI bean. A load balancer provider class should look as follows: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package examples ; import io.smallrye.stork.api.LoadBalancer ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.config.LoadBalancerAttribute ; import io.smallrye.stork.api.config.LoadBalancerType ; import io.smallrye.stork.spi.LoadBalancerProvider ; import jakarta.enterprise.context.ApplicationScoped ; @LoadBalancerType ( \"acme-load-balancer\" ) @LoadBalancerAttribute ( name = \"my-attribute\" , description = \"Attribute that alters the behavior of the LoadBalancer\" ) @ApplicationScoped public class AcmeLoadBalancerProvider implements LoadBalancerProvider < AcmeLoadBalancerConfiguration > { @Override public LoadBalancer createLoadBalancer ( AcmeLoadBalancerConfiguration config , ServiceDiscovery serviceDiscovery ) { return new AcmeLoadBalancer ( config ); } } Note, that the LoadBalancerProvider interface takes a configuration class as a parameter. This configuration class is generated automatically by the Configuration Generator . Its name is created by appending Configuration to the load balancer type, like AcmeLoadBalancerConfiguration . The next step is to implement the LoadBalancer interface. The essence of load balancers\u2019 work happens in the selectServiceInstance method. The method returns a single ServiceInstance from a collection. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package examples ; import java.util.ArrayList ; import java.util.Collection ; import java.util.Random ; import io.smallrye.stork.api.LoadBalancer ; import io.smallrye.stork.api.NoServiceInstanceFoundException ; import io.smallrye.stork.api.ServiceInstance ; public class AcmeLoadBalancer implements LoadBalancer { private final Random random ; public AcmeLoadBalancer ( AcmeLoadBalancerConfiguration config ) { random = new Random (); } @Override public ServiceInstance selectServiceInstance ( Collection < ServiceInstance > serviceInstances ) { if ( serviceInstances . isEmpty ()) { throw new NoServiceInstanceFoundException ( \"No services found.\" ); } int index = random . nextInt ( serviceInstances . size ()); return new ArrayList <> ( serviceInstances ). get ( index ); } @Override public boolean requiresStrictRecording () { return false ; } } This implementation is simplistic and just picks a random instance from the received list. Some load balancers make the pick based on statistics such as calls in progress or response times, or amount of errors of a service instance. To collect this information in your load balancer, you can wrap the selected service instance into ServiceInstanceWithStatGathering . Load balancers based on statistics often expect that an operation using a selected service instance is marked as started before the next selection. By default, Stork assumes that a LoadBalancer requires this and guards the calls accordingly. If this is not the case for your implementation, override the requiresStrictRecording() method to return false . Using your load balancer # In the project using it, don\u2019t forget to add the dependency on the module providing your implementation. Then, in the configuration, just add: stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.load-balancer.type = acme-load-balancer\\ quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.load-balancer.type = acme-load-balancer Then, Stork will use your implementation to select the my-service service instance. Using your load balancer using the programmatic API # When building your load balancer project, the configuration generator creates a configuration class. This class can be used to configure your load balancer using the Stork programmatic API. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.api.StorkServiceRegistry ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration ; public class AcmeSelectorApiUsage { public void example ( StorkServiceRegistry stork ) { String list = \"localhost:8080, localhost:8081\" ; stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( list ), new AcmeLoadBalancerConfiguration (). withMyAttribute ( \"my-value\" ), new StaticRegistrarConfiguration ()) ); Uni < ServiceInstance > uni = stork . getService ( \"my-service\" ). selectInstance (); } } Remember that attributes, like my-attribute , are declared using the @LoadBalancerAttribute annotation on the LoadBalancerProvider implementation.","title":"Custom Load Balancer"},{"location":"load-balancer/custom-load-balancer/#implement-your-own-load-balancer-mechanism","text":"Stork is extensible, and you can implement your service selection (load-balancer) mechanism.","title":"Implement your own load balancer mechanism"},{"location":"load-balancer/custom-load-balancer/#dependencies","text":"To implement your Load Balancer Provider , make sure your project depends on Core and Configuration Generator. The former brings classes necessary to implement custom load balancer, the latter contains an annotation processor that generates classes needed by Stork. io.smallrye.stork stork-core 2.6.0 io.smallrye.stork stork-configuration-generator provided 2.6.0 ","title":"Dependencies"},{"location":"load-balancer/custom-load-balancer/#implementing-a-load-balancer-provider","text":"Load balancer implementation consists of three elements: LoadBalancer which is responsible for selecting service instances for a single Stork service, LoadBalancerProvider which creates instances of LoadBalancer for a given load balancer type , $typeConfiguration which is a configuration for the load balancer. This class is automatically generated. A type , for example acme-load-balancer , identifies each provider. This type is used in the configuration to reference the provider: stork standalone stork in quarkus stork.my-service.load-balancer.type = acme-load-balancer quarkus.stork.my-service.load-balancer.type = acme-load-balancer A LoadBalancerProvider implementation needs to be annotated with @LoadBalancerType that defines the type . Any configuration properties that the provider expects should be defined with @LoadBalancerAttribute annotations placed on the provider. Optionally, you can also add @ApplicationScoped annotation in order to provide the load balancer implementation as CDI bean. A load balancer provider class should look as follows: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package examples ; import io.smallrye.stork.api.LoadBalancer ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.config.LoadBalancerAttribute ; import io.smallrye.stork.api.config.LoadBalancerType ; import io.smallrye.stork.spi.LoadBalancerProvider ; import jakarta.enterprise.context.ApplicationScoped ; @LoadBalancerType ( \"acme-load-balancer\" ) @LoadBalancerAttribute ( name = \"my-attribute\" , description = \"Attribute that alters the behavior of the LoadBalancer\" ) @ApplicationScoped public class AcmeLoadBalancerProvider implements LoadBalancerProvider < AcmeLoadBalancerConfiguration > { @Override public LoadBalancer createLoadBalancer ( AcmeLoadBalancerConfiguration config , ServiceDiscovery serviceDiscovery ) { return new AcmeLoadBalancer ( config ); } } Note, that the LoadBalancerProvider interface takes a configuration class as a parameter. This configuration class is generated automatically by the Configuration Generator . Its name is created by appending Configuration to the load balancer type, like AcmeLoadBalancerConfiguration . The next step is to implement the LoadBalancer interface. The essence of load balancers\u2019 work happens in the selectServiceInstance method. The method returns a single ServiceInstance from a collection. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package examples ; import java.util.ArrayList ; import java.util.Collection ; import java.util.Random ; import io.smallrye.stork.api.LoadBalancer ; import io.smallrye.stork.api.NoServiceInstanceFoundException ; import io.smallrye.stork.api.ServiceInstance ; public class AcmeLoadBalancer implements LoadBalancer { private final Random random ; public AcmeLoadBalancer ( AcmeLoadBalancerConfiguration config ) { random = new Random (); } @Override public ServiceInstance selectServiceInstance ( Collection < ServiceInstance > serviceInstances ) { if ( serviceInstances . isEmpty ()) { throw new NoServiceInstanceFoundException ( \"No services found.\" ); } int index = random . nextInt ( serviceInstances . size ()); return new ArrayList <> ( serviceInstances ). get ( index ); } @Override public boolean requiresStrictRecording () { return false ; } } This implementation is simplistic and just picks a random instance from the received list. Some load balancers make the pick based on statistics such as calls in progress or response times, or amount of errors of a service instance. To collect this information in your load balancer, you can wrap the selected service instance into ServiceInstanceWithStatGathering . Load balancers based on statistics often expect that an operation using a selected service instance is marked as started before the next selection. By default, Stork assumes that a LoadBalancer requires this and guards the calls accordingly. If this is not the case for your implementation, override the requiresStrictRecording() method to return false .","title":"Implementing a load balancer provider"},{"location":"load-balancer/custom-load-balancer/#using-your-load-balancer","text":"In the project using it, don\u2019t forget to add the dependency on the module providing your implementation. Then, in the configuration, just add: stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.load-balancer.type = acme-load-balancer\\ quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.load-balancer.type = acme-load-balancer Then, Stork will use your implementation to select the my-service service instance.","title":"Using your load balancer"},{"location":"load-balancer/custom-load-balancer/#using-your-load-balancer-using-the-programmatic-api","text":"When building your load balancer project, the configuration generator creates a configuration class. This class can be used to configure your load balancer using the Stork programmatic API. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.api.StorkServiceRegistry ; import io.smallrye.stork.servicediscovery.staticlist.StaticConfiguration ; import io.smallrye.stork.servicediscovery.staticlist.StaticRegistrarConfiguration ; public class AcmeSelectorApiUsage { public void example ( StorkServiceRegistry stork ) { String list = \"localhost:8080, localhost:8081\" ; stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new StaticConfiguration (). withAddressList ( list ), new AcmeLoadBalancerConfiguration (). withMyAttribute ( \"my-value\" ), new StaticRegistrarConfiguration ()) ); Uni < ServiceInstance > uni = stork . getService ( \"my-service\" ). selectInstance (); } } Remember that attributes, like my-attribute , are declared using the @LoadBalancerAttribute annotation on the LoadBalancerProvider implementation.","title":"Using your load balancer using the programmatic API"},{"location":"load-balancer/least-requests/","text":"Least Requests Load Balancing # The least-requests load balancing strategy monitors the number of inflight calls and selects the less-used instance. This strategy keeps track of the inflight calls made by the application and picks the service instance with the smallest number of inflight requests: when the selection happens, the service instance with the smallest number of inflight requests is selected, and this number is incremented when the operation completes, successfully or not, the number of inflight requests is decremented Dependency # First, you need to add the least-requests load-balancer to your project: io.smallrye.stork stork-load-balancer-least-requests 2.6.0 Configuration # For each service expected to use a least-response-time selection, configure the load-balancer to be least-requests : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = least-requests quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = least-requests","title":"Least Requests"},{"location":"load-balancer/least-requests/#least-requests-load-balancing","text":"The least-requests load balancing strategy monitors the number of inflight calls and selects the less-used instance. This strategy keeps track of the inflight calls made by the application and picks the service instance with the smallest number of inflight requests: when the selection happens, the service instance with the smallest number of inflight requests is selected, and this number is incremented when the operation completes, successfully or not, the number of inflight requests is decremented","title":"Least Requests Load Balancing"},{"location":"load-balancer/least-requests/#dependency","text":"First, you need to add the least-requests load-balancer to your project: io.smallrye.stork stork-load-balancer-least-requests 2.6.0 ","title":"Dependency"},{"location":"load-balancer/least-requests/#configuration","text":"For each service expected to use a least-response-time selection, configure the load-balancer to be least-requests : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = least-requests quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = least-requests","title":"Configuration"},{"location":"load-balancer/power-of-two-choices/","text":"Power Of Two Choices Load Balancing # The power-of-two-choices load balancing selects two random service instances and then chooses the one with the least inflight requests. It avoids the overhead of least-requests and the worst case for random where it selects a busy destination. This strategy acts as follows: when the selection happens, it picks two random instances from the list, it returns the least loaded instance (based on the number of inflight requests), when the operation completes, successfully or not, the number of inflight requests for the instance is decremented. Check The Power of Two Random Choices paper to learn more about this pattern and the benefits. Dependency # First, you need to add the random load-balancer to your project: io.smallrye.stork stork-load-balancer-power-of-two-choices 2.6.0 Configuration # For each service expected to use a random service selection, configure the load-balancer to be power-of-two-choices : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = power-of-two-choices quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = power-of-two-choices Supported attributes are the following: Attribute Mandatory Default Value Description use-secure-random No false Whether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference","title":"Power Of Two Choices"},{"location":"load-balancer/power-of-two-choices/#power-of-two-choices-load-balancing","text":"The power-of-two-choices load balancing selects two random service instances and then chooses the one with the least inflight requests. It avoids the overhead of least-requests and the worst case for random where it selects a busy destination. This strategy acts as follows: when the selection happens, it picks two random instances from the list, it returns the least loaded instance (based on the number of inflight requests), when the operation completes, successfully or not, the number of inflight requests for the instance is decremented. Check The Power of Two Random Choices paper to learn more about this pattern and the benefits.","title":"Power Of Two Choices Load Balancing"},{"location":"load-balancer/power-of-two-choices/#dependency","text":"First, you need to add the random load-balancer to your project: io.smallrye.stork stork-load-balancer-power-of-two-choices 2.6.0 ","title":"Dependency"},{"location":"load-balancer/power-of-two-choices/#configuration","text":"For each service expected to use a random service selection, configure the load-balancer to be power-of-two-choices : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = power-of-two-choices quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = power-of-two-choices Supported attributes are the following: Attribute Mandatory Default Value Description use-secure-random No false Whether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference","title":"Configuration"},{"location":"load-balancer/random/","text":"Random Load Balancing # The random load balancing is a straightforward service instance selection solution that picks a random instance every time. Dependency # First, you need to add the random load-balancer to your project: io.smallrye.stork stork-load-balancer-random 2.6.0 Configuration # For each service expected to use a random service selection, configure the load-balancer to be random : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = random quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = random Supported attributes are the following: Attribute Mandatory Default Value Description use-secure-random No false Whether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference","title":"Random"},{"location":"load-balancer/random/#random-load-balancing","text":"The random load balancing is a straightforward service instance selection solution that picks a random instance every time.","title":"Random Load Balancing"},{"location":"load-balancer/random/#dependency","text":"First, you need to add the random load-balancer to your project: io.smallrye.stork stork-load-balancer-random 2.6.0 ","title":"Dependency"},{"location":"load-balancer/random/#configuration","text":"For each service expected to use a random service selection, configure the load-balancer to be random : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = random quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = random Supported attributes are the following: Attribute Mandatory Default Value Description use-secure-random No false Whether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference","title":"Configuration"},{"location":"load-balancer/response-time/","text":"Least Response Time Load Balancing # The least-response-time load balancing strategy collects response times of the calls made with service instances and picks an instance based on this information. Erroneous responses are treated as responses with a long response time, by default 60 seconds. This can be controlled with the error-penalty attribute. The algorithm for service instance selection is as follows: if there is a service instance that wasn\u2019t used before - use it, otherwise: if there are any service instances with collected response times - select the one for which score is the lowest, otherwise: select a random instance The score for an instance decreases in time if an instance is not used. This way we ensure that instances that haven\u2019t been used in a long time, are retried. For the details on the score calculation, see Score calculation Dependency # To use this load balancer, start with adding the least-response-time load-balancer dependency to your project: io.smallrye.stork stork-load-balancer-least-response-time 2.6.0 Configuration # For each service expected to use a least-response-time selection, configure the load-balancer to be least-response-time : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = least-response-time quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = least-response-time The following attributes are supported: Attribute Mandatory Default Value Description declining-factor No 0.9 How much score should decline in time, see Score calculation in the docs for details. error-penalty No 60s This load balancer treats an erroneous response as a response after this time. use-secure-random No false Whether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference Score calculation # The score of a service instance is calculated by dividing a weighted sum of response times by sum of the weighs. The result is additionally adjusted to account for instances that haven\u2019t been used for a long time. Let: \\(n\\) denote how many instance selections were made so far \\(t_i\\) denote the response time for call \\(i\\) \\(n_i\\) denote the number of instance selections done until the moment of recording the response time for call \\(i\\) \\(n_{max}\\) denote the number of instance selections at the moment of last call recorded with this instance \\(\\delta\\) denote a configurable declining-factor The idea for the weight is to decrease the importance of the data collected long time (many calls) ago. For call \\(i\\) , the weight is calculated as follows: $$ w_i = \\delta ^ {(n - n_i)} $$ The score of a service instance is calculated as: $$ score(n) = \\delta^{n - n_{max}} * \\frac{\\sum_i t_i * w_i}{\\sum_i w_i} = \\delta^{n - n_{max}} * \\frac{\\sum_i t_i * \\delta^{n - n_i}}{\\sum_i \\delta^{n - n_i}} $$ The declining-factor should be in \\((0, 1]\\) , the default is \\(0.9\\) . Using a lower value makes the older response times less important.","title":"Response Time"},{"location":"load-balancer/response-time/#least-response-time-load-balancing","text":"The least-response-time load balancing strategy collects response times of the calls made with service instances and picks an instance based on this information. Erroneous responses are treated as responses with a long response time, by default 60 seconds. This can be controlled with the error-penalty attribute. The algorithm for service instance selection is as follows: if there is a service instance that wasn\u2019t used before - use it, otherwise: if there are any service instances with collected response times - select the one for which score is the lowest, otherwise: select a random instance The score for an instance decreases in time if an instance is not used. This way we ensure that instances that haven\u2019t been used in a long time, are retried. For the details on the score calculation, see Score calculation","title":"Least Response Time Load Balancing"},{"location":"load-balancer/response-time/#dependency","text":"To use this load balancer, start with adding the least-response-time load-balancer dependency to your project: io.smallrye.stork stork-load-balancer-least-response-time 2.6.0 ","title":"Dependency"},{"location":"load-balancer/response-time/#configuration","text":"For each service expected to use a least-response-time selection, configure the load-balancer to be least-response-time : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = least-response-time quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = least-response-time The following attributes are supported: Attribute Mandatory Default Value Description declining-factor No 0.9 How much score should decline in time, see Score calculation in the docs for details. error-penalty No 60s This load balancer treats an erroneous response as a response after this time. use-secure-random No false Whether the load balancer should use a SecureRandom instead of a Random (default). Check this page to understand the difference","title":"Configuration"},{"location":"load-balancer/response-time/#score-calculation","text":"The score of a service instance is calculated by dividing a weighted sum of response times by sum of the weighs. The result is additionally adjusted to account for instances that haven\u2019t been used for a long time. Let: \\(n\\) denote how many instance selections were made so far \\(t_i\\) denote the response time for call \\(i\\) \\(n_i\\) denote the number of instance selections done until the moment of recording the response time for call \\(i\\) \\(n_{max}\\) denote the number of instance selections at the moment of last call recorded with this instance \\(\\delta\\) denote a configurable declining-factor The idea for the weight is to decrease the importance of the data collected long time (many calls) ago. For call \\(i\\) , the weight is calculated as follows: $$ w_i = \\delta ^ {(n - n_i)} $$ The score of a service instance is calculated as: $$ score(n) = \\delta^{n - n_{max}} * \\frac{\\sum_i t_i * w_i}{\\sum_i w_i} = \\delta^{n - n_{max}} * \\frac{\\sum_i t_i * \\delta^{n - n_i}}{\\sum_i \\delta^{n - n_i}} $$ The declining-factor should be in \\((0, 1]\\) , the default is \\(0.9\\) . Using a lower value makes the older response times less important.","title":"Score calculation"},{"location":"load-balancer/round-robin/","text":"Round-Robin Load Balancing # The round-robin is a straightforward load-balancing solution that just iterates over the set of service instances. While being simple, this solution shares the load among the instances and may be sufficient in many cases. The round-robin strategy is the default load-balancing strategy. It is provided by Stork itself, and so does not require an additional dependency. Configuration # There is no need to configure the load-balancing strategy to be round-robin . Stork automatically uses this strategy when none are configured. However, you can also configure it explicitly as follows: stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = round-robin quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = round-robin","title":"Round Robin"},{"location":"load-balancer/round-robin/#round-robin-load-balancing","text":"The round-robin is a straightforward load-balancing solution that just iterates over the set of service instances. While being simple, this solution shares the load among the instances and may be sufficient in many cases. The round-robin strategy is the default load-balancing strategy. It is provided by Stork itself, and so does not require an additional dependency.","title":"Round-Robin Load Balancing"},{"location":"load-balancer/round-robin/#configuration","text":"There is no need to configure the load-balancing strategy to be round-robin . Stork automatically uses this strategy when none are configured. However, you can also configure it explicitly as follows: stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = round-robin quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = round-robin","title":"Configuration"},{"location":"load-balancer/sticky/","text":"Sticky Load Balancing # The sticky load balancer selects a single service instance and keeps using it until it fails. Then, it selects another one. It is possible to configure a backoff time to specify for how long a failing service instance should not be retried. Precisely, the load balancer works as follows: if no service instance has been selected so far, select the first instance from the collection; else if the previously selected service instance has not failed, and is still available, return it; else return the first available service instance that has no recorded failure, if one exists; else, find the available instance for which the time since the last failure is the longest, and if the backoff time since the failure passed, return it; or, throw an NoAcceptableServiceInstanceFoundException as no acceptable instances are available. Configuration # To use the sticky load service selection strategy, set the load balancer type to sticky : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = sticky quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = sticky The following attributes are supported: Attribute Mandatory Default Value Description failure-backoff-time No 0 After how much time, a service instance that has failed can be reused.","title":"Sticky"},{"location":"load-balancer/sticky/#sticky-load-balancing","text":"The sticky load balancer selects a single service instance and keeps using it until it fails. Then, it selects another one. It is possible to configure a backoff time to specify for how long a failing service instance should not be retried. Precisely, the load balancer works as follows: if no service instance has been selected so far, select the first instance from the collection; else if the previously selected service instance has not failed, and is still available, return it; else return the first available service instance that has no recorded failure, if one exists; else, find the available instance for which the time since the last failure is the longest, and if the backoff time since the failure passed, return it; or, throw an NoAcceptableServiceInstanceFoundException as no acceptable instances are available.","title":"Sticky Load Balancing"},{"location":"load-balancer/sticky/#configuration","text":"To use the sticky load service selection strategy, set the load balancer type to sticky : stork standalone stork in quarkus stork.my-service.service-discovery.type = ... stork.my-service.service-discovery... = ... stork.my-service.load-balancer.type = sticky quarkus.stork.my-service.service-discovery.type = ... quarkus.stork.my-service.service-discovery... = ... quarkus.stork.my-service.load-balancer.type = sticky The following attributes are supported: Attribute Mandatory Default Value Description failure-backoff-time No 0 After how much time, a service instance that has failed can be reused.","title":"Configuration"},{"location":"service-discovery/composite/","text":"Composite Service Discovery # Some organizations use hybrid infrastructure. In such an infrastructure, different service instances may be discoverable via different service discovery providers. E.g. when serviceA is being migrated from a VM to Kubernetes, its older versions can be discovered via Consul and newer via Kubernetes. composite service discovery addresses this problem by letting you define a service that consists of multiple services. Dependency # To use the composite service discovery, first add the appropriate Service Discovery provider dependency to your project: io.smallrye.stork stork-service-discovery-composite 2.6.0 Configuration # For each service that should consist of multiple services, configure the service discovery type , and set the services property to a comma separated list of services: stork standalone stork in quarkus stork.my-service.service-discovery.type = composite stork.my-service.service-discovery.services = serviceA,serviceB stork.serviceA.service-discovery.type = ... stork.serviceB.service-discovery.type = ... quarkus.stork.my-service.service-discovery.type = composite quarkus.stork.my-service.service-discovery.services = serviceA,serviceB quarkus.stork.serviceA.service-discovery.type = ... quarkus.stork.serviceB.service-discovery.type = ... Remember to define the services that make up your composite service. These are all the parameters of the composite service discovery: Attribute Mandatory Default Value Description services Yes A comma-separated list of services that this services consists of.","title":"Composite"},{"location":"service-discovery/composite/#composite-service-discovery","text":"Some organizations use hybrid infrastructure. In such an infrastructure, different service instances may be discoverable via different service discovery providers. E.g. when serviceA is being migrated from a VM to Kubernetes, its older versions can be discovered via Consul and newer via Kubernetes. composite service discovery addresses this problem by letting you define a service that consists of multiple services.","title":"Composite Service Discovery"},{"location":"service-discovery/composite/#dependency","text":"To use the composite service discovery, first add the appropriate Service Discovery provider dependency to your project: io.smallrye.stork stork-service-discovery-composite 2.6.0 ","title":"Dependency"},{"location":"service-discovery/composite/#configuration","text":"For each service that should consist of multiple services, configure the service discovery type , and set the services property to a comma separated list of services: stork standalone stork in quarkus stork.my-service.service-discovery.type = composite stork.my-service.service-discovery.services = serviceA,serviceB stork.serviceA.service-discovery.type = ... stork.serviceB.service-discovery.type = ... quarkus.stork.my-service.service-discovery.type = composite quarkus.stork.my-service.service-discovery.services = serviceA,serviceB quarkus.stork.serviceA.service-discovery.type = ... quarkus.stork.serviceB.service-discovery.type = ... Remember to define the services that make up your composite service. These are all the parameters of the composite service discovery: Attribute Mandatory Default Value Description services Yes A comma-separated list of services that this services consists of.","title":"Configuration"},{"location":"service-discovery/consul/","text":"Consul Service Discovery # Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure. It\u2019s often used as service discovery backend to register and locate the services composing your system. Consul makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. External services can be registered as well. This page explains how Stork can use Consul to handle the service discovery and service registration. Dependency # First, you need to add the Stork Consul Service Discovery provider: io.smallrye.stork stork-service-discovery-consul 2.6.0 Service discovery configuration # For each service that should get the service instances from Consul, configure the service discovery type : stork standalone stork in quarkus stork.my-service.service-discovery.type = consul quarkus.stork.my-service.service-discovery.type = consul Consul service discovery is configured with the following parameters: Attribute Mandatory Default Value Description consul-host No localhost The Consul host. consul-port No 8500 The Consul port. use-health-checks No true Whether to use health check. application No The application name; if not defined Stork service name will be used. refresh-period No 5M Service discovery cache refresh period. secure No whether the connection with the service should be encrypted with TLS. Service registration # Stork also provides the ability to register services using Consul as backend. Service registration configuration # For each service that should register the service instances in Consul, configure the service registrar type : stork standalone stork.my-service.service-registrar.type = consul stork in quarkus quarkus.stork.my-service.service-registrar.type = consul Consul service registrar is configured with the following parameters: Attribute Mandatory Default Value Description consul-host No localhost The Consul host. consul-port No 8500 The Consul port.","title":"Consul"},{"location":"service-discovery/consul/#consul-service-discovery","text":"Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure. It\u2019s often used as service discovery backend to register and locate the services composing your system. Consul makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. External services can be registered as well. This page explains how Stork can use Consul to handle the service discovery and service registration.","title":"Consul Service Discovery"},{"location":"service-discovery/consul/#dependency","text":"First, you need to add the Stork Consul Service Discovery provider: io.smallrye.stork stork-service-discovery-consul 2.6.0 ","title":"Dependency"},{"location":"service-discovery/consul/#service-discovery-configuration","text":"For each service that should get the service instances from Consul, configure the service discovery type : stork standalone stork in quarkus stork.my-service.service-discovery.type = consul quarkus.stork.my-service.service-discovery.type = consul Consul service discovery is configured with the following parameters: Attribute Mandatory Default Value Description consul-host No localhost The Consul host. consul-port No 8500 The Consul port. use-health-checks No true Whether to use health check. application No The application name; if not defined Stork service name will be used. refresh-period No 5M Service discovery cache refresh period. secure No whether the connection with the service should be encrypted with TLS.","title":"Service discovery configuration"},{"location":"service-discovery/consul/#service-registration","text":"Stork also provides the ability to register services using Consul as backend.","title":"Service registration"},{"location":"service-discovery/consul/#service-registration-configuration","text":"For each service that should register the service instances in Consul, configure the service registrar type : stork standalone stork.my-service.service-registrar.type = consul stork in quarkus quarkus.stork.my-service.service-registrar.type = consul Consul service registrar is configured with the following parameters: Attribute Mandatory Default Value Description consul-host No localhost The Consul host. consul-port No 8500 The Consul port.","title":"Service registration configuration"},{"location":"service-discovery/custom-service-discovery/","text":"Implement your own service discovery mechanism # Stork is extensible, and you can implement your own service discovery mechanism. Dependencies # To implement your Service Discovery Provider , make sure your project depends on Core and Configuration Generator. The former brings classes necessary to implement custom discovery, the latter contains an annotation processor that generates classes needed by Stork. io.smallrye.stork stork-core 2.6.0 io.smallrye.stork stork-configuration-generator provided 2.6.0 Implementing a service discovery provider # Service discovery implementation consists of three elements: ServiceDiscovery which is responsible for locating service instances for a single Stork service. ServiceDiscoveryProvider which creates instances of ServiceDiscovery for a given service discovery type . $typeConfiguration which is a configuration for the discovery. This class is automatically generated during the compilation (using an annotation processor). A type , for example, acme , identifies each provider. This type is used in the configuration to reference the provider: stork standalone stork in quarkus stork.my-service.service-discovery.type = acme quarkus.stork.my-service.service-discovery.type = acme A ServiceDiscoveryProvider implementation needs to be annotated with @ServiceDiscoveryType that defines the type . Any configuration properties that the provider expects should be defined with @ServiceDiscoveryAttribute annotations placed on the provider. Optionally, you can also add @ApplicationScoped annotation in order to provide the service discovery implementation as CDI bean. A service discovery provider class should look as follows: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package examples ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.config.ServiceConfig ; import io.smallrye.stork.api.config.ServiceDiscoveryAttribute ; import io.smallrye.stork.api.config.ServiceDiscoveryType ; import io.smallrye.stork.spi.StorkInfrastructure ; import io.smallrye.stork.spi.ServiceDiscoveryProvider ; import jakarta.enterprise.context.ApplicationScoped ; @ServiceDiscoveryType ( \"acme\" ) @ServiceDiscoveryAttribute ( name = \"host\" , description = \"Host name of the service discovery server.\" , required = true ) @ServiceDiscoveryAttribute ( name = \"port\" , description = \"Hort of the service discovery server.\" , required = false ) @ApplicationScoped public class AcmeServiceDiscoveryProvider implements ServiceDiscoveryProvider < AcmeConfiguration > { @Override public ServiceDiscovery createServiceDiscovery ( AcmeConfiguration config , String serviceName , ServiceConfig serviceConfig , StorkInfrastructure storkInfrastructure ) { return new AcmeServiceDiscovery ( config ); } } Note, that the ServiceDiscoveryProvider interface takes a configuration class as a parameter. This configuration class is generated automatically by the Configuration Generator . Its name is created by appending Configuration to the service discovery type, such as AcmeConfiguration . The next step is to implement the ServiceDiscovery interface: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package examples ; import java.util.Collections ; import java.util.List ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.impl.DefaultServiceInstance ; import io.smallrye.stork.utils.ServiceInstanceIds ; public class AcmeServiceDiscovery implements ServiceDiscovery { private final String host ; private final int port ; public AcmeServiceDiscovery ( AcmeConfiguration configuration ) { this . host = configuration . getHost (); this . port = Integer . parseInt ( configuration . getPort ()); } @Override public Uni < List < ServiceInstance >> getServiceInstances () { // Proceed to the lookup... // Here, we just return a DefaultServiceInstance with the configured host and port // The last parameter specifies whether the communication with the instance should // happen over a secure connection DefaultServiceInstance instance = new DefaultServiceInstance ( ServiceInstanceIds . next (), host , port , false ); return Uni . createFrom (). item (() -> Collections . singletonList ( instance )); } } This implementation is simplistic. Typically, instead of creating a service instance with values from the configuration, you would connect to a service discovery backend, look for the service and build the list of service instance accordingly. That\u2019s why the method returns a Uni . Most of the time, the lookup is a remote operation. As you can see, the AcmeConfiguration class gives access to the configuration attribute. Using your service discovery # In the project using it, don\u2019t forget to add the dependency on the module providing your implementation. Then, in the configuration, just add: stork standalone stork in quarkus stork.my-service.service-discovery.type = acme stork.my-service.service-discovery.host = localhost stork.my-service.service-discovery.port = 1234 quarkus.stork.my-service.service-discovery.type = acme quarkus.stork.my-service.service-discovery.host = localhost quarkus.stork.my-service.service-discovery.port = 1234 Then, Stork will use your implementation to locate the my-service service. Using your service discovery using the programmatic API # When building your service discovery project, the configuration generator creates a configuration class. This class can be used to configure your service discovery using the Stork programmatic API. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.api.StorkServiceRegistry ; public class AcmeDiscoveryApiUsage { public void example ( StorkServiceRegistry stork ) { stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new AcmeConfiguration (). withHost ( \"my-host\" )) ); Uni < ServiceInstance > uni = stork . getService ( \"my-service\" ). selectInstance (); } } Remember that attributes, like host , are declared using the @ServiceDiscoveryAttribute annotation on the ServiceDiscoveryProvider implementation. Caching the service instances # Your ServiceDiscovery implementation can extend io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. In this case, the retrieved set of ServiceInstance is cached and only updated after some time. This duration is an additional configuration attribute. For homogeneity, we recommend the following attribute: @ServiceDiscoveryAttribute ( name = \"refresh-period\" , description = \"Service discovery cache refresh period.\" , defaultValue = CachingServiceDiscovery . DEFAULT_REFRESH_INTERVAL ) The following snippet extends the acme service discovery with the refresh-period attribute: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package examples ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.config.ServiceConfig ; import io.smallrye.stork.api.config.ServiceDiscoveryAttribute ; import io.smallrye.stork.api.config.ServiceDiscoveryType ; import io.smallrye.stork.impl.CachingServiceDiscovery ; import io.smallrye.stork.spi.ServiceDiscoveryProvider ; import io.smallrye.stork.spi.StorkInfrastructure ; import jakarta.enterprise.context.ApplicationScoped ; @ServiceDiscoveryType ( \"cached-acme\" ) @ServiceDiscoveryAttribute ( name = \"host\" , description = \"Host name of the service discovery server.\" , required = true ) @ServiceDiscoveryAttribute ( name = \"port\" , description = \"Hort of the service discovery server.\" , required = false ) @ServiceDiscoveryAttribute ( name = \"refresh-period\" , description = \"Service discovery cache refresh period.\" , defaultValue = CachingServiceDiscovery . DEFAULT_REFRESH_INTERVAL ) @ApplicationScoped public class CachedAcmeServiceDiscoveryProvider implements ServiceDiscoveryProvider < CachedAcmeConfiguration > { @Override public ServiceDiscovery createServiceDiscovery ( CachedAcmeConfiguration config , String serviceName , ServiceConfig serviceConfig , StorkInfrastructure storkInfrastructure ) { return new CachedAcmeServiceDiscovery ( config ); } } Extending io.smallrye.stork.impl.CachingServiceDiscovery changes the structure of the service discovery implementation: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.impl.CachingServiceDiscovery ; import io.smallrye.stork.impl.DefaultServiceInstance ; import io.smallrye.stork.utils.ServiceInstanceIds ; import java.util.Collections ; import java.util.List ; public class CachedAcmeServiceDiscovery extends CachingServiceDiscovery { private final String host ; private final int port ; public CachedAcmeServiceDiscovery ( CachedAcmeConfiguration configuration ) { super ( configuration . getRefreshPeriod ()); // (1) this . host = configuration . getHost (); this . port = Integer . parseInt ( configuration . getPort ()); } @Override // (2) public Uni < List < ServiceInstance >> fetchNewServiceInstances ( List < ServiceInstance > previousInstances ) { // Retrieve services... DefaultServiceInstance instance = new DefaultServiceInstance ( ServiceInstanceIds . next (), host , port , false ); return Uni . createFrom (). item (() -> Collections . singletonList ( instance )); } } Call the super constructor with the refresh-period value Implement fetchNewServiceInstances instead of getServiceInstances . The method is called periodically, and the retrieved instances are cached. This implementation is simplistic. If the retrieval fails, the error is reported, and Stork keeps the previously retrieved list of instances. Customizing the caching strategy # Sometimes it can be useful to change this behaviour and customize the cache expiration strategy. For example, imagine you are using a backend service discovery where service instances can change very frequently. Moreover, contacting the backend service discovery can be expensive in terms of computing, thus finding a good value for the refreshing time can be mission impossible. For these situations, Stork allows to implement a better expiration strategy for the cache. If you want to customize the expiration strategy, you need: 1. Implement the cache method where the expiration strategy should be defined. 2. Invalidate the cache when expiration condition evaluates to true. Look at the example bellow: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.impl.CachingServiceDiscovery ; import io.smallrye.stork.impl.DefaultServiceInstance ; import io.smallrye.stork.utils.ServiceInstanceIds ; import java.util.Collections ; import java.util.List ; import java.util.concurrent.atomic.AtomicBoolean ; public class CustomExpirationCachedAcmeServiceDiscovery extends CachingServiceDiscovery { private final String host ; private final int port ; private AtomicBoolean invalidated = new AtomicBoolean (); public CustomExpirationCachedAcmeServiceDiscovery ( CachedAcmeConfiguration configuration ) { super ( configuration . getRefreshPeriod ()); this . host = configuration . getHost (); this . port = Integer . parseInt ( configuration . getPort ()); } @Override public Uni < List < ServiceInstance >> fetchNewServiceInstances ( List < ServiceInstance > previousInstances ) { // Retrieve services... DefaultServiceInstance instance = new DefaultServiceInstance ( ServiceInstanceIds . next (), host , port , false ); return Uni . createFrom (). item (() -> Collections . singletonList ( instance )); } @Override public Uni < List < ServiceInstance >> cache ( Uni < List < ServiceInstance >> uni ) { return uni . memoize (). until (() -> invalidated . get ()); } //command-based cache invalidation: user triggers the action to invalidate the cache. public void invalidate () { invalidated . set ( true ); } } Additionally, you can check the Kubernetes Service Discovery for further details about an event-based invalidation example.","title":"Custom Service Discovery"},{"location":"service-discovery/custom-service-discovery/#implement-your-own-service-discovery-mechanism","text":"Stork is extensible, and you can implement your own service discovery mechanism.","title":"Implement your own service discovery mechanism"},{"location":"service-discovery/custom-service-discovery/#dependencies","text":"To implement your Service Discovery Provider , make sure your project depends on Core and Configuration Generator. The former brings classes necessary to implement custom discovery, the latter contains an annotation processor that generates classes needed by Stork. io.smallrye.stork stork-core 2.6.0 io.smallrye.stork stork-configuration-generator provided 2.6.0 ","title":"Dependencies"},{"location":"service-discovery/custom-service-discovery/#implementing-a-service-discovery-provider","text":"Service discovery implementation consists of three elements: ServiceDiscovery which is responsible for locating service instances for a single Stork service. ServiceDiscoveryProvider which creates instances of ServiceDiscovery for a given service discovery type . $typeConfiguration which is a configuration for the discovery. This class is automatically generated during the compilation (using an annotation processor). A type , for example, acme , identifies each provider. This type is used in the configuration to reference the provider: stork standalone stork in quarkus stork.my-service.service-discovery.type = acme quarkus.stork.my-service.service-discovery.type = acme A ServiceDiscoveryProvider implementation needs to be annotated with @ServiceDiscoveryType that defines the type . Any configuration properties that the provider expects should be defined with @ServiceDiscoveryAttribute annotations placed on the provider. Optionally, you can also add @ApplicationScoped annotation in order to provide the service discovery implementation as CDI bean. A service discovery provider class should look as follows: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package examples ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.config.ServiceConfig ; import io.smallrye.stork.api.config.ServiceDiscoveryAttribute ; import io.smallrye.stork.api.config.ServiceDiscoveryType ; import io.smallrye.stork.spi.StorkInfrastructure ; import io.smallrye.stork.spi.ServiceDiscoveryProvider ; import jakarta.enterprise.context.ApplicationScoped ; @ServiceDiscoveryType ( \"acme\" ) @ServiceDiscoveryAttribute ( name = \"host\" , description = \"Host name of the service discovery server.\" , required = true ) @ServiceDiscoveryAttribute ( name = \"port\" , description = \"Hort of the service discovery server.\" , required = false ) @ApplicationScoped public class AcmeServiceDiscoveryProvider implements ServiceDiscoveryProvider < AcmeConfiguration > { @Override public ServiceDiscovery createServiceDiscovery ( AcmeConfiguration config , String serviceName , ServiceConfig serviceConfig , StorkInfrastructure storkInfrastructure ) { return new AcmeServiceDiscovery ( config ); } } Note, that the ServiceDiscoveryProvider interface takes a configuration class as a parameter. This configuration class is generated automatically by the Configuration Generator . Its name is created by appending Configuration to the service discovery type, such as AcmeConfiguration . The next step is to implement the ServiceDiscovery interface: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package examples ; import java.util.Collections ; import java.util.List ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.impl.DefaultServiceInstance ; import io.smallrye.stork.utils.ServiceInstanceIds ; public class AcmeServiceDiscovery implements ServiceDiscovery { private final String host ; private final int port ; public AcmeServiceDiscovery ( AcmeConfiguration configuration ) { this . host = configuration . getHost (); this . port = Integer . parseInt ( configuration . getPort ()); } @Override public Uni < List < ServiceInstance >> getServiceInstances () { // Proceed to the lookup... // Here, we just return a DefaultServiceInstance with the configured host and port // The last parameter specifies whether the communication with the instance should // happen over a secure connection DefaultServiceInstance instance = new DefaultServiceInstance ( ServiceInstanceIds . next (), host , port , false ); return Uni . createFrom (). item (() -> Collections . singletonList ( instance )); } } This implementation is simplistic. Typically, instead of creating a service instance with values from the configuration, you would connect to a service discovery backend, look for the service and build the list of service instance accordingly. That\u2019s why the method returns a Uni . Most of the time, the lookup is a remote operation. As you can see, the AcmeConfiguration class gives access to the configuration attribute.","title":"Implementing a service discovery provider"},{"location":"service-discovery/custom-service-discovery/#using-your-service-discovery","text":"In the project using it, don\u2019t forget to add the dependency on the module providing your implementation. Then, in the configuration, just add: stork standalone stork in quarkus stork.my-service.service-discovery.type = acme stork.my-service.service-discovery.host = localhost stork.my-service.service-discovery.port = 1234 quarkus.stork.my-service.service-discovery.type = acme quarkus.stork.my-service.service-discovery.host = localhost quarkus.stork.my-service.service-discovery.port = 1234 Then, Stork will use your implementation to locate the my-service service.","title":"Using your service discovery"},{"location":"service-discovery/custom-service-discovery/#using-your-service-discovery-using-the-programmatic-api","text":"When building your service discovery project, the configuration generator creates a configuration class. This class can be used to configure your service discovery using the Stork programmatic API. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDefinition ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.api.StorkServiceRegistry ; public class AcmeDiscoveryApiUsage { public void example ( StorkServiceRegistry stork ) { stork . defineIfAbsent ( \"my-service\" , ServiceDefinition . of ( new AcmeConfiguration (). withHost ( \"my-host\" )) ); Uni < ServiceInstance > uni = stork . getService ( \"my-service\" ). selectInstance (); } } Remember that attributes, like host , are declared using the @ServiceDiscoveryAttribute annotation on the ServiceDiscoveryProvider implementation.","title":"Using your service discovery using the programmatic API"},{"location":"service-discovery/custom-service-discovery/#caching-the-service-instances","text":"Your ServiceDiscovery implementation can extend io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. In this case, the retrieved set of ServiceInstance is cached and only updated after some time. This duration is an additional configuration attribute. For homogeneity, we recommend the following attribute: @ServiceDiscoveryAttribute ( name = \"refresh-period\" , description = \"Service discovery cache refresh period.\" , defaultValue = CachingServiceDiscovery . DEFAULT_REFRESH_INTERVAL ) The following snippet extends the acme service discovery with the refresh-period attribute: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package examples ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.config.ServiceConfig ; import io.smallrye.stork.api.config.ServiceDiscoveryAttribute ; import io.smallrye.stork.api.config.ServiceDiscoveryType ; import io.smallrye.stork.impl.CachingServiceDiscovery ; import io.smallrye.stork.spi.ServiceDiscoveryProvider ; import io.smallrye.stork.spi.StorkInfrastructure ; import jakarta.enterprise.context.ApplicationScoped ; @ServiceDiscoveryType ( \"cached-acme\" ) @ServiceDiscoveryAttribute ( name = \"host\" , description = \"Host name of the service discovery server.\" , required = true ) @ServiceDiscoveryAttribute ( name = \"port\" , description = \"Hort of the service discovery server.\" , required = false ) @ServiceDiscoveryAttribute ( name = \"refresh-period\" , description = \"Service discovery cache refresh period.\" , defaultValue = CachingServiceDiscovery . DEFAULT_REFRESH_INTERVAL ) @ApplicationScoped public class CachedAcmeServiceDiscoveryProvider implements ServiceDiscoveryProvider < CachedAcmeConfiguration > { @Override public ServiceDiscovery createServiceDiscovery ( CachedAcmeConfiguration config , String serviceName , ServiceConfig serviceConfig , StorkInfrastructure storkInfrastructure ) { return new CachedAcmeServiceDiscovery ( config ); } } Extending io.smallrye.stork.impl.CachingServiceDiscovery changes the structure of the service discovery implementation: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceDiscovery ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.impl.CachingServiceDiscovery ; import io.smallrye.stork.impl.DefaultServiceInstance ; import io.smallrye.stork.utils.ServiceInstanceIds ; import java.util.Collections ; import java.util.List ; public class CachedAcmeServiceDiscovery extends CachingServiceDiscovery { private final String host ; private final int port ; public CachedAcmeServiceDiscovery ( CachedAcmeConfiguration configuration ) { super ( configuration . getRefreshPeriod ()); // (1) this . host = configuration . getHost (); this . port = Integer . parseInt ( configuration . getPort ()); } @Override // (2) public Uni < List < ServiceInstance >> fetchNewServiceInstances ( List < ServiceInstance > previousInstances ) { // Retrieve services... DefaultServiceInstance instance = new DefaultServiceInstance ( ServiceInstanceIds . next (), host , port , false ); return Uni . createFrom (). item (() -> Collections . singletonList ( instance )); } } Call the super constructor with the refresh-period value Implement fetchNewServiceInstances instead of getServiceInstances . The method is called periodically, and the retrieved instances are cached. This implementation is simplistic. If the retrieval fails, the error is reported, and Stork keeps the previously retrieved list of instances.","title":"Caching the service instances"},{"location":"service-discovery/custom-service-discovery/#customizing-the-caching-strategy","text":"Sometimes it can be useful to change this behaviour and customize the cache expiration strategy. For example, imagine you are using a backend service discovery where service instances can change very frequently. Moreover, contacting the backend service discovery can be expensive in terms of computing, thus finding a good value for the refreshing time can be mission impossible. For these situations, Stork allows to implement a better expiration strategy for the cache. If you want to customize the expiration strategy, you need: 1. Implement the cache method where the expiration strategy should be defined. 2. Invalidate the cache when expiration condition evaluates to true. Look at the example bellow: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package examples ; import io.smallrye.mutiny.Uni ; import io.smallrye.stork.api.ServiceInstance ; import io.smallrye.stork.impl.CachingServiceDiscovery ; import io.smallrye.stork.impl.DefaultServiceInstance ; import io.smallrye.stork.utils.ServiceInstanceIds ; import java.util.Collections ; import java.util.List ; import java.util.concurrent.atomic.AtomicBoolean ; public class CustomExpirationCachedAcmeServiceDiscovery extends CachingServiceDiscovery { private final String host ; private final int port ; private AtomicBoolean invalidated = new AtomicBoolean (); public CustomExpirationCachedAcmeServiceDiscovery ( CachedAcmeConfiguration configuration ) { super ( configuration . getRefreshPeriod ()); this . host = configuration . getHost (); this . port = Integer . parseInt ( configuration . getPort ()); } @Override public Uni < List < ServiceInstance >> fetchNewServiceInstances ( List < ServiceInstance > previousInstances ) { // Retrieve services... DefaultServiceInstance instance = new DefaultServiceInstance ( ServiceInstanceIds . next (), host , port , false ); return Uni . createFrom (). item (() -> Collections . singletonList ( instance )); } @Override public Uni < List < ServiceInstance >> cache ( Uni < List < ServiceInstance >> uni ) { return uni . memoize (). until (() -> invalidated . get ()); } //command-based cache invalidation: user triggers the action to invalidate the cache. public void invalidate () { invalidated . set ( true ); } } Additionally, you can check the Kubernetes Service Discovery for further details about an event-based invalidation example.","title":"Customizing the caching strategy"},{"location":"service-discovery/dns/","text":"DNS Service Discovery # DNS is a name resolution protocol used to determine IP addresses for hostnames. That makes it a natural fit for service discovery. Consul and AWS Cloud Map provide DNS resolutions for service discovery. This page explains how Stork can use DNS to handle the service discovery. DNS records # DNS supports a variety of record types . Stork can resolve hostnames to addresses based on SRV , A and AAAA records. All these types of records may return multiple addresses for a single hostname. You may choose to not resolve target hostnames. While A and AAAA records are quite similar, they just carry an IP ( v4 for A and v6 for AAAA ), the SRV records are different. They contain a weight , a target and a port for a service instance. The target returned in an SRV record needs to be resolved further by an A or an AAAA record. In short, it works as follows: Dependency # To use the DNS service discovery, you need to add the Stork DNS Service Discovery provider dependency to your project: io.smallrye.stork stork-service-discovery-dns 2.6.0 Configuration # Next, set the service discovery type to dns . Additionally, you would usually specify the DNS server, or servers, to use for the discovery. All in all, your configuration could look as follows: stork standalone stork in quarkus stork.my-service.service-discovery.type = dns # optional dns servers: stork.my-service.service-discovery.dns-servers = my-dns-server:8221,my-dns-server2 quarkus.stork.my-service.service-discovery.type = dns # optional dns servers: quarkus.stork.my-service.service-discovery.dns-servers = my-dns-server:8221,my-dns-server2 All the available parameters are as follows: Attribute Mandatory Default Value Description dns-servers No none Comma separated list of dns servers. Servers can either be in the server:port or just server form. Use none to use the system resolver. hostname No The hostname to look up; if not defined Stork service name will be used. record-type No SRV Type of the DNS record. A, AAAA and SRV records are supported port No Port of the service instances. Required if the record type is other than SRV. refresh-period No 5M Service discovery cache refresh period. secure No Whether the connection with the service should be encrypted with TLS. recursion-desired No true Whether DNS recursion is desired resolve-srv No true Whether DNS resolution for SRV records is desired dns-timeout No 5s Timeout for DNS queries fail-on-error No false Whether an error in retrieving service instances from one of the DNS servers should cause a failure of the discovery attempt.","title":"DNS"},{"location":"service-discovery/dns/#dns-service-discovery","text":"DNS is a name resolution protocol used to determine IP addresses for hostnames. That makes it a natural fit for service discovery. Consul and AWS Cloud Map provide DNS resolutions for service discovery. This page explains how Stork can use DNS to handle the service discovery.","title":"DNS Service Discovery"},{"location":"service-discovery/dns/#dns-records","text":"DNS supports a variety of record types . Stork can resolve hostnames to addresses based on SRV , A and AAAA records. All these types of records may return multiple addresses for a single hostname. You may choose to not resolve target hostnames. While A and AAAA records are quite similar, they just carry an IP ( v4 for A and v6 for AAAA ), the SRV records are different. They contain a weight , a target and a port for a service instance. The target returned in an SRV record needs to be resolved further by an A or an AAAA record. In short, it works as follows:","title":"DNS records"},{"location":"service-discovery/dns/#dependency","text":"To use the DNS service discovery, you need to add the Stork DNS Service Discovery provider dependency to your project: io.smallrye.stork stork-service-discovery-dns 2.6.0 ","title":"Dependency"},{"location":"service-discovery/dns/#configuration","text":"Next, set the service discovery type to dns . Additionally, you would usually specify the DNS server, or servers, to use for the discovery. All in all, your configuration could look as follows: stork standalone stork in quarkus stork.my-service.service-discovery.type = dns # optional dns servers: stork.my-service.service-discovery.dns-servers = my-dns-server:8221,my-dns-server2 quarkus.stork.my-service.service-discovery.type = dns # optional dns servers: quarkus.stork.my-service.service-discovery.dns-servers = my-dns-server:8221,my-dns-server2 All the available parameters are as follows: Attribute Mandatory Default Value Description dns-servers No none Comma separated list of dns servers. Servers can either be in the server:port or just server form. Use none to use the system resolver. hostname No The hostname to look up; if not defined Stork service name will be used. record-type No SRV Type of the DNS record. A, AAAA and SRV records are supported port No Port of the service instances. Required if the record type is other than SRV. refresh-period No 5M Service discovery cache refresh period. secure No Whether the connection with the service should be encrypted with TLS. recursion-desired No true Whether DNS recursion is desired resolve-srv No true Whether DNS resolution for SRV records is desired dns-timeout No 5s Timeout for DNS queries fail-on-error No false Whether an error in retrieving service instances from one of the DNS servers should cause a failure of the discovery attempt.","title":"Configuration"},{"location":"service-discovery/eureka/","text":"Eureka Service Discovery # Eureka is a RESTful service that is primarily used in the AWS cloud for the purpose of discovery, load balancing, and failover of middle-tier servers. This page explains how Stork can use Eureka to handle the service discovery and service registration. Dependency # First, you need to add the Stork Eureka Service Discovery provider: io.smallrye.stork stork-service-discovery-eureka 2.6.0 Service discovery configuration # For each application instance expected to be registered in Eureka, configure the lookup: stork standalone stork in quarkus stork.my-service.service-discovery.type = eureka stork.my-service.service-discovery.eureka-host = localhost stork.my-service.service-discovery.eureka-port = 8761 quarkus.stork.my-service.service-discovery.type = eureka quarkus.stork.my-service.service-discovery.eureka-host = localhost quarkus.stork.my-service.service-discovery.eureka-port = 8761 Stork looks for the service with the given name ( my-service in the previous example). Supported attributes are the following: Attribute Mandatory Default Value Description eureka-host Yes The Eureka server host. eureka-port No 8761 The Eureka server port. eureka-context-path No / The Eureka server root context path. application No The Eureka application Id; if not defined Stork service name will be used eureka-trust-all No false Enable/Disable the TLS certificate verification eureka-tls No false Use TLS to connect to the Eureka server instance No The Eureka application instance Id refresh-period No 5M Service discovery cache refresh period. secure No false Whether is should select the secured endpoint of the retrieved services. The application attribute is optional. It uses the Stork service name ( my-service in the previous configuration) if not set. The instance attribute allows selecting a specific instance. Using this attribute prevents load-balancing as you will always select a single instance. The secure attribute indicates if you want the secure virtual address of the application instance. If set to true , unsecured instances are filtered out from the available instances. Service registration # Stork also provides the ability to register services using Eureka as backend. Service registration configuration # For each service that should register the service instances in Eureka, configure the service registrar type : stork standalone stork.my-service.service-registrar.type = eureka stork.my-service.service-registrar.eureka-host = localhost stork.my-service.service-registrar.eureka-port = 8761 stork in quarkus quarkus.stork.my-service.service-registrar.type = eureka quarkus.stork.my-service.service-registrar.eureka-host = localhost quarkus.stork.my-service.service-registrar.eureka-port = 8761 Eureka service registrar is configured with the following parameters: Attribute Mandatory Default Value Description eureka-host No localhost The Eureka host. eureka-port No 8761 The Eureka port. eureka-context-path No / The Eureka server root context path. eureka-trust-all No false Enable/Disable the TLS certificate verification eureka-tls No false Use TLS to connect to the Eureka server","title":"Eureka"},{"location":"service-discovery/eureka/#eureka-service-discovery","text":"Eureka is a RESTful service that is primarily used in the AWS cloud for the purpose of discovery, load balancing, and failover of middle-tier servers. This page explains how Stork can use Eureka to handle the service discovery and service registration.","title":"Eureka Service Discovery"},{"location":"service-discovery/eureka/#dependency","text":"First, you need to add the Stork Eureka Service Discovery provider: io.smallrye.stork stork-service-discovery-eureka 2.6.0 ","title":"Dependency"},{"location":"service-discovery/eureka/#service-discovery-configuration","text":"For each application instance expected to be registered in Eureka, configure the lookup: stork standalone stork in quarkus stork.my-service.service-discovery.type = eureka stork.my-service.service-discovery.eureka-host = localhost stork.my-service.service-discovery.eureka-port = 8761 quarkus.stork.my-service.service-discovery.type = eureka quarkus.stork.my-service.service-discovery.eureka-host = localhost quarkus.stork.my-service.service-discovery.eureka-port = 8761 Stork looks for the service with the given name ( my-service in the previous example). Supported attributes are the following: Attribute Mandatory Default Value Description eureka-host Yes The Eureka server host. eureka-port No 8761 The Eureka server port. eureka-context-path No / The Eureka server root context path. application No The Eureka application Id; if not defined Stork service name will be used eureka-trust-all No false Enable/Disable the TLS certificate verification eureka-tls No false Use TLS to connect to the Eureka server instance No The Eureka application instance Id refresh-period No 5M Service discovery cache refresh period. secure No false Whether is should select the secured endpoint of the retrieved services. The application attribute is optional. It uses the Stork service name ( my-service in the previous configuration) if not set. The instance attribute allows selecting a specific instance. Using this attribute prevents load-balancing as you will always select a single instance. The secure attribute indicates if you want the secure virtual address of the application instance. If set to true , unsecured instances are filtered out from the available instances.","title":"Service discovery configuration"},{"location":"service-discovery/eureka/#service-registration","text":"Stork also provides the ability to register services using Eureka as backend.","title":"Service registration"},{"location":"service-discovery/eureka/#service-registration-configuration","text":"For each service that should register the service instances in Eureka, configure the service registrar type : stork standalone stork.my-service.service-registrar.type = eureka stork.my-service.service-registrar.eureka-host = localhost stork.my-service.service-registrar.eureka-port = 8761 stork in quarkus quarkus.stork.my-service.service-registrar.type = eureka quarkus.stork.my-service.service-registrar.eureka-host = localhost quarkus.stork.my-service.service-registrar.eureka-port = 8761 Eureka service registrar is configured with the following parameters: Attribute Mandatory Default Value Description eureka-host No localhost The Eureka host. eureka-port No 8761 The Eureka port. eureka-context-path No / The Eureka server root context path. eureka-trust-all No false Enable/Disable the TLS certificate verification eureka-tls No false Use TLS to connect to the Eureka server","title":"Service registration configuration"},{"location":"service-discovery/knative/","text":"Knative Service Discovery # Knative is a Kubernetes-based platform for serverless workloads. Knative provides a set of objects as Kubernetes Custom Resource Definitions (CRDs). These resources are used to define and control how your serverless workload behaves on the cluster. The Stork Knative service discovery implementation is very similar to the Kubernetes one. Stork will ask for Knative services to the cluster instead of vanilla Kubernetes services used by the Kubernetes implementation. To do so, Stork uses Fabric 8 Knative Client which is just an extension of Fabric8 Kubernetes Client. Dependency # First, you need to add the Stork Knative Service Discovery provider: io.smallrye.stork stork-service-discovery-knative 2.6.0 A few words about server authentication. # Stork uses Fabric8 Knative Client which is a Fabric8 Kubernetes Client extension to access the Kubernetes resources, concretely the DefaultKnativeClient implementation. Since Knative Client is just an extension of Fabric8 Kubernetes Client, it\u2019s also possible to get an instance of KnativeClient from KubernetesClient. DefaultKubernetesClient will try to read the ~/.kube/config file from your local machine and load the token for authenticating with the Kubernetes API server. The level of access (Roles) depends on the configured ServiceAccount . You can override this configuration if you want fine-grain control. Role-based access control (RBAC) # If you\u2019re using a Kubernetes cluster with Role-Based Access Control (RBAC) enabled, the default permissions for a ServiceAccount don\u2019t allow it to list or modify any resources. A ServiceAccount , a Role and a RoleBinding are needed in order to allow Stork to list the available service instances from the cluster or the namespace. An example that allows listing all endpoints could look something like this: --- apiVersion : v1 kind : ServiceAccount metadata : name : namespace : --- kind : Role apiVersion : rbac.authorization.k8s.io/v1 metadata : name : namespace : rules : - apiGroups : [ \"\" ] # \"\" indicates the core API group resources : [ \"endpoints\" , \"pods\" ] # stork queries service endpoints and pods verbs : [ \"get\" , \"list\" ] --- apiVersion : rbac.authorization.k8s.io/v1beta1 kind : RoleBinding metadata : name : namespace : subjects : - kind : ServiceAccount # Reference to upper's `metadata.name` name : # Reference to upper's `metadata.namespace` namespace : roleRef : kind : Role name : apiGroup : rbac.authorization.k8s.io Configuration # For each service expected to be exposed as Kubernetes Service , configure the lookup: stork standalone stork in quarkus stork.my-knservice.service-discovery.type = knative stork.my-knservice.service-discovery.knative-namespace = my-namespace quarkus.stork.my-knservice.service-discovery.type = knative quarkus.stork.my-knservice.service-discovery.knative-namespace = my-namespace Stork looks for the Knative Service with the given name ( my-knservice in the previous example) in the specified namespace. Stork inspects the Knative Service and retrieves the url of the service. Supported attributes are the following: Attribute Mandatory Default Value Description knative-host No The Knative API host. knative-namespace No The namespace of the service. Use all to discover all namespaces. application No The Knative application Id; if not defined Stork service name will be used. refresh-period No 5M Service discovery cache refresh period. secure No Whether the connection with the service should be encrypted with TLS. Caching the service instances # Contacting the cluster too much frequently can result in performance problems. It\u2019s why Knative Service discovery extends io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. Moreover, the caching expiration has been also improved in order to only update the retrieved set of ServiceInstance if some of them changes and an event is emitted. This is done by creating an Informer , similar to a Watch , able to observe the events on the Knative Service instances resources. Note that: - the cache is invalidated when an event is received. - the cache is validated once the instances are retrieved from the cluster, in the fetchNewServiceInstances method. - the cache method is overrided to customize the expiration strategy. In this case the collection of service instances will be kept until an event occurs.","title":"KNative"},{"location":"service-discovery/knative/#knative-service-discovery","text":"Knative is a Kubernetes-based platform for serverless workloads. Knative provides a set of objects as Kubernetes Custom Resource Definitions (CRDs). These resources are used to define and control how your serverless workload behaves on the cluster. The Stork Knative service discovery implementation is very similar to the Kubernetes one. Stork will ask for Knative services to the cluster instead of vanilla Kubernetes services used by the Kubernetes implementation. To do so, Stork uses Fabric 8 Knative Client which is just an extension of Fabric8 Kubernetes Client.","title":"Knative Service Discovery"},{"location":"service-discovery/knative/#dependency","text":"First, you need to add the Stork Knative Service Discovery provider: io.smallrye.stork stork-service-discovery-knative 2.6.0 ","title":"Dependency"},{"location":"service-discovery/knative/#a-few-words-about-server-authentication","text":"Stork uses Fabric8 Knative Client which is a Fabric8 Kubernetes Client extension to access the Kubernetes resources, concretely the DefaultKnativeClient implementation. Since Knative Client is just an extension of Fabric8 Kubernetes Client, it\u2019s also possible to get an instance of KnativeClient from KubernetesClient. DefaultKubernetesClient will try to read the ~/.kube/config file from your local machine and load the token for authenticating with the Kubernetes API server. The level of access (Roles) depends on the configured ServiceAccount . You can override this configuration if you want fine-grain control.","title":"A few words about server authentication."},{"location":"service-discovery/knative/#role-based-access-control-rbac","text":"If you\u2019re using a Kubernetes cluster with Role-Based Access Control (RBAC) enabled, the default permissions for a ServiceAccount don\u2019t allow it to list or modify any resources. A ServiceAccount , a Role and a RoleBinding are needed in order to allow Stork to list the available service instances from the cluster or the namespace. An example that allows listing all endpoints could look something like this: --- apiVersion : v1 kind : ServiceAccount metadata : name : namespace : --- kind : Role apiVersion : rbac.authorization.k8s.io/v1 metadata : name : namespace : rules : - apiGroups : [ \"\" ] # \"\" indicates the core API group resources : [ \"endpoints\" , \"pods\" ] # stork queries service endpoints and pods verbs : [ \"get\" , \"list\" ] --- apiVersion : rbac.authorization.k8s.io/v1beta1 kind : RoleBinding metadata : name : namespace : subjects : - kind : ServiceAccount # Reference to upper's `metadata.name` name : # Reference to upper's `metadata.namespace` namespace : roleRef : kind : Role name : apiGroup : rbac.authorization.k8s.io","title":"Role-based access control (RBAC)"},{"location":"service-discovery/knative/#configuration","text":"For each service expected to be exposed as Kubernetes Service , configure the lookup: stork standalone stork in quarkus stork.my-knservice.service-discovery.type = knative stork.my-knservice.service-discovery.knative-namespace = my-namespace quarkus.stork.my-knservice.service-discovery.type = knative quarkus.stork.my-knservice.service-discovery.knative-namespace = my-namespace Stork looks for the Knative Service with the given name ( my-knservice in the previous example) in the specified namespace. Stork inspects the Knative Service and retrieves the url of the service. Supported attributes are the following: Attribute Mandatory Default Value Description knative-host No The Knative API host. knative-namespace No The namespace of the service. Use all to discover all namespaces. application No The Knative application Id; if not defined Stork service name will be used. refresh-period No 5M Service discovery cache refresh period. secure No Whether the connection with the service should be encrypted with TLS.","title":"Configuration"},{"location":"service-discovery/knative/#caching-the-service-instances","text":"Contacting the cluster too much frequently can result in performance problems. It\u2019s why Knative Service discovery extends io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. Moreover, the caching expiration has been also improved in order to only update the retrieved set of ServiceInstance if some of them changes and an event is emitted. This is done by creating an Informer , similar to a Watch , able to observe the events on the Knative Service instances resources. Note that: - the cache is invalidated when an event is received. - the cache is validated once the instances are retrieved from the cluster, in the fetchNewServiceInstances method. - the cache method is overrided to customize the expiration strategy. In this case the collection of service instances will be kept until an event occurs.","title":"Caching the service instances"},{"location":"service-discovery/kubernetes/","text":"Kubernetes Service Discovery # Kubernetes has a built-in support for service discovery and load-balancing. However, you may need more flexibility to carefully select the service instance you want. This page explains how Stork can use the Kubernetes API to handle the service discovery. Dependency # First, you need to add the Stork Kubernetes Service Discovery provider: io.smallrye.stork stork-service-discovery-kubernetes 2.6.0 A few words about server authentication. # Stork uses Fabric8 Kubernetes Client to access the Kubernetes resources, concretely the DefaultKubernetesClient implementation. It will try to read the ~/.kube/config file from your local machine and load the token for authenticating with the Kubernetes API server. If you are using the Stork Kubernetes discovery provider from inside a Pod , it loads ~/.kube/config from the container file system. This file is automatically mounted inside the Pod. The level of access (Roles) depends on the configured ServiceAccount . You can override this configuration if you want fine-grain control. Role-based access control (RBAC) # If you\u2019re using a Kubernetes cluster with Role-Based Access Control (RBAC) enabled, the default permissions for a ServiceAccount don\u2019t allow it to list or modify any resources. A ServiceAccount , a Role and a RoleBinding are needed in order to allow Stork to list the available service instances from the cluster or the namespace. An example that allows listing all endpoints could look something like this: ------ apiVersion : v1 kind : ServiceAccount metadata : name : namespace : --- kind : Role apiVersion : rbac.authorization.k8s.io/v1 metadata : name : namespace : rules : - apiGroups : [ \"\" ] # \"\" indicates the core API group resources : [ \"endpoints\" , \"pods\" ] # stork queries service endpoints and pods verbs : [ \"get\" , \"list\" ] --- apiVersion : rbac.authorization.k8s.io/v1beta1 kind : RoleBinding metadata : name : namespace : subjects : - kind : ServiceAccount # Reference to upper's `metadata.name` name : # Reference to upper's `metadata.namespace` namespace : roleRef : kind : Role name : apiGroup : rbac.authorization.k8s.io Configuration # For each service expected to be exposed as Kubernetes Service , configure the lookup: stork standalone stork in quarkus stork.my-service.service-discovery.type = kubernetes stork.my-service.service-discovery.k8s-namespace = my-namespace quarkus.stork.my-service.service-discovery.type = kubernetes quarkus.stork.my-service.service-discovery.k8s-namespace = my-namespace Stork looks for the Kubernetes Service with the given name ( my-service in the previous example) in the specified namespace. Instead of using the Kubernetes Service IP directly, and let Kubernetes handle the selection and balancing, Stork inspects the service and retrieves the list of pods providing the service. Then, it can select the instance. Supported attributes are the following: Attribute Mandatory Default Value Description k8s-host No The Kubernetes API host. k8s-namespace No The namespace of the service. Use all to discover all namespaces. application No The Kubernetes application Id; if not defined Stork service name will be used. port-name No The Kubernetes application port name. If not defined, when exposing multiple ports, Stork will use the first one. refresh-period No 5M Service discovery cache refresh period. secure No Whether the connection with the service should be encrypted with TLS. Caching the service instances # Contacting the cluster too much frequently can result in performance problems. It\u2019s why Kubernetes Service discovery extends io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. Moreover, the caching expiration has been also improved in order to only update the retrieved set of ServiceInstance if some of them changes and an event is emitted. This is done by creating an Informer , similar to a Watch , able to observe the events on the service instances resources. Note that: - the cache is invalidated when an event is received. - the cache is validated once the instances are retrieved from the cluster, in the fetchNewServiceInstances method. - the cache method is overrided to customize the expiration strategy. In this case the collection of service instances will be kept until an event occurs.","title":"Kubernetes"},{"location":"service-discovery/kubernetes/#kubernetes-service-discovery","text":"Kubernetes has a built-in support for service discovery and load-balancing. However, you may need more flexibility to carefully select the service instance you want. This page explains how Stork can use the Kubernetes API to handle the service discovery.","title":"Kubernetes Service Discovery"},{"location":"service-discovery/kubernetes/#dependency","text":"First, you need to add the Stork Kubernetes Service Discovery provider: io.smallrye.stork stork-service-discovery-kubernetes 2.6.0 ","title":"Dependency"},{"location":"service-discovery/kubernetes/#a-few-words-about-server-authentication","text":"Stork uses Fabric8 Kubernetes Client to access the Kubernetes resources, concretely the DefaultKubernetesClient implementation. It will try to read the ~/.kube/config file from your local machine and load the token for authenticating with the Kubernetes API server. If you are using the Stork Kubernetes discovery provider from inside a Pod , it loads ~/.kube/config from the container file system. This file is automatically mounted inside the Pod. The level of access (Roles) depends on the configured ServiceAccount . You can override this configuration if you want fine-grain control.","title":"A few words about server authentication."},{"location":"service-discovery/kubernetes/#role-based-access-control-rbac","text":"If you\u2019re using a Kubernetes cluster with Role-Based Access Control (RBAC) enabled, the default permissions for a ServiceAccount don\u2019t allow it to list or modify any resources. A ServiceAccount , a Role and a RoleBinding are needed in order to allow Stork to list the available service instances from the cluster or the namespace. An example that allows listing all endpoints could look something like this: ------ apiVersion : v1 kind : ServiceAccount metadata : name : namespace : --- kind : Role apiVersion : rbac.authorization.k8s.io/v1 metadata : name : namespace : rules : - apiGroups : [ \"\" ] # \"\" indicates the core API group resources : [ \"endpoints\" , \"pods\" ] # stork queries service endpoints and pods verbs : [ \"get\" , \"list\" ] --- apiVersion : rbac.authorization.k8s.io/v1beta1 kind : RoleBinding metadata : name : namespace : subjects : - kind : ServiceAccount # Reference to upper's `metadata.name` name : # Reference to upper's `metadata.namespace` namespace : roleRef : kind : Role name : apiGroup : rbac.authorization.k8s.io","title":"Role-based access control (RBAC)"},{"location":"service-discovery/kubernetes/#configuration","text":"For each service expected to be exposed as Kubernetes Service , configure the lookup: stork standalone stork in quarkus stork.my-service.service-discovery.type = kubernetes stork.my-service.service-discovery.k8s-namespace = my-namespace quarkus.stork.my-service.service-discovery.type = kubernetes quarkus.stork.my-service.service-discovery.k8s-namespace = my-namespace Stork looks for the Kubernetes Service with the given name ( my-service in the previous example) in the specified namespace. Instead of using the Kubernetes Service IP directly, and let Kubernetes handle the selection and balancing, Stork inspects the service and retrieves the list of pods providing the service. Then, it can select the instance. Supported attributes are the following: Attribute Mandatory Default Value Description k8s-host No The Kubernetes API host. k8s-namespace No The namespace of the service. Use all to discover all namespaces. application No The Kubernetes application Id; if not defined Stork service name will be used. port-name No The Kubernetes application port name. If not defined, when exposing multiple ports, Stork will use the first one. refresh-period No 5M Service discovery cache refresh period. secure No Whether the connection with the service should be encrypted with TLS.","title":"Configuration"},{"location":"service-discovery/kubernetes/#caching-the-service-instances","text":"Contacting the cluster too much frequently can result in performance problems. It\u2019s why Kubernetes Service discovery extends io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. Moreover, the caching expiration has been also improved in order to only update the retrieved set of ServiceInstance if some of them changes and an event is emitted. This is done by creating an Informer , similar to a Watch , able to observe the events on the service instances resources. Note that: - the cache is invalidated when an event is received. - the cache is validated once the instances are retrieved from the cluster, in the fetchNewServiceInstances method. - the cache method is overrided to customize the expiration strategy. In this case the collection of service instances will be kept until an event occurs.","title":"Caching the service instances"},{"location":"service-discovery/static-list/","text":"Static List Service Discovery # In some situations, such as demos, development, or testing, you may want to mock the service discovery by providing a predefined list of service instances. For this purpose, Stork comes with a static service discovery type. Dependency # To use the static service discovery, first add the appropriate Service Discovery provider dependency to your project: io.smallrye.stork stork-service-discovery-static-list 2.6.0 Configuration # For each service that should use the static list of service instances configure the service registrar type : stork standalone stork in quarkus stork.my-service.service-discovery.type = static stork.my-service.service-discovery.address-list = localhost:8080,localhost:8081 quarkus.stork.my-service.service-discovery.type = static quarkus.stork.my-service.service-discovery.address-list = localhost:8080,localhost:8081 These are all the static service discovery parameters: Attribute Mandatory Default Value Description address-list Yes A comma-separated list of addresses (host:port). The default port is 80. secure No Whether the connection with the service should be encrypted with TLS. Default is false, except if the host:port uses the port is 443. shuffle No false Whether the list of address must be shuffled to avoid using the first address on every startup. Service registration # Stork also provides the ability to register services using Static list as backend. Service registration configuration # For each service that should register the service instances in a static list, configure the service registrar type : stork standalone stork.my-service.service-registrar.type = static stork in quarkus quarkus.stork.my-service.service-registrar.type = static Static service registrar is configured with the following parameters:","title":"Static List"},{"location":"service-discovery/static-list/#static-list-service-discovery","text":"In some situations, such as demos, development, or testing, you may want to mock the service discovery by providing a predefined list of service instances. For this purpose, Stork comes with a static service discovery type.","title":"Static List Service Discovery"},{"location":"service-discovery/static-list/#dependency","text":"To use the static service discovery, first add the appropriate Service Discovery provider dependency to your project: io.smallrye.stork stork-service-discovery-static-list 2.6.0 ","title":"Dependency"},{"location":"service-discovery/static-list/#configuration","text":"For each service that should use the static list of service instances configure the service registrar type : stork standalone stork in quarkus stork.my-service.service-discovery.type = static stork.my-service.service-discovery.address-list = localhost:8080,localhost:8081 quarkus.stork.my-service.service-discovery.type = static quarkus.stork.my-service.service-discovery.address-list = localhost:8080,localhost:8081 These are all the static service discovery parameters: Attribute Mandatory Default Value Description address-list Yes A comma-separated list of addresses (host:port). The default port is 80. secure No Whether the connection with the service should be encrypted with TLS. Default is false, except if the host:port uses the port is 443. shuffle No false Whether the list of address must be shuffled to avoid using the first address on every startup.","title":"Configuration"},{"location":"service-discovery/static-list/#service-registration","text":"Stork also provides the ability to register services using Static list as backend.","title":"Service registration"},{"location":"service-discovery/static-list/#service-registration-configuration","text":"For each service that should register the service instances in a static list, configure the service registrar type : stork standalone stork.my-service.service-registrar.type = static stork in quarkus quarkus.stork.my-service.service-registrar.type = static Static service registrar is configured with the following parameters:","title":"Service registration configuration"}]} \ No newline at end of file diff --git a/2.6.0/service-discovery/composite/index.html b/2.6.0/service-discovery/composite/index.html new file mode 100644 index 00000000..87573773 --- /dev/null +++ b/2.6.0/service-discovery/composite/index.html @@ -0,0 +1,959 @@ + + + + + + + + + + + + + + + + Composite - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Composite Service Discovery#

    +

    Some organizations use hybrid infrastructure. In such an infrastructure, different service instances may be discoverable via different service discovery providers. E.g. when serviceA is being migrated from a VM to Kubernetes, its older versions can be discovered via Consul and newer via Kubernetes.

    +

    composite service discovery addresses this problem by letting you define a service that consists of multiple services.

    +

    Dependency#

    +

    To use the composite service discovery, first add the appropriate Service Discovery provider dependency to your project:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-service-discovery-composite</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Configuration#

    +

    For each service that should consist of multiple services, configure the service discovery type, and set the services property to a comma separated list of services:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=composite
    +stork.my-service.service-discovery.services=serviceA,serviceB
    +
    +stork.serviceA.service-discovery.type=...
    +stork.serviceB.service-discovery.type=...
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=composite
    +quarkus.stork.my-service.service-discovery.services=serviceA,serviceB
    +
    +quarkus.stork.serviceA.service-discovery.type=...
    +quarkus.stork.serviceB.service-discovery.type=...
    +
    +
    +
    +
    +

    Remember to define the services that make up your composite service.

    +

    These are all the parameters of the composite service discovery:

    + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    servicesYesA comma-separated list of services that this services consists of.
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/service-discovery/consul/index.html b/2.6.0/service-discovery/consul/index.html new file mode 100644 index 00000000..dc15e0e7 --- /dev/null +++ b/2.6.0/service-discovery/consul/index.html @@ -0,0 +1,1078 @@ + + + + + + + + + + + + + + + + Consul - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Consul Service Discovery#

    +

    Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure. +It’s often used as service discovery backend to register and locate the services composing your system. +Consul makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. +External services can be registered as well.

    +

    This page explains how Stork can use Consul to handle the service discovery and service registration.

    +

    Dependency#

    +

    First, you need to add the Stork Consul Service Discovery provider:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-service-discovery-consul</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Service discovery configuration#

    +

    For each service that should get the service instances from Consul, configure the service discovery type:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=consul
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=consul
    +
    +
    +
    +
    +

    Consul service discovery is configured with the following parameters:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    consul-hostNolocalhostThe Consul host.
    consul-portNo8500The Consul port.
    use-health-checksNotrueWhether to use health check.
    applicationNoThe application name; if not defined Stork service name will be used.
    refresh-periodNo5MService discovery cache refresh period.
    secureNowhether the connection with the service should be encrypted with TLS.
    +

    Service registration#

    +

    Stork also provides the ability to register services using Consul as backend.

    +

    Service registration configuration#

    +

    For each service that should register the service instances in Consul, configure the service registrar type:

    +
    +
    +
    +
    +
    +
    stork.my-service.service-registrar.type=consul
    +
    +
    +
    +
    +
    +
    +
    quarkus.stork.my-service.service-registrar.type=consul
    +
    +

    Consul service registrar is configured with the following parameters:

    + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    consul-hostNolocalhostThe Consul host.
    consul-portNo8500The Consul port.
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/service-discovery/custom-service-discovery/index.html b/2.6.0/service-discovery/custom-service-discovery/index.html new file mode 100644 index 00000000..697f9cf2 --- /dev/null +++ b/2.6.0/service-discovery/custom-service-discovery/index.html @@ -0,0 +1,1448 @@ + + + + + + + + + + + + + + + + Custom Service Discovery - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + + + + + +
    +
    + + + + + + + + + +

    Implement your own service discovery mechanism#

    +

    Stork is extensible, and you can implement your own service discovery mechanism.

    +

    Dependencies#

    +

    To implement your Service Discovery Provider, make sure your project depends on Core and Configuration Generator. +The former brings classes necessary to implement custom discovery, the latter contains an annotation processor that generates classes needed by Stork.

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-core</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +<dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-configuration-generator</artifactId>
    +    <scope>provided</scope>
    +    <!-- provided scope is sufficient for the annotation processor -->
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Implementing a service discovery provider#

    +

    Service discovery implementation consists of three elements:

    +
      +
    • ServiceDiscovery which is responsible for locating service instances for a single Stork service.
    • +
    • ServiceDiscoveryProvider which creates instances of ServiceDiscovery for a given service discovery type.
    • +
    • $typeConfiguration which is a configuration for the discovery. This class is automatically generated during the compilation (using an annotation processor).
    • +
    +

    A type, for example, acme, identifies each provider. +This type is used in the configuration to reference the provider:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=acme
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=acme
    +
    +
    +
    +
    +

    A ServiceDiscoveryProvider implementation needs to be annotated with @ServiceDiscoveryType that defines the type. +Any configuration properties that the provider expects should be defined with @ServiceDiscoveryAttribute annotations placed on the provider. +Optionally, you can also add @ApplicationScoped annotation in order to provide the service discovery implementation as CDI bean.

    +

    A service discovery provider class should look as follows:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    package examples;
    +
    +import io.smallrye.stork.api.ServiceDiscovery;
    +import io.smallrye.stork.api.config.ServiceConfig;
    +import io.smallrye.stork.api.config.ServiceDiscoveryAttribute;
    +import io.smallrye.stork.api.config.ServiceDiscoveryType;
    +import io.smallrye.stork.spi.StorkInfrastructure;
    +import io.smallrye.stork.spi.ServiceDiscoveryProvider;
    +import jakarta.enterprise.context.ApplicationScoped;
    +
    +@ServiceDiscoveryType("acme")
    +@ServiceDiscoveryAttribute(name = "host",
    +        description = "Host name of the service discovery server.", required = true)
    +@ServiceDiscoveryAttribute(name = "port",
    +        description = "Hort of the service discovery server.", required = false)
    +@ApplicationScoped
    +public class AcmeServiceDiscoveryProvider
    +        implements ServiceDiscoveryProvider<AcmeConfiguration> {
    +
    +    @Override
    +    public ServiceDiscovery createServiceDiscovery(
    +            AcmeConfiguration config,
    +            String serviceName,
    +            ServiceConfig serviceConfig,
    +            StorkInfrastructure storkInfrastructure) {
    +        return new AcmeServiceDiscovery(config);
    +    }
    +}
    +
    +

    Note, that the ServiceDiscoveryProvider interface takes a configuration class as a parameter. This configuration class +is generated automatically by the Configuration Generator. +Its name is created by appending Configuration to the service discovery type, such as AcmeConfiguration.

    +

    The next step is to implement the ServiceDiscovery interface:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    package examples;
    +
    +import java.util.Collections;
    +import java.util.List;
    +
    +import io.smallrye.mutiny.Uni;
    +import io.smallrye.stork.api.ServiceDiscovery;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.impl.DefaultServiceInstance;
    +import io.smallrye.stork.utils.ServiceInstanceIds;
    +
    +public class AcmeServiceDiscovery implements ServiceDiscovery {
    +
    +    private final String host;
    +    private final int port;
    +
    +    public AcmeServiceDiscovery(AcmeConfiguration configuration) {
    +        this.host = configuration.getHost();
    +        this.port = Integer.parseInt(configuration.getPort());
    +    }
    +
    +    @Override
    +    public Uni<List<ServiceInstance>> getServiceInstances() {
    +        // Proceed to the lookup...
    +        // Here, we just return a DefaultServiceInstance with the configured host and port
    +        // The last parameter specifies whether the communication with the instance should
    +        // happen over a secure connection
    +        DefaultServiceInstance instance =
    +                new DefaultServiceInstance(ServiceInstanceIds.next(), host, port, false);
    +        return Uni.createFrom().item(() -> Collections.singletonList(instance));
    +    }
    +}
    +
    +

    This implementation is simplistic. +Typically, instead of creating a service instance with values from the configuration, you would connect to a service discovery backend, look for the service and build the list of service instance accordingly. +That’s why the method returns a Uni. +Most of the time, the lookup is a remote operation.

    +

    As you can see, the AcmeConfiguration class gives access to the configuration attribute.

    +

    Using your service discovery#

    +

    In the project using it, don’t forget to add the dependency on the module providing your implementation. +Then, in the configuration, just add:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=acme
    +stork.my-service.service-discovery.host=localhost
    +stork.my-service.service-discovery.port=1234
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=acme
    +quarkus.stork.my-service.service-discovery.host=localhost
    +quarkus.stork.my-service.service-discovery.port=1234
    +
    +
    +
    +
    +

    Then, Stork will use your implementation to locate the my-service service.

    +

    Using your service discovery using the programmatic API#

    +

    When building your service discovery project, the configuration generator creates a configuration class. +This class can be used to configure your service discovery using the Stork programmatic API.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    package examples;
    +
    +import io.smallrye.mutiny.Uni;
    +import io.smallrye.stork.api.ServiceDefinition;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.api.StorkServiceRegistry;
    +
    +public class AcmeDiscoveryApiUsage {
    +
    +    public void example(StorkServiceRegistry stork) {
    +        stork.defineIfAbsent("my-service", ServiceDefinition.of(
    +                new AcmeConfiguration().withHost("my-host"))
    +        );
    +
    +        Uni<ServiceInstance> uni = stork.getService("my-service").selectInstance();
    +    }
    +
    +}
    +
    +

    Remember that attributes, like host, are declared using the @ServiceDiscoveryAttribute annotation on the ServiceDiscoveryProvider implementation.

    +

    Caching the service instances#

    +

    Your ServiceDiscovery implementation can extend io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. +In this case, the retrieved set of ServiceInstance is cached and only updated after some time. +This duration is an additional configuration attribute. +For homogeneity, we recommend the following attribute:

    +
    @ServiceDiscoveryAttribute(name = "refresh-period", description = "Service discovery cache refresh period.", 
    +        defaultValue = CachingServiceDiscovery.DEFAULT_REFRESH_INTERVAL)
    +
    +

    The following snippet extends the acme service discovery with the refresh-period attribute:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    package examples;
    +
    +import io.smallrye.stork.api.ServiceDiscovery;
    +import io.smallrye.stork.api.config.ServiceConfig;
    +import io.smallrye.stork.api.config.ServiceDiscoveryAttribute;
    +import io.smallrye.stork.api.config.ServiceDiscoveryType;
    +import io.smallrye.stork.impl.CachingServiceDiscovery;
    +import io.smallrye.stork.spi.ServiceDiscoveryProvider;
    +import io.smallrye.stork.spi.StorkInfrastructure;
    +import jakarta.enterprise.context.ApplicationScoped;
    +
    +@ServiceDiscoveryType("cached-acme")
    +@ServiceDiscoveryAttribute(name = "host",
    +        description = "Host name of the service discovery server.", required = true)
    +@ServiceDiscoveryAttribute(name = "port",
    +        description = "Hort of the service discovery server.", required = false)
    +@ServiceDiscoveryAttribute(name = "refresh-period",
    +        description = "Service discovery cache refresh period.",
    +        defaultValue = CachingServiceDiscovery.DEFAULT_REFRESH_INTERVAL)
    +@ApplicationScoped
    +public class CachedAcmeServiceDiscoveryProvider
    +        implements ServiceDiscoveryProvider<CachedAcmeConfiguration> {
    +
    +    @Override
    +    public ServiceDiscovery createServiceDiscovery(
    +            CachedAcmeConfiguration config,
    +            String serviceName,
    +            ServiceConfig serviceConfig,
    +            StorkInfrastructure storkInfrastructure) {
    +        return new CachedAcmeServiceDiscovery(config);
    +    }
    +}
    +
    +

    Extending io.smallrye.stork.impl.CachingServiceDiscovery changes the structure of the service discovery implementation:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    package examples;
    +
    +import io.smallrye.mutiny.Uni;
    +import io.smallrye.stork.api.ServiceDiscovery;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.impl.CachingServiceDiscovery;
    +import io.smallrye.stork.impl.DefaultServiceInstance;
    +import io.smallrye.stork.utils.ServiceInstanceIds;
    +
    +import java.util.Collections;
    +import java.util.List;
    +
    +public class CachedAcmeServiceDiscovery extends CachingServiceDiscovery {
    +
    +    private final String host;
    +    private final int port;
    +
    +    public CachedAcmeServiceDiscovery(CachedAcmeConfiguration configuration) {
    +        super(configuration.getRefreshPeriod()); // (1)
    +        this.host = configuration.getHost();
    +        this.port = Integer.parseInt(configuration.getPort());
    +    }
    +
    +    @Override  // (2)
    +    public Uni<List<ServiceInstance>> fetchNewServiceInstances(List<ServiceInstance> previousInstances) {
    +        // Retrieve services...
    +        DefaultServiceInstance instance =
    +                new DefaultServiceInstance(ServiceInstanceIds.next(), host, port, false);
    +        return Uni.createFrom().item(() -> Collections.singletonList(instance));
    +    }
    +}
    +
    +
      +
    1. Call the super constructor with the refresh-period value
    2. +
    3. Implement fetchNewServiceInstances instead of getServiceInstances. + The method is called periodically, and the retrieved instances are cached. + This implementation is simplistic.
    4. +
    +

    If the retrieval fails, the error is reported, and Stork keeps the previously retrieved list of instances.

    +

    Customizing the caching strategy#

    +

    Sometimes it can be useful to change this behaviour and customize the cache expiration strategy.

    +

    For example, imagine you are using a backend service discovery where service instances can change very frequently.

    +

    Moreover, contacting the backend service discovery can be expensive in terms of computing, +thus finding a good value for the refreshing time can be mission impossible.

    +

    For these situations, Stork allows to implement a better expiration strategy for the cache.

    +

    If you want to customize the expiration strategy, you need: +1. Implement the cache method where the expiration strategy should be defined. +2. Invalidate the cache when expiration condition evaluates to true.

    +

    Look at the example bellow:

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    package examples;
    +
    +import io.smallrye.mutiny.Uni;
    +import io.smallrye.stork.api.ServiceInstance;
    +import io.smallrye.stork.impl.CachingServiceDiscovery;
    +import io.smallrye.stork.impl.DefaultServiceInstance;
    +import io.smallrye.stork.utils.ServiceInstanceIds;
    +
    +import java.util.Collections;
    +import java.util.List;
    +import java.util.concurrent.atomic.AtomicBoolean;
    +
    +public class CustomExpirationCachedAcmeServiceDiscovery extends CachingServiceDiscovery {
    +
    +    private final String host;
    +    private final int port;
    +
    +    private AtomicBoolean invalidated = new AtomicBoolean();
    +
    +    public CustomExpirationCachedAcmeServiceDiscovery(CachedAcmeConfiguration configuration) {
    +        super(configuration.getRefreshPeriod());
    +        this.host = configuration.getHost();
    +        this.port = Integer.parseInt(configuration.getPort());
    +    }
    +
    +    @Override
    +    public Uni<List<ServiceInstance>> fetchNewServiceInstances(List<ServiceInstance> previousInstances) {
    +        // Retrieve services...
    +        DefaultServiceInstance instance =
    +                new DefaultServiceInstance(ServiceInstanceIds.next(), host, port, false);
    +        return Uni.createFrom().item(() -> Collections.singletonList(instance));
    +    }
    +
    +    @Override
    +    public Uni<List<ServiceInstance>> cache(Uni<List<ServiceInstance>> uni) {
    +        return uni.memoize().until(() -> invalidated.get());
    +    }
    +
    +    //command-based cache invalidation: user triggers the action to invalidate the cache.
    +    public void invalidate() {
    +        invalidated.set(true);
    +    }
    +
    +}
    +
    +

    Additionally, you can check the Kubernetes Service Discovery for further details about an event-based invalidation example.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/service-discovery/dns/index.html b/2.6.0/service-discovery/dns/index.html new file mode 100644 index 00000000..dd41ef1b --- /dev/null +++ b/2.6.0/service-discovery/dns/index.html @@ -0,0 +1,1035 @@ + + + + + + + + + + + + + + + + DNS - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    DNS Service Discovery#

    +

    DNS is a name resolution protocol used to determine IP addresses for hostnames. +That makes it a natural fit for service discovery. +Consul and AWS Cloud Map provide DNS resolutions for service discovery.

    +

    This page explains how Stork can use DNS to handle the service discovery.

    +

    DNS records#

    +

    DNS supports a variety of record types. Stork can resolve hostnames to addresses based on SRV, A and AAAA records. All these types of records may return multiple addresses for a single hostname. You may choose to not resolve target hostnames.

    +

    While A and AAAA records are quite similar, they just carry an IP (v4 for A and v6 for AAAA), the SRV records are different. +They contain a weight, a target and a port for a service instance. +The target returned in an SRV record needs to be resolved further by an A or an AAAA record.

    +

    In short, it works as follows:

    +

    DNS service discovery +DNS service discovery

    +

    Dependency#

    +

    To use the DNS service discovery, you need to add the Stork DNS Service Discovery provider dependency to your project:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-service-discovery-dns</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Configuration#

    +

    Next, set the service discovery type to dns. +Additionally, you would usually specify the DNS server, or servers, to use for the discovery. +All in all, your configuration could look as follows:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=dns
    +# optional dns servers:
    +stork.my-service.service-discovery.dns-servers=my-dns-server:8221,my-dns-server2
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=dns
    +
    +# optional dns servers:
    +quarkus.stork.my-service.service-discovery.dns-servers=my-dns-server:8221,my-dns-server2
    +
    +
    +
    +
    +

    All the available parameters are as follows:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    dns-serversNononeComma separated list of dns servers. Servers can either be in the server:port or just server form. Use none to use the system resolver.
    hostnameNoThe hostname to look up; if not defined Stork service name will be used.
    record-typeNoSRVType of the DNS record. A, AAAA and SRV records are supported
    portNoPort of the service instances. Required if the record type is other than SRV.
    refresh-periodNo5MService discovery cache refresh period.
    secureNoWhether the connection with the service should be encrypted with TLS.
    recursion-desiredNotrueWhether DNS recursion is desired
    resolve-srvNotrueWhether DNS resolution for SRV records is desired
    dns-timeoutNo5sTimeout for DNS queries
    fail-on-errorNofalseWhether an error in retrieving service instances from one of the DNS servers should cause a failure of the discovery attempt.
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/service-discovery/eureka/index.html b/2.6.0/service-discovery/eureka/index.html new file mode 100644 index 00000000..1b7c3b0e --- /dev/null +++ b/2.6.0/service-discovery/eureka/index.html @@ -0,0 +1,1126 @@ + + + + + + + + + + + + + + + + Eureka - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Eureka Service Discovery#

    +

    Eureka is a RESTful service that is primarily used in the AWS cloud for the purpose of discovery, load balancing, and failover of middle-tier servers.

    +

    This page explains how Stork can use Eureka to handle the service discovery and service registration.

    +

    Dependency#

    +

    First, you need to add the Stork Eureka Service Discovery provider:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-service-discovery-eureka</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Service discovery configuration#

    +

    For each application instance expected to be registered in Eureka, configure the lookup:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=eureka
    +stork.my-service.service-discovery.eureka-host=localhost
    +stork.my-service.service-discovery.eureka-port=8761
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=eureka
    +quarkus.stork.my-service.service-discovery.eureka-host=localhost
    +quarkus.stork.my-service.service-discovery.eureka-port=8761
    +
    +
    +
    +
    +

    Stork looks for the service with the given name (my-service in the previous example).

    +

    Supported attributes are the following:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    eureka-hostYesThe Eureka server host.
    eureka-portNo8761The Eureka server port.
    eureka-context-pathNo/The Eureka server root context path.
    applicationNoThe Eureka application Id; if not defined Stork service name will be used
    eureka-trust-allNofalseEnable/Disable the TLS certificate verification
    eureka-tlsNofalseUse TLS to connect to the Eureka server
    instanceNoThe Eureka application instance Id
    refresh-periodNo5MService discovery cache refresh period.
    secureNofalseWhether is should select the secured endpoint of the retrieved services.
    +

    The application attribute is optional. +It uses the Stork service name (my-service in the previous configuration) if not set.

    +

    The instance attribute allows selecting a specific instance. +Using this attribute prevents load-balancing as you will always select a single instance.

    +

    The secure attribute indicates if you want the secure virtual address of the application instance. +If set to true, unsecured instances are filtered out from the available instances.

    +

    Service registration#

    +

    Stork also provides the ability to register services using Eureka as backend.

    +

    Service registration configuration#

    +

    For each service that should register the service instances in Eureka, configure the service registrar type:

    +
    +
    +
    +
    +
    +
    stork.my-service.service-registrar.type=eureka
    +stork.my-service.service-registrar.eureka-host=localhost
    +stork.my-service.service-registrar.eureka-port=8761
    +
    +
    +
    +
    +
    +
    +
    quarkus.stork.my-service.service-registrar.type=eureka
    +quarkus.stork.my-service.service-registrar.eureka-host=localhost
    +quarkus.stork.my-service.service-registrar.eureka-port=8761
    +
    +

    Eureka service registrar is configured with the following parameters:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    eureka-hostNolocalhostThe Eureka host.
    eureka-portNo8761The Eureka port.
    eureka-context-pathNo/The Eureka server root context path.
    eureka-trust-allNofalseEnable/Disable the TLS certificate verification
    eureka-tlsNofalseUse TLS to connect to the Eureka server
    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/service-discovery/knative/index.html b/2.6.0/service-discovery/knative/index.html new file mode 100644 index 00000000..a087ca82 --- /dev/null +++ b/2.6.0/service-discovery/knative/index.html @@ -0,0 +1,1098 @@ + + + + + + + + + + + + + + + + KNative - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Knative Service Discovery#

    +

    Knative is a Kubernetes-based platform for serverless workloads. Knative provides a set of objects as Kubernetes Custom Resource Definitions (CRDs). +These resources are used to define and control how your serverless workload behaves on the cluster. +The Stork Knative service discovery implementation is very similar to the Kubernetes one. +Stork will ask for Knative services to the cluster instead of vanilla Kubernetes services used by the Kubernetes implementation. +To do so, Stork uses Fabric 8 Knative Client which is just an extension of Fabric8 Kubernetes Client.

    +

    Dependency#

    +

    First, you need to add the Stork Knative Service Discovery provider:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-service-discovery-knative</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    A few words about server authentication.#

    +

    Stork uses Fabric8 Knative Client which is a Fabric8 Kubernetes Client extension to access the Kubernetes resources, concretely the DefaultKnativeClient implementation.

    +

    Since Knative Client is just an extension of Fabric8 Kubernetes Client, it’s also possible to get an instance of KnativeClient from KubernetesClient.

    +

    DefaultKubernetesClient will try to read the ~/.kube/config file from your local machine and load the token for authenticating with the Kubernetes API server.

    +

    The level of access (Roles) depends on the configured ServiceAccount.

    +

    You can override this configuration if you want fine-grain control.

    +
    Role-based access control (RBAC)#
    +

    If you’re using a Kubernetes cluster with Role-Based Access Control (RBAC) enabled, the default permissions for a ServiceAccount don’t allow it to list or modify any resources. +A ServiceAccount, a Role and a RoleBinding are needed in order to allow Stork to list the available service instances from the cluster or the namespace.

    +

    An example that allows listing all endpoints could look something like this:

    +
    ---
    +apiVersion: v1
    +kind: ServiceAccount
    +metadata:
    +  name: <appname>
    +  namespace: <namespace>
    +---
    +kind: Role
    +apiVersion: rbac.authorization.k8s.io/v1
    +metadata:
    +  name: <appname>
    +  namespace: <namespace>
    +rules:
    +  - apiGroups: [""] # "" indicates the core API group
    +    resources: ["endpoints", "pods"] # stork queries service endpoints and pods
    +    verbs: ["get", "list"]
    +---
    +apiVersion: rbac.authorization.k8s.io/v1beta1
    +kind: RoleBinding
    +metadata:
    +  name: <appname>
    +  namespace: <namespace>
    +subjects:
    +  - kind: ServiceAccount
    +    # Reference to upper's `metadata.name`
    +    name: <appname>
    +    # Reference to upper's `metadata.namespace`
    +    namespace: <namespace>
    +roleRef:
    +  kind: Role
    +  name: <appname>
    +  apiGroup: rbac.authorization.k8s.io
    +
    +

    Configuration#

    +

    For each service expected to be exposed as Kubernetes Service, configure the lookup:

    +
    +
    +
    +
    stork.my-knservice.service-discovery.type=knative
    +stork.my-knservice.service-discovery.knative-namespace=my-namespace
    +
    +
    +
    +
    quarkus.stork.my-knservice.service-discovery.type=knative
    +quarkus.stork.my-knservice.service-discovery.knative-namespace=my-namespace
    +
    +
    +
    +
    +

    Stork looks for the Knative Service with the given name (my-knservice in the previous example) in the specified namespace.

    +

    Stork inspects the Knative Service and retrieves the url of the service.

    +

    Supported attributes are the following:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    knative-hostNoThe Knative API host.
    knative-namespaceNoThe namespace of the service. Use all to discover all namespaces.
    applicationNoThe Knative application Id; if not defined Stork service name will be used.
    refresh-periodNo5MService discovery cache refresh period.
    secureNoWhether the connection with the service should be encrypted with TLS.
    +

    Caching the service instances#

    +

    Contacting the cluster too much frequently can result in performance problems. It’s why Knative Service discovery extends io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. +Moreover, the caching expiration has been also improved in order to only update the retrieved set of ServiceInstance if some of them changes and an event is emitted. +This is done by creating an Informer, similar to a Watch, able to observe the events on the Knative Service instances resources.

    +

    Note that: + - the cache is invalidated when an event is received. + - the cache is validated once the instances are retrieved from the cluster, in the fetchNewServiceInstances method. + - the cache method is overrided to customize the expiration strategy. In this case the collection of service instances will be kept until an event occurs.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/service-discovery/kubernetes/index.html b/2.6.0/service-discovery/kubernetes/index.html new file mode 100644 index 00000000..147227fb --- /dev/null +++ b/2.6.0/service-discovery/kubernetes/index.html @@ -0,0 +1,1104 @@ + + + + + + + + + + + + + + + + Kubernetes - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Kubernetes Service Discovery#

    +

    Kubernetes has a built-in support for service discovery and load-balancing. +However, you may need more flexibility to carefully select the service instance you want.

    +

    This page explains how Stork can use the Kubernetes API to handle the service discovery.

    +

    Dependency#

    +

    First, you need to add the Stork Kubernetes Service Discovery provider:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-service-discovery-kubernetes</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    A few words about server authentication.#

    +

    Stork uses Fabric8 Kubernetes Client to access the Kubernetes resources, concretely the DefaultKubernetesClient implementation.

    +

    It will try to read the ~/.kube/config file from your local machine and load the token for authenticating with the Kubernetes API server.

    +

    If you are using the Stork Kubernetes discovery provider from inside a Pod, it loads ~/.kube/config from the container file system.

    +

    This file is automatically mounted inside the Pod.

    +

    The level of access (Roles) depends on the configured ServiceAccount.

    +

    You can override this configuration if you want fine-grain control.

    +
    Role-based access control (RBAC)#
    +

    If you’re using a Kubernetes cluster with Role-Based Access Control (RBAC) enabled, the default permissions for a ServiceAccount don’t allow it to list or modify any resources. +A ServiceAccount, a Role and a RoleBinding are needed in order to allow Stork to list the available service instances from the cluster or the namespace.

    +

    An example that allows listing all endpoints could look something like this:

    +
    ------
    +apiVersion: v1
    +kind: ServiceAccount
    +metadata:
    +  name: <appname>
    +  namespace: <namespace>
    +---
    +kind: Role
    +apiVersion: rbac.authorization.k8s.io/v1
    +metadata:
    +  name: <appname>
    +  namespace: <namespace>
    +rules:
    +  - apiGroups: [""] # "" indicates the core API group
    +    resources: ["endpoints", "pods"] # stork queries service endpoints and pods
    +    verbs: ["get", "list"]
    +---
    +apiVersion: rbac.authorization.k8s.io/v1beta1
    +kind: RoleBinding
    +metadata:
    +  name: <appname>
    +  namespace: <namespace>
    +subjects:
    +  - kind: ServiceAccount
    +    # Reference to upper's `metadata.name`
    +    name: <appname>
    +    # Reference to upper's `metadata.namespace`
    +    namespace: <namespace>
    +roleRef:
    +  kind: Role
    +  name: <appname>
    +  apiGroup: rbac.authorization.k8s.io
    +
    +

    Configuration#

    +

    For each service expected to be exposed as Kubernetes Service, configure the lookup:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=kubernetes
    +stork.my-service.service-discovery.k8s-namespace=my-namespace
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=kubernetes
    +quarkus.stork.my-service.service-discovery.k8s-namespace=my-namespace
    +
    +
    +
    +
    +

    Stork looks for the Kubernetes Service with the given name (my-service in the previous example) in the specified namespace.

    +

    Instead of using the Kubernetes Service IP directly, and let Kubernetes handle the selection and balancing, Stork inspects the service and retrieves the list of pods providing the service. +Then, it can select the instance.

    +

    Supported attributes are the following:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    k8s-hostNoThe Kubernetes API host.
    k8s-namespaceNoThe namespace of the service. Use all to discover all namespaces.
    applicationNoThe Kubernetes application Id; if not defined Stork service name will be used.
    port-nameNoThe Kubernetes application port name. If not defined, when exposing multiple ports, Stork will use the first one.
    refresh-periodNo5MService discovery cache refresh period.
    secureNoWhether the connection with the service should be encrypted with TLS.
    +

    Caching the service instances#

    +

    Contacting the cluster too much frequently can result in performance problems. It’s why Kubernetes Service discovery extends io.smallrye.stork.impl.CachingServiceDiscovery to automatically cache the service instances. +Moreover, the caching expiration has been also improved in order to only update the retrieved set of ServiceInstance if some of them changes and an event is emitted. +This is done by creating an Informer, similar to a Watch, able to observe the events on the service instances resources.

    +

    Note that: + - the cache is invalidated when an event is received. + - the cache is validated once the instances are retrieved from the cluster, in the fetchNewServiceInstances method. + - the cache method is overrided to customize the expiration strategy. In this case the collection of service instances will be kept until an event occurs.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/service-discovery/static-list/index.html b/2.6.0/service-discovery/static-list/index.html new file mode 100644 index 00000000..82aed608 --- /dev/null +++ b/2.6.0/service-discovery/static-list/index.html @@ -0,0 +1,1023 @@ + + + + + + + + + + + + + + + + Static List - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Static List Service Discovery#

    +

    In some situations, such as demos, development, or testing, you may want to mock the service discovery by providing a predefined list of service instances. +For this purpose, Stork comes with a static service discovery type.

    +

    Dependency#

    +

    To use the static service discovery, first add the appropriate Service Discovery provider dependency to your project:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-service-discovery-static-list</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Configuration#

    +

    For each service that should use the static list of service instances configure the service registrar type:

    +
    +
    +
    +
    stork.my-service.service-discovery.type=static
    +stork.my-service.service-discovery.address-list=localhost:8080,localhost:8081
    +
    +
    +
    +
    quarkus.stork.my-service.service-discovery.type=static
    +quarkus.stork.my-service.service-discovery.address-list=localhost:8080,localhost:8081
    +
    +
    +
    +
    +

    These are all the static service discovery parameters:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeMandatoryDefault ValueDescription
    address-listYesA comma-separated list of addresses (host:port). The default port is 80.
    secureNoWhether the connection with the service should be encrypted with TLS. Default is false, except if the host:port uses the port is 443.
    shuffleNofalseWhether the list of address must be shuffled to avoid using the first address on every startup.
    +

    Service registration#

    +

    Stork also provides the ability to register services using Static list as backend.

    +

    Service registration configuration#

    +

    For each service that should register the service instances in a static list, configure the service registrar type:

    +
    +
    +
    +
    +
    +
    stork.my-service.service-registrar.type=static
    +
    +
    +
    +
    +
    +
    +
    quarkus.stork.my-service.service-registrar.type=static
    +
    +

    Static service registrar is configured with the following parameters:

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/sitemap.xml b/2.6.0/sitemap.xml new file mode 100644 index 00000000..d5411f6b --- /dev/null +++ b/2.6.0/sitemap.xml @@ -0,0 +1,113 @@ + + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + + None + 2024-02-27 + daily + + \ No newline at end of file diff --git a/2.6.0/sitemap.xml.gz b/2.6.0/sitemap.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..eb9fd174a8806561c6b2dac278d2926ea50f2267 GIT binary patch literal 213 zcmV;`04o0?RriQG*=t> z^evb`;;@B`)*kLhoX)b;7iB_J5seFvBm{+H!(wal{cv9C5@EM;vj)|Hh{y P{(aRKld2$4D+>Ss9Kd8h literal 0 HcmV?d00001 diff --git a/2.6.0/springboot-config/index.html b/2.6.0/springboot-config/index.html new file mode 100644 index 00000000..6e92607d --- /dev/null +++ b/2.6.0/springboot-config/index.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + + + + + Spring Boot Configuration - Smallrye Stork + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Stork Spring Boot Config#

    +

    Stork seamlessly supports Spring Boot configuration, facilitating access to configuration properties. +This documentation elaborates on how Spring Boot developers can use Stork in their Spring Boot applications and configure it using the application.properties file.

    +

    Dependency setup#

    +

    To enable Spring Boot configuration integration in Stork, you need to include the following dependency:

    +
    <dependency>
    +    <groupId>io.smallrye.stork</groupId>
    +    <artifactId>stork-spring-boot-config</artifactId>
    +    <version>2.6.0</version>
    +</dependency>
    +
    +

    Initializing Stork#

    +

    Since Spring Boot lacks a pre-configured Stork instance, you’ll need create one. It can be done by providing a Spring bean performing Stork initialization:

    +

     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    package examples;
    +
    +import io.smallrye.stork.Stork;
    +import io.smallrye.stork.springboot.SpringBootApplicationContextProvider;
    +import org.springframework.boot.SpringApplication;
    +import org.springframework.boot.autoconfigure.SpringBootApplication;
    +import org.springframework.context.annotation.Bean;
    +import org.springframework.context.annotation.DependsOn;
    +
    +@SpringBootApplication
    +public class SpringBootInitializationExample {
    +
    +    public static void main(String[] args) {
    +        SpringApplication.run(SpringBootInitializationExample.class, args);
    +    }
    +
    +    @Bean
    +    @DependsOn("springBootApplicationContextProvider")
    +    public Stork stork() {
    +        Stork.initialize();
    +        Stork stork = Stork.getInstance();
    +        return stork;
    +    }
    +
    +    @Bean
    +    public SpringBootApplicationContextProvider springBootApplicationContextProvider() {
    +        return new SpringBootApplicationContextProvider();
    +    }
    +}
    +
    +Upon initialization, Stork scans for the io.smallrye.stork.springboot.SpringBootConfigProvider SPI provider and CDI beans (from version 2.x onwards). +It then builds a comprehensive list of managed services by parsing the properties configuration files.

    +

    Please note the importance of the io.smallrye.stork.springboot.SpringBootApplicationContextProvider bean in our setup. +This bean has a critical role by granting Stork access to the current org.springframework.context.ApplicationContext. +It enables it to retrieve configuration details effectively. Consequently, it’s imperative that this bean is instantiated prior to initiating the Stork initialization process. +In this case, we utilize the @DependsOn annotation for that. +It allows us controlling the bean creation order.

    +

    Comprehensive Example#

    +

    You can check our Guitar Hero Application showcasing the seamless integration of Stork with Spring Boot Configuration.

    + + + + + + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/2.6.0/target/includes/themes/dark.svg b/2.6.0/target/includes/themes/dark.svg new file mode 100644 index 00000000..a19bc784 --- /dev/null +++ b/2.6.0/target/includes/themes/dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.6.0/target/includes/themes/dark_dark.svg b/2.6.0/target/includes/themes/dark_dark.svg new file mode 100644 index 00000000..a19bc784 --- /dev/null +++ b/2.6.0/target/includes/themes/dark_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.6.0/target/includes/themes/general.svg b/2.6.0/target/includes/themes/general.svg new file mode 100644 index 00000000..c12b14f0 --- /dev/null +++ b/2.6.0/target/includes/themes/general.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.6.0/target/includes/themes/general_dark.svg b/2.6.0/target/includes/themes/general_dark.svg new file mode 100644 index 00000000..c12b14f0 --- /dev/null +++ b/2.6.0/target/includes/themes/general_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.6.0/target/includes/themes/light.svg b/2.6.0/target/includes/themes/light.svg new file mode 100644 index 00000000..adb77f12 --- /dev/null +++ b/2.6.0/target/includes/themes/light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.6.0/target/includes/themes/light_dark.svg b/2.6.0/target/includes/themes/light_dark.svg new file mode 100644 index 00000000..adb77f12 --- /dev/null +++ b/2.6.0/target/includes/themes/light_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.6.0/target/observability_sequence.svg b/2.6.0/target/observability_sequence.svg new file mode 100644 index 00000000..6ab081ea --- /dev/null +++ b/2.6.0/target/observability_sequence.svg @@ -0,0 +1 @@ +ApplicationApplicationObservableStorkInfrastructureObservableStorkInfrastructureObservationCollectorObservationCollectorStorkStorkServiceService(1)instantiates(2)instantiates(3)ObservationCollector(4)ObservableStorkInfrastructure (5)initialize(observableInfrastructure)(6)instantiates (..., ObservationCollector, ...) \ No newline at end of file diff --git a/2.6.0/target/observability_sequence_dark.svg b/2.6.0/target/observability_sequence_dark.svg new file mode 100644 index 00000000..389117c6 --- /dev/null +++ b/2.6.0/target/observability_sequence_dark.svg @@ -0,0 +1 @@ +ApplicationApplicationObservableStorkInfrastructureObservableStorkInfrastructureObservationCollectorObservationCollectorStorkStorkServiceService(1)instantiates(2)instantiates(3)ObservationCollector(4)ObservableStorkInfrastructure (5)initialize(observableInfrastructure)(6)instantiates (..., ObservationCollector, ...) \ No newline at end of file diff --git a/2.6.0/target/observation_sequence.svg b/2.6.0/target/observation_sequence.svg new file mode 100644 index 00000000..267f75ef --- /dev/null +++ b/2.6.0/target/observation_sequence.svg @@ -0,0 +1 @@ +ServiceServiceObservationCollectorObservationCollectorStorkObservationStorkObservationStorkEventHandlerStorkEventHandler(1)create("serviceName", sd type, ss type)(2)instantiates(3)Registers start time(4)StorkObservation (5)onServiceDiscoverySuccess(List<ServiceInstance>)(6)Registers end servicediscovery time.Registers instances count  (7)onServiceDiscoveryFailure(Throwable)(8)Registers end servicediscovery time.Registers failure cause  (9)onServiceSelectionSuccess(instanceId)(10)Registers end serviceselection time.Registers instance idRegisters overall duration (11)complete(this) (12)onServiceSelectionFailure(Throwable))(13)Registers overall duration.Registers failure cause (14)complete(this) \ No newline at end of file diff --git a/2.6.0/target/observation_sequence_dark.svg b/2.6.0/target/observation_sequence_dark.svg new file mode 100644 index 00000000..3a2fa730 --- /dev/null +++ b/2.6.0/target/observation_sequence_dark.svg @@ -0,0 +1 @@ +ServiceServiceObservationCollectorObservationCollectorStorkObservationStorkObservationStorkEventHandlerStorkEventHandler(1)create("serviceName", sd type, ss type)(2)instantiates(3)Registers start time(4)StorkObservation (5)onServiceDiscoverySuccess(List<ServiceInstance>)(6)Registers end servicediscovery time.Registers instances count  (7)onServiceDiscoveryFailure(Throwable)(8)Registers end servicediscovery time.Registers failure cause  (9)onServiceSelectionSuccess(instanceId)(10)Registers end serviceselection time.Registers instance idRegisters overall duration (11)complete(this) (12)onServiceSelectionFailure(Throwable))(13)Registers overall duration.Registers failure cause (14)complete(this) \ No newline at end of file diff --git a/2.6.0/target/sequence.svg b/2.6.0/target/sequence.svg new file mode 100644 index 00000000..03a46e45 --- /dev/null +++ b/2.6.0/target/sequence.svg @@ -0,0 +1 @@ +ApplicationApplicationStorkStorkConfigProviderConfigProviderServiceServiceService DiscoveryService DiscoveryLoad BalancerLoad Balancer(1)initialize()(2)getConfig()(3): List<ServiceConfig> (4)getService("name")(5)Service  (6)selectServiceInstance()(7)getServiceInstances()(8)Uni<List<ServiceInstance>>(9)selectServiceInstance()(10)Uni<ServiceInstance>(11)Uni<ServiceInstance> \ No newline at end of file diff --git a/2.6.0/target/sequence_dark.svg b/2.6.0/target/sequence_dark.svg new file mode 100644 index 00000000..a0d2ede4 --- /dev/null +++ b/2.6.0/target/sequence_dark.svg @@ -0,0 +1 @@ +ApplicationApplicationStorkStorkConfigProviderConfigProviderServiceServiceService DiscoveryService DiscoveryLoad BalancerLoad Balancer(1)initialize()(2)getConfig()(3): List<ServiceConfig> (4)getService("name")(5)Service  (6)selectServiceInstance()(7)getServiceInstances()(8)Uni<List<ServiceInstance>>(9)selectServiceInstance()(10)Uni<ServiceInstance>(11)Uni<ServiceInstance> \ No newline at end of file diff --git a/2.6.0/target/srv_sequence.svg b/2.6.0/target/srv_sequence.svg new file mode 100644 index 00000000..d819978e --- /dev/null +++ b/2.6.0/target/srv_sequence.svg @@ -0,0 +1 @@ +ApplicationApplicationStorkStorkDNS ServerDNS Serverget service instancesget SRV records for hostnamelist of SRV recordslist of SRV record targets if no resolution desiredget A/AAAA records for each SRV record targetlist of A/AAAAlist of ServiceInstances \ No newline at end of file diff --git a/2.6.0/target/srv_sequence_dark.svg b/2.6.0/target/srv_sequence_dark.svg new file mode 100644 index 00000000..450a29e4 --- /dev/null +++ b/2.6.0/target/srv_sequence_dark.svg @@ -0,0 +1 @@ +ApplicationApplicationStorkStorkDNS ServerDNS Serverget service instancesget SRV records for hostnamelist of SRV recordslist of SRV record targets if no resolution desiredget A/AAAA records for each SRV record targetlist of A/AAAAlist of ServiceInstances \ No newline at end of file diff --git a/2.6.0/target/stork.svg b/2.6.0/target/stork.svg new file mode 100644 index 00000000..87522bc5 --- /dev/null +++ b/2.6.0/target/stork.svg @@ -0,0 +1 @@ +«entry-point»StorkServiceDiscoveryServiceInstanceLoadBalancer«named»ServiceKubernetesConsulCustom Service Discovery«default»RoundRobinLeastResponseTimeCustom Load Balancer*selectServiceInstance \ No newline at end of file diff --git a/2.6.0/target/stork_dark.svg b/2.6.0/target/stork_dark.svg new file mode 100644 index 00000000..4f548458 --- /dev/null +++ b/2.6.0/target/stork_dark.svg @@ -0,0 +1 @@ +«entry-point»StorkServiceDiscoveryServiceInstanceLoadBalancer«named»ServiceKubernetesConsulCustom Service Discovery«default»RoundRobinLeastResponseTimeCustom Load Balancer*selectServiceInstance \ No newline at end of file diff --git a/latest/404.html b/latest/404.html index d64a744a..13cd2ca5 100644 --- a/latest/404.html +++ b/latest/404.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../2.5.0/404.html... + Redirecting to ../2.6.0/404.html... \ No newline at end of file diff --git a/latest/concepts/index.html b/latest/concepts/index.html index 7b10a8d8..c178ac8e 100644 --- a/latest/concepts/index.html +++ b/latest/concepts/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../2.5.0/concepts/... + Redirecting to ../../2.6.0/concepts/... \ No newline at end of file diff --git a/latest/index.html b/latest/index.html index c26e9461..1a24b233 100644 --- a/latest/index.html +++ b/latest/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../2.5.0/... + Redirecting to ../2.6.0/... \ No newline at end of file diff --git a/latest/load-balancer/custom-load-balancer/index.html b/latest/load-balancer/custom-load-balancer/index.html index 2f7b89c2..a324f133 100644 --- a/latest/load-balancer/custom-load-balancer/index.html +++ b/latest/load-balancer/custom-load-balancer/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/load-balancer/custom-load-balancer/... + Redirecting to ../../../2.6.0/load-balancer/custom-load-balancer/... \ No newline at end of file diff --git a/latest/load-balancer/least-requests/index.html b/latest/load-balancer/least-requests/index.html index 592b2688..73048b79 100644 --- a/latest/load-balancer/least-requests/index.html +++ b/latest/load-balancer/least-requests/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/load-balancer/least-requests/... + Redirecting to ../../../2.6.0/load-balancer/least-requests/... \ No newline at end of file diff --git a/latest/load-balancer/power-of-two-choices/index.html b/latest/load-balancer/power-of-two-choices/index.html index 14a14aa6..5b07095f 100644 --- a/latest/load-balancer/power-of-two-choices/index.html +++ b/latest/load-balancer/power-of-two-choices/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/load-balancer/power-of-two-choices/... + Redirecting to ../../../2.6.0/load-balancer/power-of-two-choices/... \ No newline at end of file diff --git a/latest/load-balancer/random/index.html b/latest/load-balancer/random/index.html index 099b441d..d5f37600 100644 --- a/latest/load-balancer/random/index.html +++ b/latest/load-balancer/random/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/load-balancer/random/... + Redirecting to ../../../2.6.0/load-balancer/random/... \ No newline at end of file diff --git a/latest/load-balancer/response-time/index.html b/latest/load-balancer/response-time/index.html index 73fdcf8a..76f7b47b 100644 --- a/latest/load-balancer/response-time/index.html +++ b/latest/load-balancer/response-time/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/load-balancer/response-time/... + Redirecting to ../../../2.6.0/load-balancer/response-time/... \ No newline at end of file diff --git a/latest/load-balancer/round-robin/index.html b/latest/load-balancer/round-robin/index.html index f4cf6abd..03717abc 100644 --- a/latest/load-balancer/round-robin/index.html +++ b/latest/load-balancer/round-robin/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/load-balancer/round-robin/... + Redirecting to ../../../2.6.0/load-balancer/round-robin/... \ No newline at end of file diff --git a/latest/load-balancer/sticky/index.html b/latest/load-balancer/sticky/index.html index e69d9862..df2dda04 100644 --- a/latest/load-balancer/sticky/index.html +++ b/latest/load-balancer/sticky/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/load-balancer/sticky/... + Redirecting to ../../../2.6.0/load-balancer/sticky/... \ No newline at end of file diff --git a/latest/microprofile-config/index.html b/latest/microprofile-config/index.html new file mode 100644 index 00000000..89d0d500 --- /dev/null +++ b/latest/microprofile-config/index.html @@ -0,0 +1,16 @@ + + + + + Redirecting + + + + + Redirecting to ../../2.6.0/microprofile-config/... + + \ No newline at end of file diff --git a/latest/observability/index.html b/latest/observability/index.html index 71c4f6cc..e2ff130f 100644 --- a/latest/observability/index.html +++ b/latest/observability/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../2.5.0/observability/... + Redirecting to ../../2.6.0/observability/... \ No newline at end of file diff --git a/latest/programmatic-api/index.html b/latest/programmatic-api/index.html index 0c3df4b3..c4e5613b 100644 --- a/latest/programmatic-api/index.html +++ b/latest/programmatic-api/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../2.5.0/programmatic-api/... + Redirecting to ../../2.6.0/programmatic-api/... \ No newline at end of file diff --git a/latest/quarkus/index.html b/latest/quarkus/index.html index fa04099c..259a1dee 100644 --- a/latest/quarkus/index.html +++ b/latest/quarkus/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../2.5.0/quarkus/... + Redirecting to ../../2.6.0/quarkus/... \ No newline at end of file diff --git a/latest/service-discovery/composite/index.html b/latest/service-discovery/composite/index.html index c835f723..b484a2f9 100644 --- a/latest/service-discovery/composite/index.html +++ b/latest/service-discovery/composite/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/composite/... + Redirecting to ../../../2.6.0/service-discovery/composite/... \ No newline at end of file diff --git a/latest/service-discovery/consul/index.html b/latest/service-discovery/consul/index.html index 1d40828d..0ce366af 100644 --- a/latest/service-discovery/consul/index.html +++ b/latest/service-discovery/consul/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/consul/... + Redirecting to ../../../2.6.0/service-discovery/consul/... \ No newline at end of file diff --git a/latest/service-discovery/custom-service-discovery/index.html b/latest/service-discovery/custom-service-discovery/index.html index f68ff529..d19d3a62 100644 --- a/latest/service-discovery/custom-service-discovery/index.html +++ b/latest/service-discovery/custom-service-discovery/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/custom-service-discovery/... + Redirecting to ../../../2.6.0/service-discovery/custom-service-discovery/... \ No newline at end of file diff --git a/latest/service-discovery/dns/index.html b/latest/service-discovery/dns/index.html index e9bfeb99..8157669d 100644 --- a/latest/service-discovery/dns/index.html +++ b/latest/service-discovery/dns/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/dns/... + Redirecting to ../../../2.6.0/service-discovery/dns/... \ No newline at end of file diff --git a/latest/service-discovery/eureka/index.html b/latest/service-discovery/eureka/index.html index 7ef5b9cb..95bab1c9 100644 --- a/latest/service-discovery/eureka/index.html +++ b/latest/service-discovery/eureka/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/eureka/... + Redirecting to ../../../2.6.0/service-discovery/eureka/... \ No newline at end of file diff --git a/latest/service-discovery/knative/index.html b/latest/service-discovery/knative/index.html index 35aed67e..b2609783 100644 --- a/latest/service-discovery/knative/index.html +++ b/latest/service-discovery/knative/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/knative/... + Redirecting to ../../../2.6.0/service-discovery/knative/... \ No newline at end of file diff --git a/latest/service-discovery/kubernetes/index.html b/latest/service-discovery/kubernetes/index.html index 918afbeb..8e9f6097 100644 --- a/latest/service-discovery/kubernetes/index.html +++ b/latest/service-discovery/kubernetes/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/kubernetes/... + Redirecting to ../../../2.6.0/service-discovery/kubernetes/... \ No newline at end of file diff --git a/latest/service-discovery/static-list/index.html b/latest/service-discovery/static-list/index.html index a30e1de3..884d300b 100644 --- a/latest/service-discovery/static-list/index.html +++ b/latest/service-discovery/static-list/index.html @@ -4,13 +4,13 @@ Redirecting - Redirecting to ../../../2.5.0/service-discovery/static-list/... + Redirecting to ../../../2.6.0/service-discovery/static-list/... \ No newline at end of file diff --git a/latest/springboot-config/index.html b/latest/springboot-config/index.html new file mode 100644 index 00000000..0de71f76 --- /dev/null +++ b/latest/springboot-config/index.html @@ -0,0 +1,16 @@ + + + + + Redirecting + + + + + Redirecting to ../../2.6.0/springboot-config/... + + \ No newline at end of file diff --git a/versions.json b/versions.json index 47ee51e7..0a5580e6 100644 --- a/versions.json +++ b/versions.json @@ -1 +1 @@ -[{"version": "2.5.0", "title": "2.5.0", "aliases": ["latest"]}, {"version": "2.4.0", "title": "2.4.0", "aliases": []}, {"version": "2.3.2", "title": "2.3.2", "aliases": []}, {"version": "2.3.1", "title": "2.3.1", "aliases": []}, {"version": "2.3.0", "title": "2.3.0", "aliases": []}, {"version": "2.2.1", "title": "2.2.1", "aliases": []}, {"version": "2.2.0", "title": "2.2.0", "aliases": []}, {"version": "2.1.0", "title": "2.1.0", "aliases": []}, {"version": "2.0.1", "title": "2.0.1", "aliases": []}, {"version": "1.4.2", "title": "1.4.2", "aliases": []}, {"version": "1.4.1", "title": "1.4.1", "aliases": []}, {"version": "1.3.2", "title": "1.3.2", "aliases": []}, {"version": "1.3.1", "title": "1.3.1", "aliases": []}, {"version": "1.3.0", "title": "1.3.0", "aliases": []}, {"version": "1.2.0", "title": "1.2.0", "aliases": []}, {"version": "1.1.2", "title": "1.1.2", "aliases": []}, {"version": "1.1.1", "title": "1.1.1", "aliases": []}, {"version": "1.1.0", "title": "1.1.0", "aliases": []}, {"version": "1.0.0", "title": "1.0.0", "aliases": []}, {"version": "1.0.0.Beta4", "title": "1.0.0.Beta4", "aliases": []}, {"version": "1.0.0.Beta3", "title": "1.0.0.Beta3", "aliases": []}, {"version": "1.0.0.Beta1", "title": "1.0.0.Beta1", "aliases": []}, {"version": "1.0.0.Alpha9", "title": "1.0.0.Alpha9", "aliases": []}, {"version": "1.0.0.Alpha8", "title": "1.0.0.Alpha8", "aliases": []}, {"version": "1.0.0.Alpha7", "title": "1.0.0.Alpha7", "aliases": []}] \ No newline at end of file +[{"version": "2.6.0", "title": "2.6.0", "aliases": ["latest"]}, {"version": "2.5.0", "title": "2.5.0", "aliases": []}, {"version": "2.4.0", "title": "2.4.0", "aliases": []}, {"version": "2.3.2", "title": "2.3.2", "aliases": []}, {"version": "2.3.1", "title": "2.3.1", "aliases": []}, {"version": "2.3.0", "title": "2.3.0", "aliases": []}, {"version": "2.2.1", "title": "2.2.1", "aliases": []}, {"version": "2.2.0", "title": "2.2.0", "aliases": []}, {"version": "2.1.0", "title": "2.1.0", "aliases": []}, {"version": "2.0.1", "title": "2.0.1", "aliases": []}, {"version": "1.4.2", "title": "1.4.2", "aliases": []}, {"version": "1.4.1", "title": "1.4.1", "aliases": []}, {"version": "1.3.2", "title": "1.3.2", "aliases": []}, {"version": "1.3.1", "title": "1.3.1", "aliases": []}, {"version": "1.3.0", "title": "1.3.0", "aliases": []}, {"version": "1.2.0", "title": "1.2.0", "aliases": []}, {"version": "1.1.2", "title": "1.1.2", "aliases": []}, {"version": "1.1.1", "title": "1.1.1", "aliases": []}, {"version": "1.1.0", "title": "1.1.0", "aliases": []}, {"version": "1.0.0", "title": "1.0.0", "aliases": []}, {"version": "1.0.0.Beta4", "title": "1.0.0.Beta4", "aliases": []}, {"version": "1.0.0.Beta3", "title": "1.0.0.Beta3", "aliases": []}, {"version": "1.0.0.Beta1", "title": "1.0.0.Beta1", "aliases": []}, {"version": "1.0.0.Alpha9", "title": "1.0.0.Alpha9", "aliases": []}, {"version": "1.0.0.Alpha8", "title": "1.0.0.Alpha8", "aliases": []}, {"version": "1.0.0.Alpha7", "title": "1.0.0.Alpha7", "aliases": []}] \ No newline at end of file

    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