@decidables/discountable-elements 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1625 @@
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).discountableElements={})}(this,(function(t){"use strict";
2
+ /**
3
+ * @license
4
+ * Copyright 2019 Google LLC
5
+ * SPDX-License-Identifier: BSD-3-Clause
6
+ */const e=window,n=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;let c=class{constructor(t,e,n){if(this._$cssResult$=!0,n!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(n&&void 0===t){const n=void 0!==e&&1===e.length;n&&(t=s.get(e)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),n&&s.set(e,t))}return t}toString(){return this.cssText}};const a=t=>new c("string"==typeof t?t:t+"",void 0,i),l=(t,...e)=>{const n=1===t.length?t[0]:e.reduce(((e,n,i)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[i+1]),t[0]);return new c(n,t,i)},r=n?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const n of t.cssRules)e+=n.cssText;return a(e)})(t):t
7
+ /**
8
+ * @license
9
+ * Copyright 2017 Google LLC
10
+ * SPDX-License-Identifier: BSD-3-Clause
11
+ */;var o;const g=window,B=g.trustedTypes,d=B?B.emptyScript:"",I=g.reactiveElementPolyfillSupport,Q={toAttribute(t,e){switch(e){case Boolean:t=t?d:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let n=t;switch(e){case Boolean:n=null!==t;break;case Number:n=null===t?null:Number(t);break;case Object:case Array:try{n=JSON.parse(t)}catch(t){n=null}}return n}},u=(t,e)=>e!==t&&(e==e||t==t),F={attribute:!0,type:String,converter:Q,reflect:!1,hasChanged:u},h="finalized";let b=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(t){var e;this.finalize(),(null!==(e=this.h)&&void 0!==e?e:this.h=[]).push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,n)=>{const i=this._$Ep(n,e);void 0!==i&&(this._$Ev.set(i,n),t.push(i))})),t}static createProperty(t,e=F){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const n="symbol"==typeof t?Symbol():"__"+t,i=this.getPropertyDescriptor(t,n,e);void 0!==i&&Object.defineProperty(this.prototype,t,i)}}static getPropertyDescriptor(t,e,n){return{get(){return this[e]},set(i){const s=this[t];this[e]=i,this.requestUpdate(t,s,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||F}static finalize(){if(this.hasOwnProperty(h))return!1;this[h]=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),void 0!==t.h&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const n of e)this.createProperty(n,t[n])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const n=new Set(t.flat(1/0).reverse());for(const t of n)e.unshift(r(t))}else void 0!==t&&e.push(r(t));return e}static _$Ep(t,e){const n=e.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof t?t.toLowerCase():void 0}_$Eu(){var t;this._$E_=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(t=this.constructor.h)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,n;(null!==(e=this._$ES)&&void 0!==e?e:this._$ES=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(n=t.hostConnected)||void 0===n||n.call(t))}removeController(t){var e;null===(e=this._$ES)||void 0===e||e.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Ei.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const i=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return((t,i)=>{n?t.adoptedStyleSheets=i.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):i.forEach((n=>{const i=document.createElement("style"),s=e.litNonce;void 0!==s&&i.setAttribute("nonce",s),i.textContent=n.cssText,t.appendChild(i)}))})(i,this.constructor.elementStyles),i}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,n){this._$AK(t,n)}_$EO(t,e,n=F){var i;const s=this.constructor._$Ep(t,n);if(void 0!==s&&!0===n.reflect){const c=(void 0!==(null===(i=n.converter)||void 0===i?void 0:i.toAttribute)?n.converter:Q).toAttribute(e,n.type);this._$El=t,null==c?this.removeAttribute(s):this.setAttribute(s,c),this._$El=null}}_$AK(t,e){var n;const i=this.constructor,s=i._$Ev.get(t);if(void 0!==s&&this._$El!==s){const t=i.getPropertyOptions(s),c="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==(null===(n=t.converter)||void 0===n?void 0:n.fromAttribute)?t.converter:Q;this._$El=s,this[s]=c.fromAttribute(e,t.type),this._$El=null}}requestUpdate(t,e,n){let i=!0;void 0!==t&&(((n=n||this.constructor.getPropertyOptions(t)).hasChanged||u)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===n.reflect&&this._$El!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,n))):i=!1),!this.isUpdatePending&&i&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((t,e)=>this[e]=t)),this._$Ei=void 0);let e=!1;const n=this._$AL;try{e=this.shouldUpdate(n),e?(this.willUpdate(n),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(n)):this._$Ek()}catch(t){throw e=!1,this._$Ek(),t}e&&this._$AE(n)}willUpdate(t){}_$AE(t){var e;null===(e=this._$ES)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,e)=>this._$EO(e,this[e],t))),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};
12
+ /**
13
+ * @license
14
+ * Copyright 2017 Google LLC
15
+ * SPDX-License-Identifier: BSD-3-Clause
16
+ */
17
+ var U;b[h]=!0,b.elementProperties=new Map,b.elementStyles=[],b.shadowRootOptions={mode:"open"},null==I||I({ReactiveElement:b}),(null!==(o=g.reactiveElementVersions)&&void 0!==o?o:g.reactiveElementVersions=[]).push("1.6.3");const C=window,y=C.trustedTypes,f=y?y.createPolicy("lit-html",{createHTML:t=>t}):void 0,G="$lit$",p=`lit$${(Math.random()+"").slice(9)}$`,m="?"+p,A=`<${m}>`,x=document,L=()=>x.createComment(""),S=t=>null===t||"object"!=typeof t&&"function"!=typeof t,R=Array.isArray,X="[ \t\n\f\r]",v=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,N=/-->/g,Z=/>/g,E=RegExp(`>|${X}(?:([^\\s"'>=/]+)(${X}*=${X}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),V=/'/g,w=/"/g,W=/^(?:script|style|textarea|title)$/i,H=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),D=H(1),Y=H(2),k=Symbol.for("lit-noChange"),J=Symbol.for("lit-nothing"),M=new WeakMap,T=x.createTreeWalker(x,129,null,!1);function z(t,e){if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==f?f.createHTML(e):e}const K=(t,e)=>{const n=t.length-1,i=[];let s,c=2===e?"<svg>":"",a=v;for(let e=0;e<n;e++){const n=t[e];let l,r,o=-1,g=0;for(;g<n.length&&(a.lastIndex=g,r=a.exec(n),null!==r);)g=a.lastIndex,a===v?"!--"===r[1]?a=N:void 0!==r[1]?a=Z:void 0!==r[2]?(W.test(r[2])&&(s=RegExp("</"+r[2],"g")),a=E):void 0!==r[3]&&(a=E):a===E?">"===r[0]?(a=null!=s?s:v,o=-1):void 0===r[1]?o=-2:(o=a.lastIndex-r[2].length,l=r[1],a=void 0===r[3]?E:'"'===r[3]?w:V):a===w||a===V?a=E:a===N||a===Z?a=v:(a=E,s=void 0);const B=a===E&&t[e+1].startsWith("/>")?" ":"";c+=a===v?n+A:o>=0?(i.push(l),n.slice(0,o)+G+n.slice(o)+p+B):n+p+(-2===o?(i.push(void 0),e):B)}return[z(t,c+(t[n]||"<?>")+(2===e?"</svg>":"")),i]};let O=class t{constructor({strings:e,_$litType$:n},i){let s;this.parts=[];let c=0,a=0;const l=e.length-1,r=this.parts,[o,g]=K(e,n);if(this.el=t.createElement(o,i),T.currentNode=this.el.content,2===n){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(s=T.nextNode())&&r.length<l;){if(1===s.nodeType){if(s.hasAttributes()){const t=[];for(const e of s.getAttributeNames())if(e.endsWith(G)||e.startsWith(p)){const n=g[a++];if(t.push(e),void 0!==n){const t=s.getAttribute(n.toLowerCase()+G).split(p),e=/([.?@])?(.*)/.exec(n);r.push({type:1,index:c,name:e[2],strings:t,ctor:"."===e[1]?q:"?"===e[1]?et:"@"===e[1]?nt:$})}else r.push({type:6,index:c})}for(const e of t)s.removeAttribute(e)}if(W.test(s.tagName)){const t=s.textContent.split(p),e=t.length-1;if(e>0){s.textContent=y?y.emptyScript:"";for(let n=0;n<e;n++)s.append(t[n],L()),T.nextNode(),r.push({type:2,index:++c});s.append(t[e],L())}}}else if(8===s.nodeType)if(s.data===m)r.push({type:2,index:c});else{let t=-1;for(;-1!==(t=s.data.indexOf(p,t+1));)r.push({type:7,index:c}),t+=p.length-1}c++}}static createElement(t,e){const n=x.createElement("template");return n.innerHTML=t,n}};function _(t,e,n=t,i){var s,c,a,l;if(e===k)return e;let r=void 0!==i?null===(s=n._$Co)||void 0===s?void 0:s[i]:n._$Cl;const o=S(e)?void 0:e._$litDirective$;return(null==r?void 0:r.constructor)!==o&&(null===(c=null==r?void 0:r._$AO)||void 0===c||c.call(r,!1),void 0===o?r=void 0:(r=new o(t),r._$AT(t,n,i)),void 0!==i?(null!==(a=(l=n)._$Co)&&void 0!==a?a:l._$Co=[])[i]=r:n._$Cl=r),void 0!==r&&(e=_(t,r._$AS(t,e.values),r,i)),e}let P=class{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){var e;const{el:{content:n},parts:i}=this._$AD,s=(null!==(e=null==t?void 0:t.creationScope)&&void 0!==e?e:x).importNode(n,!0);T.currentNode=s;let c=T.nextNode(),a=0,l=0,r=i[0];for(;void 0!==r;){if(a===r.index){let e;2===r.type?e=new j(c,c.nextSibling,this,t):1===r.type?e=new r.ctor(c,r.name,r.strings,this,t):6===r.type&&(e=new st(c,this,t)),this._$AV.push(e),r=i[++l]}a!==(null==r?void 0:r.index)&&(c=T.nextNode(),a++)}return T.currentNode=x,s}v(t){let e=0;for(const n of this._$AV)void 0!==n&&(void 0!==n.strings?(n._$AI(t,n,e),e+=n.strings.length-2):n._$AI(t[e])),e++}};class j{constructor(t,e,n,i){var s;this.type=2,this._$AH=J,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=n,this.options=i,this._$Cp=null===(s=null==i?void 0:i.isConnected)||void 0===s||s}get _$AU(){var t,e;return null!==(e=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==e?e:this._$Cp}get parentNode(){let t=this._$AA.parentNode;const e=this._$AM;return void 0!==e&&11===(null==t?void 0:t.nodeType)&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=_(this,t,e),S(t)?t===J||null==t||""===t?(this._$AH!==J&&this._$AR(),this._$AH=J):t!==this._$AH&&t!==k&&this._(t):void 0!==t._$litType$?this.g(t):void 0!==t.nodeType?this.$(t):(t=>R(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]))(t)?this.T(t):this._(t)}k(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}$(t){this._$AH!==t&&(this._$AR(),this._$AH=this.k(t))}_(t){this._$AH!==J&&S(this._$AH)?this._$AA.nextSibling.data=t:this.$(x.createTextNode(t)),this._$AH=t}g(t){var e;const{values:n,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=O.createElement(z(i.h,i.h[0]),this.options)),i);if((null===(e=this._$AH)||void 0===e?void 0:e._$AD)===s)this._$AH.v(n);else{const t=new P(s,this),e=t.u(this.options);t.v(n),this.$(e),this._$AH=t}}_$AC(t){let e=M.get(t.strings);return void 0===e&&M.set(t.strings,e=new O(t)),e}T(t){R(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let n,i=0;for(const s of t)i===e.length?e.push(n=new j(this.k(L()),this.k(L()),this,this.options)):n=e[i],n._$AI(s),i++;i<e.length&&(this._$AR(n&&n._$AB.nextSibling,i),e.length=i)}_$AR(t=this._$AA.nextSibling,e){var n;for(null===(n=this._$AP)||void 0===n||n.call(this,!1,!0,e);t&&t!==this._$AB;){const e=t.nextSibling;t.remove(),t=e}}setConnected(t){var e;void 0===this._$AM&&(this._$Cp=t,null===(e=this._$AP)||void 0===e||e.call(this,t))}}let $=class{constructor(t,e,n,i,s){this.type=1,this._$AH=J,this._$AN=void 0,this.element=t,this.name=e,this._$AM=i,this.options=s,n.length>2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=J}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,n,i){const s=this.strings;let c=!1;if(void 0===s)t=_(this,t,e,0),c=!S(t)||t!==this._$AH&&t!==k,c&&(this._$AH=t);else{const i=t;let a,l;for(t=s[0],a=0;a<s.length-1;a++)l=_(this,i[n+a],e,a),l===k&&(l=this._$AH[a]),c||(c=!S(l)||l!==this._$AH[a]),l===J?t=J:t!==J&&(t+=(null!=l?l:"")+s[a+1]),this._$AH[a]=l}c&&!i&&this.j(t)}j(t){t===J?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:"")}};class q extends ${constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===J?void 0:t}}const tt=y?y.emptyScript:"";class et extends ${constructor(){super(...arguments),this.type=4}j(t){t&&t!==J?this.element.setAttribute(this.name,tt):this.element.removeAttribute(this.name)}}class nt extends ${constructor(t,e,n,i,s){super(t,e,n,i,s),this.type=5}_$AI(t,e=this){var n;if((t=null!==(n=_(this,t,e,0))&&void 0!==n?n:J)===k)return;const i=this._$AH,s=t===J&&i!==J||t.capture!==i.capture||t.once!==i.once||t.passive!==i.passive,c=t!==J&&(i===J||s);s&&this.element.removeEventListener(this.name,this,i),c&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var e,n;"function"==typeof this._$AH?this._$AH.call(null!==(n=null===(e=this.options)||void 0===e?void 0:e.host)&&void 0!==n?n:this.element,t):this._$AH.handleEvent(t)}}class st{constructor(t,e,n){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(t){_(this,t)}}const ct=C.litHtmlPolyfillSupport;null==ct||ct(O,j),(null!==(U=C.litHtmlVersions)&&void 0!==U?U:C.litHtmlVersions=[]).push("2.8.0");
18
+ /**
19
+ * @license
20
+ * Copyright 2017 Google LLC
21
+ * SPDX-License-Identifier: BSD-3-Clause
22
+ */
23
+ var at,lt;let rt=class extends b{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var t,e;const n=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=n.firstChild),n}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=((t,e,n)=>{var i,s;const c=null!==(i=null==n?void 0:n.renderBefore)&&void 0!==i?i:e;let a=c._$litPart$;if(void 0===a){const t=null!==(s=null==n?void 0:n.renderBefore)&&void 0!==s?s:null;c._$litPart$=a=new j(e.insertBefore(L(),t),t,void 0,null!=n?n:{})}return a._$AI(t),a})(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!1)}render(){return k}};rt.finalized=!0,rt._$litElement$=!0,null===(at=globalThis.litElementHydrateSupport)||void 0===at||at.call(globalThis,{LitElement:rt});const ot=globalThis.litElementPolyfillSupport;function gt(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Bt(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function dt(t){let e,n,i;function s(t,i,s=0,c=t.length){if(s<c){if(0!==e(i,i))return c;do{const e=s+c>>>1;n(t[e],i)<0?s=e+1:c=e}while(s<c)}return s}return 2!==t.length?(e=gt,n=(e,n)=>gt(t(e),n),i=(e,n)=>t(e)-n):(e=t===gt||t===Bt?t:It,n=t,i=t),{left:s,center:function(t,e,n=0,c=t.length){const a=s(t,e,n,c-1);return a>n&&i(t[a-1],e)>-i(t[a],e)?a-1:a},right:function(t,i,s=0,c=t.length){if(s<c){if(0!==e(i,i))return c;do{const e=s+c>>>1;n(t[e],i)<=0?s=e+1:c=e}while(s<c)}return s}}}function It(){return 0}function Qt(t){return null===t?NaN:+t}null==ot||ot({LitElement:rt}),(null!==(lt=globalThis.litElementVersions)&&void 0!==lt?lt:globalThis.litElementVersions=[]).push("3.3.3");const ut=dt(gt).right;dt(Qt).center;var Ft=ut;function ht(t,e){let n=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&++n;else{let i=-1;for(let s of t)null!=(s=e(s,++i,t))&&(s=+s)>=s&&++n}return n}function bt(t){return 0|t.length}function Ut(t){return!(t>0)}function Ct(t){return"object"!=typeof t||"length"in t?t:Array.from(t)}function yt(t,e){var n=0,i=0;return Float64Array.from(t,void 0===e?t=>n+=+t||0:s=>n+=+e(s,i++,t)||0)}function ft(t,e){let n,i=0,s=0,c=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-s,s+=n/++i,c+=n*(e-s));else{let a=-1;for(let l of t)null!=(l=e(l,++a,t))&&(l=+l)>=l&&(n=l-s,s+=n/++i,c+=n*(l-s))}if(i>1)return c/(i-1)}function Gt(t,e){const n=ft(t,e);return n?Math.sqrt(n):n}function pt(t,e){let n,i;if(void 0===e)for(const e of t)null!=e&&(void 0===n?e>=e&&(n=i=e):(n>e&&(n=e),i<e&&(i=e)));else{let s=-1;for(let c of t)null!=(c=e(c,++s,t))&&(void 0===n?c>=c&&(n=i=c):(n>c&&(n=c),i<c&&(i=c)))}return[n,i]}class mt{constructor(){this._partials=new Float64Array(32),this._n=0}add(t){const e=this._partials;let n=0;for(let i=0;i<this._n&&i<32;i++){const s=e[i],c=t+s,a=Math.abs(t)<Math.abs(s)?t-(c-s):s-(c-t);a&&(e[n++]=a),t=c}return e[n]=t,this._n=n+1,this}valueOf(){const t=this._partials;let e,n,i,s=this._n,c=0;if(s>0){for(c=t[--s];s>0&&(e=c,n=t[--s],c=e+n,i=n-(c-e),!i););s>0&&(i<0&&t[s-1]<0||i>0&&t[s-1]>0)&&(n=2*i,e=c+n,n==e-c&&(c=e))}return c}}class At extends Map{constructor(t,e=Xt){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(Lt(this,t))}has(t){return super.has(Lt(this,t))}set(t,e){return super.set(St(this,t),e)}delete(t){return super.delete(Rt(this,t))}}class xt extends Set{constructor(t,e=Xt){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const e of t)this.add(e)}has(t){return super.has(Lt(this,t))}add(t){return super.add(St(this,t))}delete(t){return super.delete(Rt(this,t))}}function Lt({_intern:t,_key:e},n){const i=e(n);return t.has(i)?t.get(i):n}function St({_intern:t,_key:e},n){const i=e(n);return t.has(i)?t.get(i):(t.set(i,n),n)}function Rt({_intern:t,_key:e},n){const i=e(n);return t.has(i)&&(n=t.get(i),t.delete(i)),n}function Xt(t){return null!==t&&"object"==typeof t?t.valueOf():t}function vt(t){return t}function Nt(t,...e){return Vt(t,vt,vt,e)}function Zt(t,e,...n){return Vt(t,vt,e,n)}function Et(t,e,...n){return Vt(t,Array.from,e,n)}function Vt(t,e,n,i){return function t(s,c){if(c>=i.length)return n(s);const a=new At,l=i[c++];let r=-1;for(const t of s){const e=l(t,++r,s),n=a.get(e);n?n.push(t):a.set(e,[t])}for(const[e,n]of a)a.set(e,t(n,c));return e(a)}(t,0)}function wt(t,...e){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");t=Array.from(t);let[n]=e;if(n&&2!==n.length||e.length>1){const c=Uint32Array.from(t,((t,e)=>e));return e.length>1?(e=e.map((e=>t.map(e))),c.sort(((t,n)=>{for(const i of e){const e=Ht(i[t],i[n]);if(e)return e}}))):(n=t.map(n),c.sort(((t,e)=>Ht(n[t],n[e])))),i=t,s=c,Array.from(s,(t=>i[t]))}var i,s;return t.sort(Wt(n))}function Wt(t=gt){if(t===gt)return Ht;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const i=t(e,n);return i||0===i?i:(0===t(n,n))-(0===t(e,e))}}function Ht(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(t<e?-1:t>e?1:0)}function Dt(t,e,n){return(2!==e.length?wt(Zt(t,e,n),(([t,e],[n,i])=>gt(e,i)||gt(t,n))):wt(Nt(t,n),(([t,n],[i,s])=>e(n,s)||gt(t,i)))).map((([t])=>t))}const Yt=Math.sqrt(50),kt=Math.sqrt(10),Jt=Math.sqrt(2);function Mt(t,e,n){const i=(e-t)/Math.max(0,n),s=Math.floor(Math.log10(i)),c=i/Math.pow(10,s),a=c>=Yt?10:c>=kt?5:c>=Jt?2:1;let l,r,o;return s<0?(o=Math.pow(10,-s)/a,l=Math.round(t*o),r=Math.round(e*o),l/o<t&&++l,r/o>e&&--r,o=-o):(o=Math.pow(10,s)*a,l=Math.round(t/o),r=Math.round(e/o),l*o<t&&++l,r*o>e&&--r),r<l&&.5<=n&&n<2?Mt(t,e,2*n):[l,r,o]}function Tt(t,e,n){if(!((n=+n)>0))return[];if((t=+t)===(e=+e))return[t];const i=e<t,[s,c,a]=i?Mt(e,t,n):Mt(t,e,n);if(!(c>=s))return[];const l=c-s+1,r=new Array(l);if(i)if(a<0)for(let t=0;t<l;++t)r[t]=(c-t)/-a;else for(let t=0;t<l;++t)r[t]=(c-t)*a;else if(a<0)for(let t=0;t<l;++t)r[t]=(s+t)/-a;else for(let t=0;t<l;++t)r[t]=(s+t)*a;return r}function zt(t,e,n){return Mt(t=+t,e=+e,n=+n)[2]}function Kt(t,e,n){n=+n;const i=(e=+e)<(t=+t),s=i?zt(e,t,n):zt(t,e,n);return(i?-1:1)*(s<0?1/-s:s)}function Ot(t){return Math.max(1,Math.ceil(Math.log(ht(t))/Math.LN2)+1)}function _t(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n<e||void 0===n&&e>=e)&&(n=e);else{let i=-1;for(let s of t)null!=(s=e(s,++i,t))&&(n<s||void 0===n&&s>=s)&&(n=s)}return n}function Pt(t,e){let n,i=-1,s=-1;if(void 0===e)for(const e of t)++s,null!=e&&(n<e||void 0===n&&e>=e)&&(n=e,i=s);else for(let c of t)null!=(c=e(c,++s,t))&&(n<c||void 0===n&&c>=c)&&(n=c,i=s);return i}function jt(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let i=-1;for(let s of t)null!=(s=e(s,++i,t))&&(n>s||void 0===n&&s>=s)&&(n=s)}return n}function $t(t,e){let n,i=-1,s=-1;if(void 0===e)for(const e of t)++s,null!=e&&(n>e||void 0===n&&e>=e)&&(n=e,i=s);else for(let c of t)null!=(c=e(c,++s,t))&&(n>c||void 0===n&&c>=c)&&(n=c,i=s);return i}function qt(t,e,n=0,i=1/0,s){if(e=Math.floor(e),n=Math.floor(Math.max(0,n)),i=Math.floor(Math.min(t.length-1,i)),!(n<=e&&e<=i))return t;for(s=void 0===s?Ht:Wt(s);i>n;){if(i-n>600){const c=i-n+1,a=e-n+1,l=Math.log(c),r=.5*Math.exp(2*l/3),o=.5*Math.sqrt(l*r*(c-r)/c)*(a-c/2<0?-1:1);qt(t,e,Math.max(n,Math.floor(e-a*r/c+o)),Math.min(i,Math.floor(e+(c-a)*r/c+o)),s)}const c=t[e];let a=n,l=i;for(te(t,n,e),s(t[i],c)>0&&te(t,n,i);a<l;){for(te(t,a,l),++a,--l;s(t[a],c)<0;)++a;for(;s(t[l],c)>0;)--l}0===s(t[n],c)?te(t,n,l):(++l,te(t,l,i)),l<=e&&(n=l+1),e<=l&&(i=l-1)}return t}function te(t,e,n){const i=t[e];t[e]=t[n],t[n]=i}function ee(t,e=gt){let n,i=!1;if(1===e.length){let s;for(const c of t){const t=e(c);(i?gt(t,s)>0:0===gt(t,t))&&(n=c,s=t,i=!0)}}else for(const s of t)(i?e(s,n)>0:0===e(s,s))&&(n=s,i=!0);return n}function ne(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let i of t)null!=(i=e(i,++n,t))&&(i=+i)>=i&&(yield i)}}(t,n)),(i=t.length)&&!isNaN(e=+e)){if(e<=0||i<2)return jt(t);if(e>=1)return _t(t);var i,s=(i-1)*e,c=Math.floor(s),a=_t(qt(t,c).subarray(0,c+1));return a+(jt(t.subarray(c+1))-a)*(s-c)}}function ie(t,e,n=Qt){if((i=t.length)&&!isNaN(e=+e)){if(e<=0||i<2)return+n(t[0],0,t);if(e>=1)return+n(t[i-1],i-1,t);var i,s=(i-1)*e,c=Math.floor(s),a=+n(t[c],c,t);return a+(+n(t[c+1],c+1,t)-a)*(s-c)}}function se(t,e,n){const i=ht(t),s=ne(t,.75)-ne(t,.25);return i&&s?Math.ceil((n-e)/(2*s*Math.pow(i,-1/3))):1}function ce(t,e,n){const i=ht(t),s=Gt(t);return i&&s?Math.ceil((n-e)*Math.cbrt(i)/(3.49*s)):1}function ae(t,e){let n=0,i=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(++n,i+=e);else{let s=-1;for(let c of t)null!=(c=e(c,++s,t))&&(c=+c)>=c&&(++n,i+=c)}if(n)return i/n}function le(t,e){return ne(t,.5,e)}function re(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function oe(t,e){const n=new At;if(void 0===e)for(let e of t)null!=e&&e>=e&&n.set(e,(n.get(e)||0)+1);else{let i=-1;for(let s of t)null!=(s=e(s,++i,t))&&s>=s&&n.set(s,(n.get(s)||0)+1)}let i,s=0;for(const[t,e]of n)e>s&&(s=e,i=t);return i}function ge(t,e){return[t,e]}function Be(t,e,n){t=+t,e=+e,n=(s=arguments.length)<2?(e=t,t=0,1):s<3?1:+n;for(var i=-1,s=0|Math.max(0,Math.ceil((e-t)/n)),c=new Array(s);++i<s;)c[i]=t+i*n;return c}function de(t,e){let n=0;if(void 0===e)for(let e of t)(e=+e)&&(n+=e);else{let i=-1;for(let s of t)(s=+e(s,++i,t))&&(n+=s)}return n}function Ie(t){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");return Array.from(t).reverse()}function Qe(t){return t}var ue=1,Fe=2,he=3,be=4,Ue=1e-6;function Ce(t){return"translate("+t+",0)"}function ye(t){return"translate(0,"+t+")"}function fe(t){return e=>+t(e)}function Ge(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function pe(){return!this.__axis}function me(t,e){var n=[],i=null,s=null,c=6,a=6,l=3,r="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,o=t===ue||t===be?-1:1,g=t===be||t===Fe?"x":"y",B=t===ue||t===he?Ce:ye;function d(d){var I=null==i?e.ticks?e.ticks.apply(e,n):e.domain():i,Q=null==s?e.tickFormat?e.tickFormat.apply(e,n):Qe:s,u=Math.max(c,0)+l,F=e.range(),h=+F[0]+r,b=+F[F.length-1]+r,U=(e.bandwidth?Ge:fe)(e.copy(),r),C=d.selection?d.selection():d,y=C.selectAll(".domain").data([null]),f=C.selectAll(".tick").data(I,e).order(),G=f.exit(),p=f.enter().append("g").attr("class","tick"),m=f.select("line"),A=f.select("text");y=y.merge(y.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),f=f.merge(p),m=m.merge(p.append("line").attr("stroke","currentColor").attr(g+"2",o*c)),A=A.merge(p.append("text").attr("fill","currentColor").attr(g,o*u).attr("dy",t===ue?"0em":t===he?"0.71em":"0.32em")),d!==C&&(y=y.transition(d),f=f.transition(d),m=m.transition(d),A=A.transition(d),G=G.transition(d).attr("opacity",Ue).attr("transform",(function(t){return isFinite(t=U(t))?B(t+r):this.getAttribute("transform")})),p.attr("opacity",Ue).attr("transform",(function(t){var e=this.parentNode.__axis;return B((e&&isFinite(e=e(t))?e:U(t))+r)}))),G.remove(),y.attr("d",t===be||t===Fe?a?"M"+o*a+","+h+"H"+r+"V"+b+"H"+o*a:"M"+r+","+h+"V"+b:a?"M"+h+","+o*a+"V"+r+"H"+b+"V"+o*a:"M"+h+","+r+"H"+b),f.attr("opacity",1).attr("transform",(function(t){return B(U(t)+r)})),m.attr(g+"2",o*c),A.attr(g,o*u).text(Q),C.filter(pe).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Fe?"start":t===be?"end":"middle"),C.each((function(){this.__axis=U}))}return d.scale=function(t){return arguments.length?(e=t,d):e},d.ticks=function(){return n=Array.from(arguments),d},d.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),d):n.slice()},d.tickValues=function(t){return arguments.length?(i=null==t?null:Array.from(t),d):i&&i.slice()},d.tickFormat=function(t){return arguments.length?(s=t,d):s},d.tickSize=function(t){return arguments.length?(c=a=+t,d):c},d.tickSizeInner=function(t){return arguments.length?(c=+t,d):c},d.tickSizeOuter=function(t){return arguments.length?(a=+t,d):a},d.tickPadding=function(t){return arguments.length?(l=+t,d):l},d.offset=function(t){return arguments.length?(r=+t,d):r},d}function Ae(t){return me(he,t)}var xe={value:()=>{}};function Le(){for(var t,e=0,n=arguments.length,i={};e<n;++e){if(!(t=arguments[e]+"")||t in i||/[\s.]/.test(t))throw new Error("illegal type: "+t);i[t]=[]}return new Se(i)}function Se(t){this._=t}function Re(t,e){for(var n,i=0,s=t.length;i<s;++i)if((n=t[i]).name===e)return n.value}function Xe(t,e,n){for(var i=0,s=t.length;i<s;++i)if(t[i].name===e){t[i]=xe,t=t.slice(0,i).concat(t.slice(i+1));break}return null!=n&&t.push({name:e,value:n}),t}Se.prototype=Le.prototype={constructor:Se,on:function(t,e){var n,i,s=this._,c=(i=s,(t+"").trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!i.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,l=c.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<l;)if(n=(t=c[a]).type)s[n]=Xe(s[n],t.name,e);else if(null==e)for(n in s)s[n]=Xe(s[n],t.name,null);return this}for(;++a<l;)if((n=(t=c[a]).type)&&(n=Re(s[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new Se(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,i,s=new Array(n),c=0;c<n;++c)s[c]=arguments[c+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(c=0,n=(i=this._[t]).length;c<n;++c)i[c].value.apply(e,s)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var i=this._[t],s=0,c=i.length;s<c;++s)i[s].value.apply(e,n)}};var ve="http://www.w3.org/1999/xhtml",Ne={svg:"http://www.w3.org/2000/svg",xhtml:ve,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Ze(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),Ne.hasOwnProperty(e)?{space:Ne[e],local:t}:t}function Ee(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===ve&&e.documentElement.namespaceURI===ve?e.createElement(t):e.createElementNS(n,t)}}function Ve(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function we(t){var e=Ze(t);return(e.local?Ve:Ee)(e)}function We(){}function He(t){return null==t?We:function(){return this.querySelector(t)}}function De(){return[]}function Ye(t){return null==t?De:function(){return this.querySelectorAll(t)}}function ke(t){return function(){return function(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}(t.apply(this,arguments))}}function Je(t){return function(){return this.matches(t)}}function Me(t){return function(e){return e.matches(t)}}var Te=Array.prototype.find;function ze(){return this.firstElementChild}var Ke=Array.prototype.filter;function Oe(){return Array.from(this.children)}function _e(t){return new Array(t.length)}function Pe(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function je(t,e,n,i,s,c){for(var a,l=0,r=e.length,o=c.length;l<o;++l)(a=e[l])?(a.__data__=c[l],i[l]=a):n[l]=new Pe(t,c[l]);for(;l<r;++l)(a=e[l])&&(s[l]=a)}function $e(t,e,n,i,s,c,a){var l,r,o,g=new Map,B=e.length,d=c.length,I=new Array(B);for(l=0;l<B;++l)(r=e[l])&&(I[l]=o=a.call(r,r.__data__,l,e)+"",g.has(o)?s[l]=r:g.set(o,r));for(l=0;l<d;++l)o=a.call(t,c[l],l,c)+"",(r=g.get(o))?(i[l]=r,r.__data__=c[l],g.delete(o)):n[l]=new Pe(t,c[l]);for(l=0;l<B;++l)(r=e[l])&&g.get(I[l])===r&&(s[l]=r)}function qe(t){return t.__data__}function tn(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function en(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function nn(t){return function(){this.removeAttribute(t)}}function sn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function cn(t,e){return function(){this.setAttribute(t,e)}}function an(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function ln(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function rn(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function on(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function gn(t){return function(){this.style.removeProperty(t)}}function Bn(t,e,n){return function(){this.style.setProperty(t,e,n)}}function dn(t,e,n){return function(){var i=e.apply(this,arguments);null==i?this.style.removeProperty(t):this.style.setProperty(t,i,n)}}function In(t,e){return t.style.getPropertyValue(e)||on(t).getComputedStyle(t,null).getPropertyValue(e)}function Qn(t){return function(){delete this[t]}}function un(t,e){return function(){this[t]=e}}function Fn(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function hn(t){return t.trim().split(/^|\s+/)}function bn(t){return t.classList||new Un(t)}function Un(t){this._node=t,this._names=hn(t.getAttribute("class")||"")}function Cn(t,e){for(var n=bn(t),i=-1,s=e.length;++i<s;)n.add(e[i])}function yn(t,e){for(var n=bn(t),i=-1,s=e.length;++i<s;)n.remove(e[i])}function fn(t){return function(){Cn(this,t)}}function Gn(t){return function(){yn(this,t)}}function pn(t,e){return function(){(e.apply(this,arguments)?Cn:yn)(this,t)}}function mn(){this.textContent=""}function An(t){return function(){this.textContent=t}}function xn(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Ln(){this.innerHTML=""}function Sn(t){return function(){this.innerHTML=t}}function Rn(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Xn(){this.nextSibling&&this.parentNode.appendChild(this)}function vn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Nn(){return null}function Zn(){var t=this.parentNode;t&&t.removeChild(this)}function En(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function Vn(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function wn(t){return function(){var e=this.__on;if(e){for(var n,i=0,s=-1,c=e.length;i<c;++i)n=e[i],t.type&&n.type!==t.type||n.name!==t.name?e[++s]=n:this.removeEventListener(n.type,n.listener,n.options);++s?e.length=s:delete this.__on}}}function Wn(t,e,n){return function(){var i,s=this.__on,c=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(s)for(var a=0,l=s.length;a<l;++a)if((i=s[a]).type===t.type&&i.name===t.name)return this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=c,i.options=n),void(i.value=e);this.addEventListener(t.type,c,n),i={type:t.type,name:t.name,value:e,listener:c,options:n},s?s.push(i):this.__on=[i]}}function Hn(t,e,n){var i=on(t),s=i.CustomEvent;"function"==typeof s?s=new s(e,n):(s=i.document.createEvent("Event"),n?(s.initEvent(e,n.bubbles,n.cancelable),s.detail=n.detail):s.initEvent(e,!1,!1)),t.dispatchEvent(s)}function Dn(t,e){return function(){return Hn(this,t,e)}}function Yn(t,e){return function(){return Hn(this,t,e.apply(this,arguments))}}Pe.prototype={constructor:Pe,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}},Un.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var kn=[null];function Jn(t,e){this._groups=t,this._parents=e}function Mn(){return new Jn([[document.documentElement]],kn)}function Tn(t){return"string"==typeof t?new Jn([[document.querySelector(t)]],[document.documentElement]):new Jn([[t]],kn)}function zn(t,e){if(t=function(t){let e;for(;e=t.sourceEvent;)t=e;return t}(t),void 0===e&&(e=t.currentTarget),e){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var i=n.createSVGPoint();return i.x=t.clientX,i.y=t.clientY,[(i=i.matrixTransform(e.getScreenCTM().inverse())).x,i.y]}if(e.getBoundingClientRect){var s=e.getBoundingClientRect();return[t.clientX-s.left-e.clientLeft,t.clientY-s.top-e.clientTop]}}return[t.pageX,t.pageY]}Jn.prototype=Mn.prototype={constructor:Jn,select:function(t){"function"!=typeof t&&(t=He(t));for(var e=this._groups,n=e.length,i=new Array(n),s=0;s<n;++s)for(var c,a,l=e[s],r=l.length,o=i[s]=new Array(r),g=0;g<r;++g)(c=l[g])&&(a=t.call(c,c.__data__,g,l))&&("__data__"in c&&(a.__data__=c.__data__),o[g]=a);return new Jn(i,this._parents)},selectAll:function(t){t="function"==typeof t?ke(t):Ye(t);for(var e=this._groups,n=e.length,i=[],s=[],c=0;c<n;++c)for(var a,l=e[c],r=l.length,o=0;o<r;++o)(a=l[o])&&(i.push(t.call(a,a.__data__,o,l)),s.push(a));return new Jn(i,s)},selectChild:function(t){return this.select(null==t?ze:function(t){return function(){return Te.call(this.children,t)}}("function"==typeof t?t:Me(t)))},selectChildren:function(t){return this.selectAll(null==t?Oe:function(t){return function(){return Ke.call(this.children,t)}}("function"==typeof t?t:Me(t)))},filter:function(t){"function"!=typeof t&&(t=Je(t));for(var e=this._groups,n=e.length,i=new Array(n),s=0;s<n;++s)for(var c,a=e[s],l=a.length,r=i[s]=[],o=0;o<l;++o)(c=a[o])&&t.call(c,c.__data__,o,a)&&r.push(c);return new Jn(i,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,qe);var n=e?$e:je,i=this._parents,s=this._groups;"function"!=typeof t&&(t=function(t){return function(){return t}}(t));for(var c=s.length,a=new Array(c),l=new Array(c),r=new Array(c),o=0;o<c;++o){var g=i[o],B=s[o],d=B.length,I=tn(t.call(g,g&&g.__data__,o,i)),Q=I.length,u=l[o]=new Array(Q),F=a[o]=new Array(Q);n(g,B,u,F,r[o]=new Array(d),I,e);for(var h,b,U=0,C=0;U<Q;++U)if(h=u[U]){for(U>=C&&(C=U+1);!(b=F[C])&&++C<Q;);h._next=b||null}}return(a=new Jn(a,i))._enter=l,a._exit=r,a},enter:function(){return new Jn(this._enter||this._groups.map(_e),this._parents)},exit:function(){return new Jn(this._exit||this._groups.map(_e),this._parents)},join:function(t,e,n){var i=this.enter(),s=this,c=this.exit();return"function"==typeof t?(i=t(i))&&(i=i.selection()):i=i.append(t+""),null!=e&&(s=e(s))&&(s=s.selection()),null==n?c.remove():n(c),i&&s?i.merge(s).order():s},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,i=e._groups,s=n.length,c=i.length,a=Math.min(s,c),l=new Array(s),r=0;r<a;++r)for(var o,g=n[r],B=i[r],d=g.length,I=l[r]=new Array(d),Q=0;Q<d;++Q)(o=g[Q]||B[Q])&&(I[Q]=o);for(;r<s;++r)l[r]=n[r];return new Jn(l,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var i,s=t[e],c=s.length-1,a=s[c];--c>=0;)(i=s[c])&&(a&&4^i.compareDocumentPosition(a)&&a.parentNode.insertBefore(i,a),a=i);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=en);for(var n=this._groups,i=n.length,s=new Array(i),c=0;c<i;++c){for(var a,l=n[c],r=l.length,o=s[c]=new Array(r),g=0;g<r;++g)(a=l[g])&&(o[g]=a);o.sort(e)}return new Jn(s,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var i=t[e],s=0,c=i.length;s<c;++s){var a=i[s];if(a)return a}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,i=e.length;n<i;++n)for(var s,c=e[n],a=0,l=c.length;a<l;++a)(s=c[a])&&t.call(s,s.__data__,a,c);return this},attr:function(t,e){var n=Ze(t);if(arguments.length<2){var i=this.node();return n.local?i.getAttributeNS(n.space,n.local):i.getAttribute(n)}return this.each((null==e?n.local?sn:nn:"function"==typeof e?n.local?rn:ln:n.local?an:cn)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?gn:"function"==typeof e?dn:Bn)(t,e,null==n?"":n)):In(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Qn:"function"==typeof e?Fn:un)(t,e)):this.node()[t]},classed:function(t,e){var n=hn(t+"");if(arguments.length<2){for(var i=bn(this.node()),s=-1,c=n.length;++s<c;)if(!i.contains(n[s]))return!1;return!0}return this.each(("function"==typeof e?pn:e?fn:Gn)(n,e))},text:function(t){return arguments.length?this.each(null==t?mn:("function"==typeof t?xn:An)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?Ln:("function"==typeof t?Rn:Sn)(t)):this.node().innerHTML},raise:function(){return this.each(Xn)},lower:function(){return this.each(vn)},append:function(t){var e="function"==typeof t?t:we(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:we(t),i=null==e?Nn:"function"==typeof e?e:He(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),i.apply(this,arguments)||null)}))},remove:function(){return this.each(Zn)},clone:function(t){return this.select(t?Vn:En)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var i,s,c=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}(t+""),a=c.length;if(!(arguments.length<2)){for(l=e?Wn:wn,i=0;i<a;++i)this.each(l(c[i],e,n));return this}var l=this.node().__on;if(l)for(var r,o=0,g=l.length;o<g;++o)for(i=0,r=l[o];i<a;++i)if((s=c[i]).type===r.type&&s.name===r.name)return r.value},dispatch:function(t,e){return this.each(("function"==typeof e?Yn:Dn)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var i,s=t[e],c=0,a=s.length;c<a;++c)(i=s[c])&&(yield i)}};const Kn={passive:!1},On={capture:!0,passive:!1};function _n(t){t.stopImmediatePropagation()}function Pn(t){t.preventDefault(),t.stopImmediatePropagation()}var jn=t=>()=>t;function $n(t,{sourceEvent:e,subject:n,target:i,identifier:s,active:c,x:a,y:l,dx:r,dy:o,dispatch:g}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:s,enumerable:!0,configurable:!0},active:{value:c,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:l,enumerable:!0,configurable:!0},dx:{value:r,enumerable:!0,configurable:!0},dy:{value:o,enumerable:!0,configurable:!0},_:{value:g}})}function qn(t){return!t.ctrlKey&&!t.button}function ti(){return this.parentNode}function ei(t,e){return null==e?{x:t.x,y:t.y}:e}function ni(){return navigator.maxTouchPoints||"ontouchstart"in this}function ii(){var t,e,n,i,s=qn,c=ti,a=ei,l=ni,r={},o=Le("start","drag","end"),g=0,B=0;function d(t){t.on("mousedown.drag",I).filter(l).on("touchstart.drag",F).on("touchmove.drag",h,Kn).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function I(a,l){if(!i&&s.call(this,a,l)){var r=U(this,c.call(this,a,l),a,l,"mouse");r&&(Tn(a.view).on("mousemove.drag",Q,On).on("mouseup.drag",u,On),function(t){var e=t.document.documentElement,n=Tn(t).on("dragstart.drag",Pn,On);"onselectstart"in e?n.on("selectstart.drag",Pn,On):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")}(a.view),_n(a),n=!1,t=a.clientX,e=a.clientY,r("start",a))}}function Q(i){if(Pn(i),!n){var s=i.clientX-t,c=i.clientY-e;n=s*s+c*c>B}r.mouse("drag",i)}function u(t){Tn(t.view).on("mousemove.drag mouseup.drag",null),function(t,e){var n=t.document.documentElement,i=Tn(t).on("dragstart.drag",null);e&&(i.on("click.drag",Pn,On),setTimeout((function(){i.on("click.drag",null)}),0)),"onselectstart"in n?i.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(t.view,n),Pn(t),r.mouse("end",t)}function F(t,e){if(s.call(this,t,e)){var n,i,a=t.changedTouches,l=c.call(this,t,e),r=a.length;for(n=0;n<r;++n)(i=U(this,l,t,e,a[n].identifier,a[n]))&&(_n(t),i("start",t,a[n]))}}function h(t){var e,n,i=t.changedTouches,s=i.length;for(e=0;e<s;++e)(n=r[i[e].identifier])&&(Pn(t),n("drag",t,i[e]))}function b(t){var e,n,s=t.changedTouches,c=s.length;for(i&&clearTimeout(i),i=setTimeout((function(){i=null}),500),e=0;e<c;++e)(n=r[s[e].identifier])&&(_n(t),n("end",t,s[e]))}function U(t,e,n,i,s,c){var l,B,I,Q=o.copy(),u=zn(c||n,e);if(null!=(I=a.call(t,new $n("beforestart",{sourceEvent:n,target:d,identifier:s,active:g,x:u[0],y:u[1],dx:0,dy:0,dispatch:Q}),i)))return l=I.x-u[0]||0,B=I.y-u[1]||0,function n(c,a,o){var F,h=u;switch(c){case"start":r[s]=n,F=g++;break;case"end":delete r[s],--g;case"drag":u=zn(o||a,e),F=g}Q.call(c,t,new $n(c,{sourceEvent:a,subject:I,target:d,identifier:s,active:F,x:u[0]+l,y:u[1]+B,dx:u[0]-h[0],dy:u[1]-h[1],dispatch:Q}),i)}}return d.filter=function(t){return arguments.length?(s="function"==typeof t?t:jn(!!t),d):s},d.container=function(t){return arguments.length?(c="function"==typeof t?t:jn(t),d):c},d.subject=function(t){return arguments.length?(a="function"==typeof t?t:jn(t),d):a},d.touchable=function(t){return arguments.length?(l="function"==typeof t?t:jn(!!t),d):l},d.on=function(){var t=o.on.apply(o,arguments);return t===o?d:t},d.clickDistance=function(t){return arguments.length?(B=(t=+t)*t,d):Math.sqrt(B)},d}function si(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function ci(t,e){var n=Object.create(t.prototype);for(var i in e)n[i]=e[i];return n}function ai(){}$n.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var li=.7,ri=1/li,oi="\\s*([+-]?\\d+)\\s*",gi="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Bi="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",di=/^#([0-9a-f]{3,8})$/,Ii=new RegExp(`^rgb\\(${oi},${oi},${oi}\\)$`),Qi=new RegExp(`^rgb\\(${Bi},${Bi},${Bi}\\)$`),ui=new RegExp(`^rgba\\(${oi},${oi},${oi},${gi}\\)$`),Fi=new RegExp(`^rgba\\(${Bi},${Bi},${Bi},${gi}\\)$`),hi=new RegExp(`^hsl\\(${gi},${Bi},${Bi}\\)$`),bi=new RegExp(`^hsla\\(${gi},${Bi},${Bi},${gi}\\)$`),Ui={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Ci(){return this.rgb().formatHex()}function yi(){return this.rgb().formatRgb()}function fi(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=di.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?Gi(e):3===n?new xi(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?pi(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?pi(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ii.exec(t))?new xi(e[1],e[2],e[3],1):(e=Qi.exec(t))?new xi(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=ui.exec(t))?pi(e[1],e[2],e[3],e[4]):(e=Fi.exec(t))?pi(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=hi.exec(t))?Ni(e[1],e[2]/100,e[3]/100,1):(e=bi.exec(t))?Ni(e[1],e[2]/100,e[3]/100,e[4]):Ui.hasOwnProperty(t)?Gi(Ui[t]):"transparent"===t?new xi(NaN,NaN,NaN,0):null}function Gi(t){return new xi(t>>16&255,t>>8&255,255&t,1)}function pi(t,e,n,i){return i<=0&&(t=e=n=NaN),new xi(t,e,n,i)}function mi(t){return t instanceof ai||(t=fi(t)),t?new xi((t=t.rgb()).r,t.g,t.b,t.opacity):new xi}function Ai(t,e,n,i){return 1===arguments.length?mi(t):new xi(t,e,n,null==i?1:i)}function xi(t,e,n,i){this.r=+t,this.g=+e,this.b=+n,this.opacity=+i}function Li(){return`#${vi(this.r)}${vi(this.g)}${vi(this.b)}`}function Si(){const t=Ri(this.opacity);return`${1===t?"rgb(":"rgba("}${Xi(this.r)}, ${Xi(this.g)}, ${Xi(this.b)}${1===t?")":`, ${t})`}`}function Ri(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Xi(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function vi(t){return((t=Xi(t))<16?"0":"")+t.toString(16)}function Ni(t,e,n,i){return i<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Vi(t,e,n,i)}function Zi(t){if(t instanceof Vi)return new Vi(t.h,t.s,t.l,t.opacity);if(t instanceof ai||(t=fi(t)),!t)return new Vi;if(t instanceof Vi)return t;var e=(t=t.rgb()).r/255,n=t.g/255,i=t.b/255,s=Math.min(e,n,i),c=Math.max(e,n,i),a=NaN,l=c-s,r=(c+s)/2;return l?(a=e===c?(n-i)/l+6*(n<i):n===c?(i-e)/l+2:(e-n)/l+4,l/=r<.5?c+s:2-c-s,a*=60):l=r>0&&r<1?0:a,new Vi(a,l,r,t.opacity)}function Ei(t,e,n,i){return 1===arguments.length?Zi(t):new Vi(t,e,n,null==i?1:i)}function Vi(t,e,n,i){this.h=+t,this.s=+e,this.l=+n,this.opacity=+i}function wi(t){return(t=(t||0)%360)<0?t+360:t}function Wi(t){return Math.max(0,Math.min(1,t||0))}function Hi(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}si(ai,fi,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Ci,formatHex:Ci,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return Zi(this).formatHsl()},formatRgb:yi,toString:yi}),si(xi,Ai,ci(ai,{brighter(t){return t=null==t?ri:Math.pow(ri,t),new xi(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?li:Math.pow(li,t),new xi(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new xi(Xi(this.r),Xi(this.g),Xi(this.b),Ri(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Li,formatHex:Li,formatHex8:function(){return`#${vi(this.r)}${vi(this.g)}${vi(this.b)}${vi(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Si,toString:Si})),si(Vi,Ei,ci(ai,{brighter(t){return t=null==t?ri:Math.pow(ri,t),new Vi(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?li:Math.pow(li,t),new Vi(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,i=n+(n<.5?n:1-n)*e,s=2*n-i;return new xi(Hi(t>=240?t-240:t+120,s,i),Hi(t,s,i),Hi(t<120?t+240:t-120,s,i),this.opacity)},clamp(){return new Vi(wi(this.h),Wi(this.s),Wi(this.l),Ri(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ri(this.opacity);return`${1===t?"hsl(":"hsla("}${wi(this.h)}, ${100*Wi(this.s)}%, ${100*Wi(this.l)}%${1===t?")":`, ${t})`}`}}));const Di=Math.PI/180,Yi=180/Math.PI,ki=.96422,Ji=1,Mi=.82521,Ti=4/29,zi=6/29,Ki=3*zi*zi,Oi=zi*zi*zi;function _i(t){if(t instanceof ji)return new ji(t.l,t.a,t.b,t.opacity);if(t instanceof is)return ss(t);t instanceof xi||(t=mi(t));var e,n,i=es(t.r),s=es(t.g),c=es(t.b),a=$i((.2225045*i+.7168786*s+.0606169*c)/Ji);return i===s&&s===c?e=n=a:(e=$i((.4360747*i+.3850649*s+.1430804*c)/ki),n=$i((.0139322*i+.0971045*s+.7141733*c)/Mi)),new ji(116*a-16,500*(e-a),200*(a-n),t.opacity)}function Pi(t,e,n,i){return 1===arguments.length?_i(t):new ji(t,e,n,null==i?1:i)}function ji(t,e,n,i){this.l=+t,this.a=+e,this.b=+n,this.opacity=+i}function $i(t){return t>Oi?Math.pow(t,1/3):t/Ki+Ti}function qi(t){return t>zi?t*t*t:Ki*(t-Ti)}function ts(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function es(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function ns(t,e,n,i){return 1===arguments.length?function(t){if(t instanceof is)return new is(t.h,t.c,t.l,t.opacity);if(t instanceof ji||(t=_i(t)),0===t.a&&0===t.b)return new is(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Yi;return new is(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new is(t,e,n,null==i?1:i)}function is(t,e,n,i){this.h=+t,this.c=+e,this.l=+n,this.opacity=+i}function ss(t){if(isNaN(t.h))return new ji(t.l,0,0,t.opacity);var e=t.h*Di;return new ji(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}si(ji,Pi,ci(ai,{brighter(t){return new ji(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new ji(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new xi(ts(3.1338561*(e=ki*qi(e))-1.6168667*(t=Ji*qi(t))-.4906146*(n=Mi*qi(n))),ts(-.9787684*e+1.9161415*t+.033454*n),ts(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),si(is,ns,ci(ai,{brighter(t){return new is(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new is(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return ss(this).rgb()}}));var cs=-.14861,as=1.78277,ls=-.29227,rs=-.90649,os=1.97294,gs=os*rs,Bs=os*as,ds=as*ls-rs*cs;function Is(t,e,n,i){return 1===arguments.length?function(t){if(t instanceof Qs)return new Qs(t.h,t.s,t.l,t.opacity);t instanceof xi||(t=mi(t));var e=t.r/255,n=t.g/255,i=t.b/255,s=(ds*i+gs*e-Bs*n)/(ds+gs-Bs),c=i-s,a=(os*(n-s)-ls*c)/rs,l=Math.sqrt(a*a+c*c)/(os*s*(1-s)),r=l?Math.atan2(a,c)*Yi-120:NaN;return new Qs(r<0?r+360:r,l,s,t.opacity)}(t):new Qs(t,e,n,null==i?1:i)}function Qs(t,e,n,i){this.h=+t,this.s=+e,this.l=+n,this.opacity=+i}si(Qs,Is,ci(ai,{brighter(t){return t=null==t?ri:Math.pow(ri,t),new Qs(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?li:Math.pow(li,t),new Qs(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=isNaN(this.h)?0:(this.h+120)*Di,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),i=Math.cos(t),s=Math.sin(t);return new xi(255*(e+n*(cs*i+as*s)),255*(e+n*(ls*i+rs*s)),255*(e+n*(os*i)),this.opacity)}}));var us=t=>()=>t;function Fs(t,e){return function(n){return t+n*e}}function hs(t,e){var n=e-t;return n?Fs(t,n>180||n<-180?n-360*Math.round(n/360):n):us(isNaN(t)?e:t)}function bs(t){return 1==(t=+t)?Us:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(i){return Math.pow(t+i*e,n)}}(e,n,t):us(isNaN(e)?n:e)}}function Us(t,e){var n=e-t;return n?Fs(t,n):us(isNaN(t)?e:t)}var Cs=function t(e){var n=bs(e);function i(t,e){var i=n((t=Ai(t)).r,(e=Ai(e)).r),s=n(t.g,e.g),c=n(t.b,e.b),a=Us(t.opacity,e.opacity);return function(e){return t.r=i(e),t.g=s(e),t.b=c(e),t.opacity=a(e),t+""}}return i.gamma=t,i}(1);var ys,fs=(ys=function(t){var e=t.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),s=t[i],c=t[i+1],a=i>0?t[i-1]:2*s-c,l=i<e-1?t[i+2]:2*c-s;return function(t,e,n,i,s){var c=t*t,a=c*t;return((1-3*t+3*c-a)*e+(4-6*c+3*a)*n+(1+3*t+3*c-3*a)*i+a*s)/6}((n-i/e)*e,a,s,c,l)}},function(t){var e,n,i=t.length,s=new Array(i),c=new Array(i),a=new Array(i);for(e=0;e<i;++e)n=Ai(t[e]),s[e]=n.r||0,c[e]=n.g||0,a[e]=n.b||0;return s=ys(s),c=ys(c),a=ys(a),n.opacity=1,function(t){return n.r=s(t),n.g=c(t),n.b=a(t),n+""}});function Gs(t,e){e||(e=[]);var n,i=t?Math.min(e.length,t.length):0,s=e.slice();return function(c){for(n=0;n<i;++n)s[n]=t[n]*(1-c)+e[n]*c;return s}}function ps(t,e){var n,i=e?e.length:0,s=t?Math.min(i,t.length):0,c=new Array(s),a=new Array(i);for(n=0;n<s;++n)c[n]=Xs(t[n],e[n]);for(;n<i;++n)a[n]=e[n];return function(t){for(n=0;n<s;++n)a[n]=c[n](t);return a}}function ms(t,e){var n=new Date;return t=+t,e=+e,function(i){return n.setTime(t*(1-i)+e*i),n}}function As(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function xs(t,e){var n,i={},s={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?i[n]=Xs(t[n],e[n]):s[n]=e[n];return function(t){for(n in i)s[n]=i[n](t);return s}}var Ls=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Ss=new RegExp(Ls.source,"g");function Rs(t,e){var n,i,s,c=Ls.lastIndex=Ss.lastIndex=0,a=-1,l=[],r=[];for(t+="",e+="";(n=Ls.exec(t))&&(i=Ss.exec(e));)(s=i.index)>c&&(s=e.slice(c,s),l[a]?l[a]+=s:l[++a]=s),(n=n[0])===(i=i[0])?l[a]?l[a]+=i:l[++a]=i:(l[++a]=null,r.push({i:a,x:As(n,i)})),c=Ss.lastIndex;return c<e.length&&(s=e.slice(c),l[a]?l[a]+=s:l[++a]=s),l.length<2?r[0]?function(t){return function(e){return t(e)+""}}(r[0].x):function(t){return function(){return t}}(e):(e=r.length,function(t){for(var n,i=0;i<e;++i)l[(n=r[i]).i]=n.x(t);return l.join("")})}function Xs(t,e){var n,i=typeof e;return null==e||"boolean"===i?us(e):("number"===i?As:"string"===i?(n=fi(e))?(e=n,Cs):Rs:e instanceof fi?Cs:e instanceof Date?ms:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}(e)?Gs:Array.isArray(e)?ps:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?xs:As)(t,e)}function vs(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var Ns,Zs=180/Math.PI,Es={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Vs(t,e,n,i,s,c){var a,l,r;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(r=t*n+e*i)&&(n-=t*r,i-=e*r),(l=Math.sqrt(n*n+i*i))&&(n/=l,i/=l,r/=l),t*i<e*n&&(t=-t,e=-e,r=-r,a=-a),{translateX:s,translateY:c,rotate:Math.atan2(e,t)*Zs,skewX:Math.atan(r)*Zs,scaleX:a,scaleY:l}}function ws(t,e,n,i){function s(t){return t.length?t.pop()+" ":""}return function(c,a){var l=[],r=[];return c=t(c),a=t(a),function(t,i,s,c,a,l){if(t!==s||i!==c){var r=a.push("translate(",null,e,null,n);l.push({i:r-4,x:As(t,s)},{i:r-2,x:As(i,c)})}else(s||c)&&a.push("translate("+s+e+c+n)}(c.translateX,c.translateY,a.translateX,a.translateY,l,r),function(t,e,n,c){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),c.push({i:n.push(s(n)+"rotate(",null,i)-2,x:As(t,e)})):e&&n.push(s(n)+"rotate("+e+i)}(c.rotate,a.rotate,l,r),function(t,e,n,c){t!==e?c.push({i:n.push(s(n)+"skewX(",null,i)-2,x:As(t,e)}):e&&n.push(s(n)+"skewX("+e+i)}(c.skewX,a.skewX,l,r),function(t,e,n,i,c,a){if(t!==n||e!==i){var l=c.push(s(c)+"scale(",null,",",null,")");a.push({i:l-4,x:As(t,n)},{i:l-2,x:As(e,i)})}else 1===n&&1===i||c.push(s(c)+"scale("+n+","+i+")")}(c.scaleX,c.scaleY,a.scaleX,a.scaleY,l,r),c=a=null,function(t){for(var e,n=-1,i=r.length;++n<i;)l[(e=r[n]).i]=e.x(t);return l.join("")}}}var Ws=ws((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Es:Vs(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),Hs=ws((function(t){return null==t?Es:(Ns||(Ns=document.createElementNS("http://www.w3.org/2000/svg","g")),Ns.setAttribute("transform",t),(t=Ns.transform.baseVal.consolidate())?Vs((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):Es)}),", ",")",")");var Ds=function(t){return function(e,n){var i=t((e=Ei(e)).h,(n=Ei(n)).h),s=Us(e.s,n.s),c=Us(e.l,n.l),a=Us(e.opacity,n.opacity);return function(t){return e.h=i(t),e.s=s(t),e.l=c(t),e.opacity=a(t),e+""}}}(hs);var Ys=function(t){return function(e,n){var i=t((e=ns(e)).h,(n=ns(n)).h),s=Us(e.c,n.c),c=Us(e.l,n.l),a=Us(e.opacity,n.opacity);return function(t){return e.h=i(t),e.c=s(t),e.l=c(t),e.opacity=a(t),e+""}}}(hs);function ks(t){return function e(n){function i(e,i){var s=t((e=Is(e)).h,(i=Is(i)).h),c=Us(e.s,i.s),a=Us(e.l,i.l),l=Us(e.opacity,i.opacity);return function(t){return e.h=s(t),e.s=c(t),e.l=a(Math.pow(t,n)),e.opacity=l(t),e+""}}return n=+n,i.gamma=e,i}(1)}ks(hs);var Js=ks(Us);function Ms(t,e){void 0===e&&(e=t,t=Xs);for(var n=0,i=e.length-1,s=e[0],c=new Array(i<0?0:i);n<i;)c[n]=t(s,s=e[++n]);return function(t){var e=Math.max(0,Math.min(i-1,Math.floor(t*=i)));return c[e](t-e)}}function Ts(t,e){for(var n=new Array(e),i=0;i<e;++i)n[i]=t(i/(e-1));return n}var zs,Ks,Os=0,_s=0,Ps=0,js=1e3,$s=0,qs=0,tc=0,ec="object"==typeof performance&&performance.now?performance:Date,nc="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function ic(){return qs||(nc(sc),qs=ec.now()+tc)}function sc(){qs=0}function cc(){this._call=this._time=this._next=null}function ac(t,e,n){var i=new cc;return i.restart(t,e,n),i}function lc(){qs=($s=ec.now())+tc,Os=_s=0;try{!function(){ic(),++Os;for(var t,e=zs;e;)(t=qs-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Os}()}finally{Os=0,function(){var t,e,n=zs,i=1/0;for(;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:zs=e);Ks=t,oc(i)}(),qs=0}}function rc(){var t=ec.now(),e=t-$s;e>js&&(tc-=e,$s=t)}function oc(t){Os||(_s&&(_s=clearTimeout(_s)),t-qs>24?(t<1/0&&(_s=setTimeout(lc,t-ec.now()-tc)),Ps&&(Ps=clearInterval(Ps))):(Ps||($s=ec.now(),Ps=setInterval(rc,js)),Os=1,nc(lc)))}function gc(t,e,n){var i=new cc;return e=null==e?0:+e,i.restart((n=>{i.stop(),t(n+e)}),e,n),i}cc.prototype=ac.prototype={constructor:cc,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?ic():+n)+(null==e?0:+e),this._next||Ks===this||(Ks?Ks._next=this:zs=this,Ks=this),this._call=t,this._time=n,oc()},stop:function(){this._call&&(this._call=null,this._time=1/0,oc())}};var Bc=Le("start","end","cancel","interrupt"),dc=[],Ic=0,Qc=1,uc=2,Fc=3,hc=4,bc=5,Uc=6;function Cc(t,e,n,i,s,c){var a=t.__transition;if(a){if(n in a)return}else t.__transition={};!function(t,e,n){var i,s=t.__transition;function c(t){n.state=Qc,n.timer.restart(a,n.delay,n.time),n.delay<=t&&a(t-n.delay)}function a(c){var o,g,B,d;if(n.state!==Qc)return r();for(o in s)if((d=s[o]).name===n.name){if(d.state===Fc)return gc(a);d.state===hc?(d.state=Uc,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete s[o]):+o<e&&(d.state=Uc,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete s[o])}if(gc((function(){n.state===Fc&&(n.state=hc,n.timer.restart(l,n.delay,n.time),l(c))})),n.state=uc,n.on.call("start",t,t.__data__,n.index,n.group),n.state===uc){for(n.state=Fc,i=new Array(B=n.tween.length),o=0,g=-1;o<B;++o)(d=n.tween[o].value.call(t,t.__data__,n.index,n.group))&&(i[++g]=d);i.length=g+1}}function l(e){for(var s=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(r),n.state=bc,1),c=-1,a=i.length;++c<a;)i[c].call(t,s);n.state===bc&&(n.on.call("end",t,t.__data__,n.index,n.group),r())}function r(){for(var i in n.state=Uc,n.timer.stop(),delete s[e],s)return;delete t.__transition}s[e]=n,n.timer=ac(c,0,n.time)}(t,n,{name:e,index:i,group:s,on:Bc,tween:dc,time:c.time,delay:c.delay,duration:c.duration,ease:c.ease,timer:null,state:Ic})}function yc(t,e){var n=Gc(t,e);if(n.state>Ic)throw new Error("too late; already scheduled");return n}function fc(t,e){var n=Gc(t,e);if(n.state>Fc)throw new Error("too late; already running");return n}function Gc(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function pc(t,e){var n,i;return function(){var s=fc(this,t),c=s.tween;if(c!==n)for(var a=0,l=(i=n=c).length;a<l;++a)if(i[a].name===e){(i=i.slice()).splice(a,1);break}s.tween=i}}function mc(t,e,n){var i,s;if("function"!=typeof n)throw new Error;return function(){var c=fc(this,t),a=c.tween;if(a!==i){s=(i=a).slice();for(var l={name:e,value:n},r=0,o=s.length;r<o;++r)if(s[r].name===e){s[r]=l;break}r===o&&s.push(l)}c.tween=s}}function Ac(t,e,n){var i=t._id;return t.each((function(){var t=fc(this,i);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return Gc(t,i).value[e]}}function xc(t,e){var n;return("number"==typeof e?As:e instanceof fi?Cs:(n=fi(e))?(e=n,Cs):Rs)(t,e)}function Lc(t){return function(){this.removeAttribute(t)}}function Sc(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Rc(t,e,n){var i,s,c=n+"";return function(){var a=this.getAttribute(t);return a===c?null:a===i?s:s=e(i=a,n)}}function Xc(t,e,n){var i,s,c=n+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===c?null:a===i?s:s=e(i=a,n)}}function vc(t,e,n){var i,s,c;return function(){var a,l,r=n(this);if(null!=r)return(a=this.getAttribute(t))===(l=r+"")?null:a===i&&l===s?c:(s=l,c=e(i=a,r));this.removeAttribute(t)}}function Nc(t,e,n){var i,s,c;return function(){var a,l,r=n(this);if(null!=r)return(a=this.getAttributeNS(t.space,t.local))===(l=r+"")?null:a===i&&l===s?c:(s=l,c=e(i=a,r));this.removeAttributeNS(t.space,t.local)}}function Zc(t,e){var n,i;function s(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&function(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}(t,s)),n}return s._value=e,s}function Ec(t,e){var n,i;function s(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&function(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}(t,s)),n}return s._value=e,s}function Vc(t,e){return function(){yc(this,t).delay=+e.apply(this,arguments)}}function wc(t,e){return e=+e,function(){yc(this,t).delay=e}}function Wc(t,e){return function(){fc(this,t).duration=+e.apply(this,arguments)}}function Hc(t,e){return e=+e,function(){fc(this,t).duration=e}}var Dc=Mn.prototype.constructor;function Yc(t){return function(){this.style.removeProperty(t)}}var kc=0;function Jc(t,e,n,i){this._groups=t,this._parents=e,this._name=n,this._id=i}function Mc(){return++kc}var Tc=Mn.prototype;Jc.prototype={constructor:Jc,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=He(t));for(var i=this._groups,s=i.length,c=new Array(s),a=0;a<s;++a)for(var l,r,o=i[a],g=o.length,B=c[a]=new Array(g),d=0;d<g;++d)(l=o[d])&&(r=t.call(l,l.__data__,d,o))&&("__data__"in l&&(r.__data__=l.__data__),B[d]=r,Cc(B[d],e,n,d,B,Gc(l,n)));return new Jc(c,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=Ye(t));for(var i=this._groups,s=i.length,c=[],a=[],l=0;l<s;++l)for(var r,o=i[l],g=o.length,B=0;B<g;++B)if(r=o[B]){for(var d,I=t.call(r,r.__data__,B,o),Q=Gc(r,n),u=0,F=I.length;u<F;++u)(d=I[u])&&Cc(d,e,n,u,I,Q);c.push(I),a.push(r)}return new Jc(c,a,e,n)},selectChild:Tc.selectChild,selectChildren:Tc.selectChildren,filter:function(t){"function"!=typeof t&&(t=Je(t));for(var e=this._groups,n=e.length,i=new Array(n),s=0;s<n;++s)for(var c,a=e[s],l=a.length,r=i[s]=[],o=0;o<l;++o)(c=a[o])&&t.call(c,c.__data__,o,a)&&r.push(c);return new Jc(i,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,i=e.length,s=n.length,c=Math.min(i,s),a=new Array(i),l=0;l<c;++l)for(var r,o=e[l],g=n[l],B=o.length,d=a[l]=new Array(B),I=0;I<B;++I)(r=o[I]||g[I])&&(d[I]=r);for(;l<i;++l)a[l]=e[l];return new Jc(a,this._parents,this._name,this._id)},selection:function(){return new Dc(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Mc(),i=this._groups,s=i.length,c=0;c<s;++c)for(var a,l=i[c],r=l.length,o=0;o<r;++o)if(a=l[o]){var g=Gc(a,e);Cc(a,t,n,o,l,{time:g.time+g.delay+g.duration,delay:0,duration:g.duration,ease:g.ease})}return new Jc(i,this._parents,t,n)},call:Tc.call,nodes:Tc.nodes,node:Tc.node,size:Tc.size,empty:Tc.empty,each:Tc.each,on:function(t,e){var n=this._id;return arguments.length<2?Gc(this.node(),n).on.on(t):this.each(function(t,e,n){var i,s,c=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?yc:fc;return function(){var a=c(this,t),l=a.on;l!==i&&(s=(i=l).copy()).on(e,n),a.on=s}}(n,t,e))},attr:function(t,e){var n=Ze(t),i="transform"===n?Hs:xc;return this.attrTween(t,"function"==typeof e?(n.local?Nc:vc)(n,i,Ac(this,"attr."+t,e)):null==e?(n.local?Sc:Lc)(n):(n.local?Xc:Rc)(n,i,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var i=Ze(t);return this.tween(n,(i.local?Zc:Ec)(i,e))},style:function(t,e,n){var i="transform"==(t+="")?Ws:xc;return null==e?this.styleTween(t,function(t,e){var n,i,s;return function(){var c=In(this,t),a=(this.style.removeProperty(t),In(this,t));return c===a?null:c===n&&a===i?s:s=e(n=c,i=a)}}(t,i)).on("end.style."+t,Yc(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var i,s,c;return function(){var a=In(this,t),l=n(this),r=l+"";return null==l&&(this.style.removeProperty(t),r=l=In(this,t)),a===r?null:a===i&&r===s?c:(s=r,c=e(i=a,l))}}(t,i,Ac(this,"style."+t,e))).each(function(t,e){var n,i,s,c,a="style."+e,l="end."+a;return function(){var r=fc(this,t),o=r.on,g=null==r.value[a]?c||(c=Yc(e)):void 0;o===n&&s===g||(i=(n=o).copy()).on(l,s=g),r.on=i}}(this._id,t)):this.styleTween(t,function(t,e,n){var i,s,c=n+"";return function(){var a=In(this,t);return a===c?null:a===i?s:s=e(i=a,n)}}(t,i,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var i="style."+(t+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;return this.tween(i,function(t,e,n){var i,s;function c(){var c=e.apply(this,arguments);return c!==s&&(i=(s=c)&&function(t,e,n){return function(i){this.style.setProperty(t,e.call(this,i),n)}}(t,c,n)),i}return c._value=e,c}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Ac(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,n;function i(){var i=t.apply(this,arguments);return i!==n&&(e=(n=i)&&function(t){return function(e){this.textContent=t.call(this,e)}}(i)),e}return i._value=t,i}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var i,s=Gc(this.node(),n).tween,c=0,a=s.length;c<a;++c)if((i=s[c]).name===t)return i.value;return null}return this.each((null==e?pc:mc)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Vc:wc)(e,t)):Gc(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Wc:Hc)(e,t)):Gc(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){fc(this,t).ease=e}}(e,t)):Gc(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;fc(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,i=n._id,s=n.size();return new Promise((function(c,a){var l={value:a},r={value:function(){0==--s&&c()}};n.each((function(){var n=fc(this,i),s=n.on;s!==t&&((e=(t=s).copy())._.cancel.push(l),e._.interrupt.push(l),e._.end.push(r)),n.on=e})),0===s&&c()}))},[Symbol.iterator]:Tc[Symbol.iterator]};const zc=t=>+t;function Kc(t){return--t*t*t+1}var Oc={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function _c(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}Mn.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,i,s,c=t.__transition,a=!0;if(c){for(s in e=null==e?null:e+"",c)(n=c[s]).name===e?(i=n.state>uc&&n.state<bc,n.state=Uc,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete c[s]):a=!1;a&&delete t.__transition}}(this,t)}))},Mn.prototype.transition=function(t){var e,n;t instanceof Jc?(e=t._id,t=t._name):(e=Mc(),(n=Oc).time=ic(),t=null==t?null:t+"");for(var i=this._groups,s=i.length,c=0;c<s;++c)for(var a,l=i[c],r=l.length,o=0;o<r;++o)(a=l[o])&&Cc(a,t,e,o,l,n||_c(a,e));return new Jc(i,this._parents,t,e)};const Pc=Math.PI,jc=2*Pc,$c=1e-6,qc=jc-$c;function ta(t){this._+=t[0];for(let e=1,n=t.length;e<n;++e)this._+=arguments[e]+t[e]}class ea{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?ta:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ta;const n=10**e;return function(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=Math.round(arguments[e]*n)/n+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,n,i){this._append`Q${+t},${+e},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(t,e,n,i,s,c){this._append`C${+t},${+e},${+n},${+i},${this._x1=+s},${this._y1=+c}`}arcTo(t,e,n,i,s){if(t=+t,e=+e,n=+n,i=+i,(s=+s)<0)throw new Error(`negative radius: ${s}`);let c=this._x1,a=this._y1,l=n-t,r=i-e,o=c-t,g=a-e,B=o*o+g*g;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(B>$c)if(Math.abs(g*l-r*o)>$c&&s){let d=n-c,I=i-a,Q=l*l+r*r,u=d*d+I*I,F=Math.sqrt(Q),h=Math.sqrt(B),b=s*Math.tan((Pc-Math.acos((Q+B-u)/(2*F*h)))/2),U=b/h,C=b/F;Math.abs(U-1)>$c&&this._append`L${t+U*o},${e+U*g}`,this._append`A${s},${s},0,0,${+(g*d>o*I)},${this._x1=t+C*l},${this._y1=e+C*r}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,i,s,c){if(t=+t,e=+e,c=!!c,(n=+n)<0)throw new Error(`negative radius: ${n}`);let a=n*Math.cos(i),l=n*Math.sin(i),r=t+a,o=e+l,g=1^c,B=c?i-s:s-i;null===this._x1?this._append`M${r},${o}`:(Math.abs(this._x1-r)>$c||Math.abs(this._y1-o)>$c)&&this._append`L${r},${o}`,n&&(B<0&&(B=B%jc+jc),B>qc?this._append`A${n},${n},0,1,${g},${t-a},${e-l}A${n},${n},0,1,${g},${this._x1=r},${this._y1=o}`:B>$c&&this._append`A${n},${n},0,${+(B>=Pc)},${g},${this._x1=t+n*Math.cos(s)},${this._y1=e+n*Math.sin(s)}`)}rect(t,e,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function na(t=3){return new ea(+t)}function ia(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,i=t.slice(0,n);return[i.length>1?i[0]+i.slice(2):i,+t.slice(n+1)]}function sa(t){return(t=ia(Math.abs(t)))?t[1]:NaN}var ca,aa=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function la(t){if(!(e=aa.exec(t)))throw new Error("invalid format: "+t);var e;return new ra({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function ra(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function oa(t,e){var n=ia(t,e);if(!n)return t+"";var i=n[0],s=n[1];return s<0?"0."+new Array(-s).join("0")+i:i.length>s+1?i.slice(0,s+1)+"."+i.slice(s+1):i+new Array(s-i.length+2).join("0")}la.prototype=ra.prototype,ra.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var ga={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>oa(100*t,e),r:oa,s:function(t,e){var n=ia(t,e);if(!n)return t+"";var i=n[0],s=n[1],c=s-(ca=3*Math.max(-8,Math.min(8,Math.floor(s/3))))+1,a=i.length;return c===a?i:c>a?i+new Array(c-a+1).join("0"):c>0?i.slice(0,c)+"."+i.slice(c):"0."+new Array(1-c).join("0")+ia(t,Math.max(0,e+c-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Ba(t){return t}var da,Ia,Qa,ua=Array.prototype.map,Fa=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function ha(t){var e,n,i=void 0===t.grouping||void 0===t.thousands?Ba:(e=ua.call(t.grouping,Number),n=t.thousands+"",function(t,i){for(var s=t.length,c=[],a=0,l=e[0],r=0;s>0&&l>0&&(r+l+1>i&&(l=Math.max(1,i-r)),c.push(t.substring(s-=l,s+l)),!((r+=l+1)>i));)l=e[a=(a+1)%e.length];return c.reverse().join(n)}),s=void 0===t.currency?"":t.currency[0]+"",c=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",l=void 0===t.numerals?Ba:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(ua.call(t.numerals,String)),r=void 0===t.percent?"%":t.percent+"",o=void 0===t.minus?"−":t.minus+"",g=void 0===t.nan?"NaN":t.nan+"";function B(t){var e=(t=la(t)).fill,n=t.align,B=t.sign,d=t.symbol,I=t.zero,Q=t.width,u=t.comma,F=t.precision,h=t.trim,b=t.type;"n"===b?(u=!0,b="g"):ga[b]||(void 0===F&&(F=12),h=!0,b="g"),(I||"0"===e&&"="===n)&&(I=!0,e="0",n="=");var U="$"===d?s:"#"===d&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",C="$"===d?c:/[%p]/.test(b)?r:"",y=ga[b],f=/[defgprs%]/.test(b);function G(t){var s,c,r,d=U,G=C;if("c"===b)G=y(t)+G,t="";else{var p=(t=+t)<0||1/t<0;if(t=isNaN(t)?g:y(Math.abs(t),F),h&&(t=function(t){t:for(var e,n=t.length,i=1,s=-1;i<n;++i)switch(t[i]){case".":s=e=i;break;case"0":0===s&&(s=i),e=i;break;default:if(!+t[i])break t;s>0&&(s=0)}return s>0?t.slice(0,s)+t.slice(e+1):t}(t)),p&&0==+t&&"+"!==B&&(p=!1),d=(p?"("===B?B:o:"-"===B||"("===B?"":B)+d,G=("s"===b?Fa[8+ca/3]:"")+G+(p&&"("===B?")":""),f)for(s=-1,c=t.length;++s<c;)if(48>(r=t.charCodeAt(s))||r>57){G=(46===r?a+t.slice(s+1):t.slice(s))+G,t=t.slice(0,s);break}}u&&!I&&(t=i(t,1/0));var m=d.length+t.length+G.length,A=m<Q?new Array(Q-m+1).join(e):"";switch(u&&I&&(t=i(A+t,A.length?Q-G.length:1/0),A=""),n){case"<":t=d+t+G+A;break;case"=":t=d+A+t+G;break;case"^":t=A.slice(0,m=A.length>>1)+d+t+G+A.slice(m);break;default:t=A+d+t+G}return l(t)}return F=void 0===F?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,F)):Math.max(0,Math.min(20,F)),G.toString=function(){return t+""},G}return{format:B,formatPrefix:function(t,e){var n=B(((t=la(t)).type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(sa(e)/3))),s=Math.pow(10,-i),c=Fa[8+i/3];return function(t){return n(s*t)+c}}}}da=ha({thousands:",",grouping:[3],currency:["$",""]}),Ia=da.format,Qa=da.formatPrefix;var ba=1e-6,Ua=1e-12,Ca=Math.PI,ya=Ca/2,fa=Ca/4,Ga=2*Ca,pa=180/Ca,ma=Ca/180,Aa=Math.abs,xa=Math.atan,La=Math.atan2,Sa=Math.cos,Ra=Math.exp,Xa=Math.log,va=Math.pow,Na=Math.sin,Za=Math.sign||function(t){return t>0?1:t<0?-1:0},Ea=Math.sqrt,Va=Math.tan;function wa(t){return t>1?0:t<-1?Ca:Math.acos(t)}function Wa(t){return t>1?ya:t<-1?-ya:Math.asin(t)}function Ha(){}function Da(t,e){t&&ka.hasOwnProperty(t.type)&&ka[t.type](t,e)}var Ya={Feature:function(t,e){Da(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,i=-1,s=n.length;++i<s;)Da(n[i].geometry,e)}},ka={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var n=t.coordinates,i=-1,s=n.length;++i<s;)t=n[i],e.point(t[0],t[1],t[2])},LineString:function(t,e){Ja(t.coordinates,e,0)},MultiLineString:function(t,e){for(var n=t.coordinates,i=-1,s=n.length;++i<s;)Ja(n[i],e,0)},Polygon:function(t,e){Ma(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,i=-1,s=n.length;++i<s;)Ma(n[i],e)},GeometryCollection:function(t,e){for(var n=t.geometries,i=-1,s=n.length;++i<s;)Da(n[i],e)}};function Ja(t,e,n){var i,s=-1,c=t.length-n;for(e.lineStart();++s<c;)i=t[s],e.point(i[0],i[1],i[2]);e.lineEnd()}function Ma(t,e){var n=-1,i=t.length;for(e.polygonStart();++n<i;)Ja(t[n],e,1);e.polygonEnd()}function Ta(t,e){t&&Ya.hasOwnProperty(t.type)?Ya[t.type](t,e):Da(t,e)}function za(t){return[La(t[1],t[0]),Wa(t[2])]}function Ka(t){var e=t[0],n=t[1],i=Sa(n);return[i*Sa(e),i*Na(e),Na(n)]}function Oa(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function _a(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Pa(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function ja(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function $a(t){var e=Ea(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function qa(t,e){function n(n,i){return n=t(n,i),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,i){return(n=e.invert(n,i))&&t.invert(n[0],n[1])}),n}function tl(t,e){return Aa(t)>Ca&&(t-=Math.round(t/Ga)*Ga),[t,e]}function el(t,e,n){return(t%=Ga)?e||n?qa(il(t),sl(e,n)):il(t):e||n?sl(e,n):tl}function nl(t){return function(e,n){return Aa(e+=t)>Ca&&(e-=Math.round(e/Ga)*Ga),[e,n]}}function il(t){var e=nl(t);return e.invert=nl(-t),e}function sl(t,e){var n=Sa(t),i=Na(t),s=Sa(e),c=Na(e);function a(t,e){var a=Sa(e),l=Sa(t)*a,r=Na(t)*a,o=Na(e),g=o*n+l*i;return[La(r*s-g*c,l*n-o*i),Wa(g*s+r*c)]}return a.invert=function(t,e){var a=Sa(e),l=Sa(t)*a,r=Na(t)*a,o=Na(e),g=o*s-r*c;return[La(r*s+o*c,l*n+g*i),Wa(g*n-l*i)]},a}function cl(t,e){(e=Ka(e))[0]-=t,$a(e);var n=wa(-e[1]);return((-e[2]<0?-n:n)+Ga-ba)%Ga}function al(){var t,e=[];return{point:function(e,n,i){t.push([e,n,i])},lineStart:function(){e.push(t=[])},lineEnd:Ha,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function ll(t,e){return Aa(t[0]-e[0])<ba&&Aa(t[1]-e[1])<ba}function rl(t,e,n,i){this.x=t,this.z=e,this.o=n,this.e=i,this.v=!1,this.n=this.p=null}function ol(t,e,n,i,s){var c,a,l=[],r=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,i=t[0],a=t[e];if(ll(i,a)){if(!i[2]&&!a[2]){for(s.lineStart(),c=0;c<e;++c)s.point((i=t[c])[0],i[1]);return void s.lineEnd()}a[0]+=2*ba}l.push(n=new rl(i,t,null,!0)),r.push(n.o=new rl(i,null,n,!1)),l.push(n=new rl(a,t,null,!1)),r.push(n.o=new rl(a,null,n,!0))}})),l.length){for(r.sort(e),gl(l),gl(r),c=0,a=r.length;c<a;++c)r[c].e=n=!n;for(var o,g,B=l[0];;){for(var d=B,I=!0;d.v;)if((d=d.n)===B)return;o=d.z,s.lineStart();do{if(d.v=d.o.v=!0,d.e){if(I)for(c=0,a=o.length;c<a;++c)s.point((g=o[c])[0],g[1]);else i(d.x,d.n.x,1,s);d=d.n}else{if(I)for(o=d.p.z,c=o.length-1;c>=0;--c)s.point((g=o[c])[0],g[1]);else i(d.x,d.p.x,-1,s);d=d.p}o=(d=d.o).z,I=!I}while(!d.v);s.lineEnd()}}}function gl(t){if(e=t.length){for(var e,n,i=0,s=t[0];++i<e;)s.n=n=t[i],n.p=s,s=n;s.n=n=t[0],n.p=s}}function Bl(t){return Aa(t[0])<=Ca?t[0]:Za(t[0])*((Aa(t[0])+Ca)%Ga-Ca)}function dl(t,e,n,i){return function(s){var c,a,l,r=e(s),o=al(),g=e(o),B=!1,d={point:I,lineStart:u,lineEnd:F,polygonStart:function(){d.point=h,d.lineStart=b,d.lineEnd=U,a=[],c=[]},polygonEnd:function(){d.point=I,d.lineStart=u,d.lineEnd=F,a=re(a);var t=function(t,e){var n=Bl(e),i=e[1],s=Na(i),c=[Na(n),-Sa(n),0],a=0,l=0,r=new mt;1===s?i=ya+ba:-1===s&&(i=-ya-ba);for(var o=0,g=t.length;o<g;++o)if(d=(B=t[o]).length)for(var B,d,I=B[d-1],Q=Bl(I),u=I[1]/2+fa,F=Na(u),h=Sa(u),b=0;b<d;++b,Q=C,F=f,h=G,I=U){var U=B[b],C=Bl(U),y=U[1]/2+fa,f=Na(y),G=Sa(y),p=C-Q,m=p>=0?1:-1,A=m*p,x=A>Ca,L=F*f;if(r.add(La(L*m*Na(A),h*G+L*Sa(A))),a+=x?p+m*Ga:p,x^Q>=n^C>=n){var S=_a(Ka(I),Ka(U));$a(S);var R=_a(c,S);$a(R);var X=(x^p>=0?-1:1)*Wa(R[2]);(i>X||i===X&&(S[0]||S[1]))&&(l+=x^p>=0?1:-1)}}return(a<-ba||a<ba&&r<-Ua)^1&l}(c,i);a.length?(B||(s.polygonStart(),B=!0),ol(a,Ql,t,n,s)):t&&(B||(s.polygonStart(),B=!0),s.lineStart(),n(null,null,1,s),s.lineEnd()),B&&(s.polygonEnd(),B=!1),a=c=null},sphere:function(){s.polygonStart(),s.lineStart(),n(null,null,1,s),s.lineEnd(),s.polygonEnd()}};function I(e,n){t(e,n)&&s.point(e,n)}function Q(t,e){r.point(t,e)}function u(){d.point=Q,r.lineStart()}function F(){d.point=I,r.lineEnd()}function h(t,e){l.push([t,e]),g.point(t,e)}function b(){g.lineStart(),l=[]}function U(){h(l[0][0],l[0][1]),g.lineEnd();var t,e,n,i,r=g.clean(),d=o.result(),I=d.length;if(l.pop(),c.push(l),l=null,I)if(1&r){if((e=(n=d[0]).length-1)>0){for(B||(s.polygonStart(),B=!0),s.lineStart(),t=0;t<e;++t)s.point((i=n[t])[0],i[1]);s.lineEnd()}}else I>1&&2&r&&d.push(d.pop().concat(d.shift())),a.push(d.filter(Il))}return d}}function Il(t){return t.length>1}function Ql(t,e){return((t=t.x)[0]<0?t[1]-ya-ba:ya-t[1])-((e=e.x)[0]<0?e[1]-ya-ba:ya-e[1])}tl.invert=tl;var ul=dl((function(){return!0}),(function(t){var e,n=NaN,i=NaN,s=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(c,a){var l=c>0?Ca:-Ca,r=Aa(c-n);Aa(r-Ca)<ba?(t.point(n,i=(i+a)/2>0?ya:-ya),t.point(s,i),t.lineEnd(),t.lineStart(),t.point(l,i),t.point(c,i),e=0):s!==l&&r>=Ca&&(Aa(n-s)<ba&&(n-=s*ba),Aa(c-l)<ba&&(c-=l*ba),i=function(t,e,n,i){var s,c,a=Na(t-n);return Aa(a)>ba?xa((Na(e)*(c=Sa(i))*Na(n)-Na(i)*(s=Sa(e))*Na(t))/(s*c*a)):(e+i)/2}(n,i,c,a),t.point(s,i),t.lineEnd(),t.lineStart(),t.point(l,i),e=0),t.point(n=c,i=a),s=l},lineEnd:function(){t.lineEnd(),n=i=NaN},clean:function(){return 2-e}}}),(function(t,e,n,i){var s;if(null==t)s=n*ya,i.point(-Ca,s),i.point(0,s),i.point(Ca,s),i.point(Ca,0),i.point(Ca,-s),i.point(0,-s),i.point(-Ca,-s),i.point(-Ca,0),i.point(-Ca,s);else if(Aa(t[0]-e[0])>ba){var c=t[0]<e[0]?Ca:-Ca;s=n*c/2,i.point(-c,s),i.point(0,s),i.point(c,s)}else i.point(e[0],e[1])}),[-Ca,-ya]);function Fl(t){var e=Sa(t),n=6*ma,i=e>0,s=Aa(e)>ba;function c(t,n){return Sa(t)*Sa(n)>e}function a(t,n,i){var s=[1,0,0],c=_a(Ka(t),Ka(n)),a=Oa(c,c),l=c[0],r=a-l*l;if(!r)return!i&&t;var o=e*a/r,g=-e*l/r,B=_a(s,c),d=ja(s,o);Pa(d,ja(c,g));var I=B,Q=Oa(d,I),u=Oa(I,I),F=Q*Q-u*(Oa(d,d)-1);if(!(F<0)){var h=Ea(F),b=ja(I,(-Q-h)/u);if(Pa(b,d),b=za(b),!i)return b;var U,C=t[0],y=n[0],f=t[1],G=n[1];y<C&&(U=C,C=y,y=U);var p=y-C,m=Aa(p-Ca)<ba;if(!m&&G<f&&(U=f,f=G,G=U),m||p<ba?m?f+G>0^b[1]<(Aa(b[0]-C)<ba?f:G):f<=b[1]&&b[1]<=G:p>Ca^(C<=b[0]&&b[0]<=y)){var A=ja(I,(-Q+h)/u);return Pa(A,d),[b,za(A)]}}}function l(e,n){var s=i?t:Ca-t,c=0;return e<-s?c|=1:e>s&&(c|=2),n<-s?c|=4:n>s&&(c|=8),c}return dl(c,(function(t){var e,n,r,o,g;return{lineStart:function(){o=r=!1,g=1},point:function(B,d){var I,Q=[B,d],u=c(B,d),F=i?u?0:l(B,d):u?l(B+(B<0?Ca:-Ca),d):0;if(!e&&(o=r=u)&&t.lineStart(),u!==r&&(!(I=a(e,Q))||ll(e,I)||ll(Q,I))&&(Q[2]=1),u!==r)g=0,u?(t.lineStart(),I=a(Q,e),t.point(I[0],I[1])):(I=a(e,Q),t.point(I[0],I[1],2),t.lineEnd()),e=I;else if(s&&e&&i^u){var h;F&n||!(h=a(Q,e,!0))||(g=0,i?(t.lineStart(),t.point(h[0][0],h[0][1]),t.point(h[1][0],h[1][1]),t.lineEnd()):(t.point(h[1][0],h[1][1]),t.lineEnd(),t.lineStart(),t.point(h[0][0],h[0][1],3)))}!u||e&&ll(e,Q)||t.point(Q[0],Q[1]),e=Q,r=u,n=F},lineEnd:function(){r&&t.lineEnd(),e=null},clean:function(){return g|(o&&r)<<1}}}),(function(e,i,s,c){!function(t,e,n,i,s,c){if(n){var a=Sa(e),l=Na(e),r=i*n;null==s?(s=e+i*Ga,c=e-r/2):(s=cl(a,s),c=cl(a,c),(i>0?s<c:s>c)&&(s+=i*Ga));for(var o,g=s;i>0?g>c:g<c;g-=r)o=za([a,-l*Sa(g),-l*Na(g)]),t.point(o[0],o[1])}}(c,t,n,s,e,i)}),i?[0,-t]:[-Ca,t-Ca])}var hl=1e9,bl=-hl;function Ul(t,e,n,i){function s(s,c){return t<=s&&s<=n&&e<=c&&c<=i}function c(s,c,l,o){var g=0,B=0;if(null==s||(g=a(s,l))!==(B=a(c,l))||r(s,c)<0^l>0)do{o.point(0===g||3===g?t:n,g>1?i:e)}while((g=(g+l+4)%4)!==B);else o.point(c[0],c[1])}function a(i,s){return Aa(i[0]-t)<ba?s>0?0:3:Aa(i[0]-n)<ba?s>0?2:1:Aa(i[1]-e)<ba?s>0?1:0:s>0?3:2}function l(t,e){return r(t.x,e.x)}function r(t,e){var n=a(t,1),i=a(e,1);return n!==i?n-i:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(a){var r,o,g,B,d,I,Q,u,F,h,b,U=a,C=al(),y={point:f,lineStart:function(){y.point=G,o&&o.push(g=[]);h=!0,F=!1,Q=u=NaN},lineEnd:function(){r&&(G(B,d),I&&F&&C.rejoin(),r.push(C.result()));y.point=f,F&&U.lineEnd()},polygonStart:function(){U=C,r=[],o=[],b=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,s=o.length;n<s;++n)for(var c,a,l=o[n],r=1,g=l.length,B=l[0],d=B[0],I=B[1];r<g;++r)c=d,a=I,d=(B=l[r])[0],I=B[1],a<=i?I>i&&(d-c)*(i-a)>(I-a)*(t-c)&&++e:I<=i&&(d-c)*(i-a)<(I-a)*(t-c)&&--e;return e}(),n=b&&e,s=(r=re(r)).length;(n||s)&&(a.polygonStart(),n&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),s&&ol(r,l,e,c,a),a.polygonEnd());U=a,r=o=g=null}};function f(t,e){s(t,e)&&U.point(t,e)}function G(c,a){var l=s(c,a);if(o&&g.push([c,a]),h)B=c,d=a,I=l,h=!1,l&&(U.lineStart(),U.point(c,a));else if(l&&F)U.point(c,a);else{var r=[Q=Math.max(bl,Math.min(hl,Q)),u=Math.max(bl,Math.min(hl,u))],C=[c=Math.max(bl,Math.min(hl,c)),a=Math.max(bl,Math.min(hl,a))];!function(t,e,n,i,s,c){var a,l=t[0],r=t[1],o=0,g=1,B=e[0]-l,d=e[1]-r;if(a=n-l,B||!(a>0)){if(a/=B,B<0){if(a<o)return;a<g&&(g=a)}else if(B>0){if(a>g)return;a>o&&(o=a)}if(a=s-l,B||!(a<0)){if(a/=B,B<0){if(a>g)return;a>o&&(o=a)}else if(B>0){if(a<o)return;a<g&&(g=a)}if(a=i-r,d||!(a>0)){if(a/=d,d<0){if(a<o)return;a<g&&(g=a)}else if(d>0){if(a>g)return;a>o&&(o=a)}if(a=c-r,d||!(a<0)){if(a/=d,d<0){if(a>g)return;a>o&&(o=a)}else if(d>0){if(a<o)return;a<g&&(g=a)}return o>0&&(t[0]=l+o*B,t[1]=r+o*d),g<1&&(e[0]=l+g*B,e[1]=r+g*d),!0}}}}}(r,C,t,e,n,i)?l&&(U.lineStart(),U.point(c,a),b=!1):(F||(U.lineStart(),U.point(r[0],r[1])),U.point(C[0],C[1]),l||U.lineEnd(),b=!1)}Q=c,u=a,F=l}return y}}var Cl,yl,fl,Gl,pl=t=>t,ml=new mt,Al=new mt,xl={point:Ha,lineStart:Ha,lineEnd:Ha,polygonStart:function(){xl.lineStart=Ll,xl.lineEnd=Xl},polygonEnd:function(){xl.lineStart=xl.lineEnd=xl.point=Ha,ml.add(Aa(Al)),Al=new mt},result:function(){var t=ml/2;return ml=new mt,t}};function Ll(){xl.point=Sl}function Sl(t,e){xl.point=Rl,Cl=fl=t,yl=Gl=e}function Rl(t,e){Al.add(Gl*t-fl*e),fl=t,Gl=e}function Xl(){Rl(Cl,yl)}var vl=xl,Nl=1/0,Zl=Nl,El=-Nl,Vl=El,wl={point:function(t,e){t<Nl&&(Nl=t);t>El&&(El=t);e<Zl&&(Zl=e);e>Vl&&(Vl=e)},lineStart:Ha,lineEnd:Ha,polygonStart:Ha,polygonEnd:Ha,result:function(){var t=[[Nl,Zl],[El,Vl]];return El=Vl=-(Zl=Nl=1/0),t}};var Wl,Hl,Dl,Yl,kl=wl,Jl=0,Ml=0,Tl=0,zl=0,Kl=0,Ol=0,_l=0,Pl=0,jl=0,$l={point:ql,lineStart:tr,lineEnd:ir,polygonStart:function(){$l.lineStart=sr,$l.lineEnd=cr},polygonEnd:function(){$l.point=ql,$l.lineStart=tr,$l.lineEnd=ir},result:function(){var t=jl?[_l/jl,Pl/jl]:Ol?[zl/Ol,Kl/Ol]:Tl?[Jl/Tl,Ml/Tl]:[NaN,NaN];return Jl=Ml=Tl=zl=Kl=Ol=_l=Pl=jl=0,t}};function ql(t,e){Jl+=t,Ml+=e,++Tl}function tr(){$l.point=er}function er(t,e){$l.point=nr,ql(Dl=t,Yl=e)}function nr(t,e){var n=t-Dl,i=e-Yl,s=Ea(n*n+i*i);zl+=s*(Dl+t)/2,Kl+=s*(Yl+e)/2,Ol+=s,ql(Dl=t,Yl=e)}function ir(){$l.point=ql}function sr(){$l.point=ar}function cr(){lr(Wl,Hl)}function ar(t,e){$l.point=lr,ql(Wl=Dl=t,Hl=Yl=e)}function lr(t,e){var n=t-Dl,i=e-Yl,s=Ea(n*n+i*i);zl+=s*(Dl+t)/2,Kl+=s*(Yl+e)/2,Ol+=s,_l+=(s=Yl*t-Dl*e)*(Dl+t),Pl+=s*(Yl+e),jl+=3*s,ql(Dl=t,Yl=e)}var rr=$l;function or(t){this._context=t}or.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,Ga)}},result:Ha};var gr,Br,dr,Ir,Qr,ur=new mt,Fr={point:Ha,lineStart:function(){Fr.point=hr},lineEnd:function(){gr&&br(Br,dr),Fr.point=Ha},polygonStart:function(){gr=!0},polygonEnd:function(){gr=null},result:function(){var t=+ur;return ur=new mt,t}};function hr(t,e){Fr.point=br,Br=Ir=t,dr=Qr=e}function br(t,e){Ir-=t,Qr-=e,ur.add(Ea(Ir*Ir+Qr*Qr)),Ir=t,Qr=e}var Ur=Fr;let Cr,yr,fr,Gr;class pr{constructor(t){this._append=null==t?mr:function(t){const e=Math.floor(t);if(!(e>=0))throw new RangeError(`invalid digits: ${t}`);if(e>15)return mr;if(e!==Cr){const t=10**e;Cr=e,yr=function(e){let n=1;this._+=e[0];for(const i=e.length;n<i;++n)this._+=Math.round(arguments[n]*t)/t+e[n]}}return yr}(t),this._radius=4.5,this._=""}pointRadius(t){return this._radius=+t,this}polygonStart(){this._line=0}polygonEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){0===this._line&&(this._+="Z"),this._point=NaN}point(t,e){switch(this._point){case 0:this._append`M${t},${e}`,this._point=1;break;case 1:this._append`L${t},${e}`;break;default:if(this._append`M${t},${e}`,this._radius!==fr||this._append!==yr){const t=this._radius,e=this._;this._="",this._append`m0,${t}a${t},${t} 0 1,1 0,${-2*t}a${t},${t} 0 1,1 0,${2*t}z`,fr=t,yr=this._append,Gr=this._,this._=e}this._+=Gr}}result(){const t=this._;return this._="",t.length?t:null}}function mr(t){let e=1;this._+=t[0];for(const n=t.length;e<n;++e)this._+=arguments[e]+t[e]}function Ar(t,e){let n,i,s=3,c=4.5;function a(t){return t&&("function"==typeof c&&i.pointRadius(+c.apply(this,arguments)),Ta(t,n(i))),i.result()}return a.area=function(t){return Ta(t,n(vl)),vl.result()},a.measure=function(t){return Ta(t,n(Ur)),Ur.result()},a.bounds=function(t){return Ta(t,n(kl)),kl.result()},a.centroid=function(t){return Ta(t,n(rr)),rr.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,pl):(t=e).stream,a):t},a.context=function(t){return arguments.length?(i=null==t?(e=null,new pr(s)):new or(e=t),"function"!=typeof c&&i.pointRadius(c),a):e},a.pointRadius=function(t){return arguments.length?(c="function"==typeof t?t:(i.pointRadius(+t),+t),a):c},a.digits=function(t){if(!arguments.length)return s;if(null==t)s=null;else{const e=Math.floor(t);if(!(e>=0))throw new RangeError(`invalid digits: ${t}`);s=e}return null===e&&(i=new pr(s)),a},a.projection(t).digits(s).context(e)}function xr(t){return{stream:Lr(t)}}function Lr(t){return function(e){var n=new Sr;for(var i in t)n[i]=t[i];return n.stream=e,n}}function Sr(){}function Rr(t,e,n){var i=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=i&&t.clipExtent(null),Ta(n,t.stream(kl)),e(kl.result()),null!=i&&t.clipExtent(i),t}function Xr(t,e,n){return Rr(t,(function(n){var i=e[1][0]-e[0][0],s=e[1][1]-e[0][1],c=Math.min(i/(n[1][0]-n[0][0]),s/(n[1][1]-n[0][1])),a=+e[0][0]+(i-c*(n[1][0]+n[0][0]))/2,l=+e[0][1]+(s-c*(n[1][1]+n[0][1]))/2;t.scale(150*c).translate([a,l])}),n)}function vr(t,e,n){return Xr(t,[[0,0],e],n)}function Nr(t,e,n){return Rr(t,(function(n){var i=+e,s=i/(n[1][0]-n[0][0]),c=(i-s*(n[1][0]+n[0][0]))/2,a=-s*n[0][1];t.scale(150*s).translate([c,a])}),n)}function Zr(t,e,n){return Rr(t,(function(n){var i=+e,s=i/(n[1][1]-n[0][1]),c=-s*n[0][0],a=(i-s*(n[1][1]+n[0][1]))/2;t.scale(150*s).translate([c,a])}),n)}Sr.prototype={constructor:Sr,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var Er=16,Vr=Sa(30*ma);function wr(t,e){return+e?function(t,e){function n(i,s,c,a,l,r,o,g,B,d,I,Q,u,F){var h=o-i,b=g-s,U=h*h+b*b;if(U>4*e&&u--){var C=a+d,y=l+I,f=r+Q,G=Ea(C*C+y*y+f*f),p=Wa(f/=G),m=Aa(Aa(f)-1)<ba||Aa(c-B)<ba?(c+B)/2:La(y,C),A=t(m,p),x=A[0],L=A[1],S=x-i,R=L-s,X=b*S-h*R;(X*X/U>e||Aa((h*S+b*R)/U-.5)>.3||a*d+l*I+r*Q<Vr)&&(n(i,s,c,a,l,r,x,L,m,C/=G,y/=G,f,u,F),F.point(x,L),n(x,L,m,C,y,f,o,g,B,d,I,Q,u,F))}}return function(e){var i,s,c,a,l,r,o,g,B,d,I,Q,u={point:F,lineStart:h,lineEnd:U,polygonStart:function(){e.polygonStart(),u.lineStart=C},polygonEnd:function(){e.polygonEnd(),u.lineStart=h}};function F(n,i){n=t(n,i),e.point(n[0],n[1])}function h(){g=NaN,u.point=b,e.lineStart()}function b(i,s){var c=Ka([i,s]),a=t(i,s);n(g,B,o,d,I,Q,g=a[0],B=a[1],o=i,d=c[0],I=c[1],Q=c[2],Er,e),e.point(g,B)}function U(){u.point=F,e.lineEnd()}function C(){h(),u.point=y,u.lineEnd=f}function y(t,e){b(i=t,e),s=g,c=B,a=d,l=I,r=Q,u.point=b}function f(){n(g,B,o,d,I,Q,s,c,i,a,l,r,Er,e),u.lineEnd=U,U()}return u}}(t,e):function(t){return Lr({point:function(e,n){e=t(e,n),this.stream.point(e[0],e[1])}})}(t)}var Wr=Lr({point:function(t,e){this.stream.point(t*ma,e*ma)}});function Hr(t,e,n,i,s,c){if(!c)return function(t,e,n,i,s){function c(c,a){return[e+t*(c*=i),n-t*(a*=s)]}return c.invert=function(c,a){return[(c-e)/t*i,(n-a)/t*s]},c}(t,e,n,i,s);var a=Sa(c),l=Na(c),r=a*t,o=l*t,g=a/t,B=l/t,d=(l*n-a*e)/t,I=(l*e+a*n)/t;function Q(t,c){return[r*(t*=i)-o*(c*=s)+e,n-o*t-r*c]}return Q.invert=function(t,e){return[i*(g*t-B*e+d),s*(I-B*t-g*e)]},Q}function Dr(t){return Yr((function(){return t}))()}function Yr(t){var e,n,i,s,c,a,l,r,o,g,B=150,d=480,I=250,Q=0,u=0,F=0,h=0,b=0,U=0,C=1,y=1,f=null,G=ul,p=null,m=pl,A=.5;function x(t){return r(t[0]*ma,t[1]*ma)}function L(t){return(t=r.invert(t[0],t[1]))&&[t[0]*pa,t[1]*pa]}function S(){var t=Hr(B,0,0,C,y,U).apply(null,e(Q,u)),i=Hr(B,d-t[0],I-t[1],C,y,U);return n=el(F,h,b),l=qa(e,i),r=qa(n,l),a=wr(l,A),R()}function R(){return o=g=null,x}return x.stream=function(t){return o&&g===t?o:o=Wr(function(t){return Lr({point:function(e,n){var i=t(e,n);return this.stream.point(i[0],i[1])}})}(n)(G(a(m(g=t)))))},x.preclip=function(t){return arguments.length?(G=t,f=void 0,R()):G},x.postclip=function(t){return arguments.length?(m=t,p=i=s=c=null,R()):m},x.clipAngle=function(t){return arguments.length?(G=+t?Fl(f=t*ma):(f=null,ul),R()):f*pa},x.clipExtent=function(t){return arguments.length?(m=null==t?(p=i=s=c=null,pl):Ul(p=+t[0][0],i=+t[0][1],s=+t[1][0],c=+t[1][1]),R()):null==p?null:[[p,i],[s,c]]},x.scale=function(t){return arguments.length?(B=+t,S()):B},x.translate=function(t){return arguments.length?(d=+t[0],I=+t[1],S()):[d,I]},x.center=function(t){return arguments.length?(Q=t[0]%360*ma,u=t[1]%360*ma,S()):[Q*pa,u*pa]},x.rotate=function(t){return arguments.length?(F=t[0]%360*ma,h=t[1]%360*ma,b=t.length>2?t[2]%360*ma:0,S()):[F*pa,h*pa,b*pa]},x.angle=function(t){return arguments.length?(U=t%360*ma,S()):U*pa},x.reflectX=function(t){return arguments.length?(C=t?-1:1,S()):C<0},x.reflectY=function(t){return arguments.length?(y=t?-1:1,S()):y<0},x.precision=function(t){return arguments.length?(a=wr(l,A=t*t),R()):Ea(A)},x.fitExtent=function(t,e){return Xr(x,t,e)},x.fitSize=function(t,e){return vr(x,t,e)},x.fitWidth=function(t,e){return Nr(x,t,e)},x.fitHeight=function(t,e){return Zr(x,t,e)},function(){return e=t.apply(this,arguments),x.invert=e.invert&&L,S()}}function kr(t){var e=0,n=Ca/3,i=Yr(t),s=i(e,n);return s.parallels=function(t){return arguments.length?i(e=t[0]*ma,n=t[1]*ma):[e*pa,n*pa]},s}function Jr(t,e){var n=Na(t),i=(n+Na(e))/2;if(Aa(i)<ba)return function(t){var e=Sa(t);function n(t,n){return[t*e,Na(n)/e]}return n.invert=function(t,n){return[t/e,Wa(n*e)]},n}(t);var s=1+n*(2*i-n),c=Ea(s)/i;function a(t,e){var n=Ea(s-2*i*Na(e))/i;return[n*Na(t*=i),c-n*Sa(t)]}return a.invert=function(t,e){var n=c-e,a=La(t,Aa(n))*Za(n);return n*i<0&&(a-=Ca*Za(t)*Za(n)),[a/i,Wa((s-(t*t+n*n)*i*i)/(2*i))]},a}function Mr(){return kr(Jr).scale(155.424).center([0,33.6442])}function Tr(){return Mr().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function zr(){var t,e,n,i,s,c,a=Tr(),l=Mr().rotate([154,0]).center([-2,58.5]).parallels([55,65]),r=Mr().rotate([157,0]).center([-3,19.9]).parallels([8,18]),o={point:function(t,e){c=[t,e]}};function g(t){var e=t[0],a=t[1];return c=null,n.point(e,a),c||(i.point(e,a),c)||(s.point(e,a),c)}function B(){return t=e=null,g}return g.invert=function(t){var e=a.scale(),n=a.translate(),i=(t[0]-n[0])/e,s=(t[1]-n[1])/e;return(s>=.12&&s<.234&&i>=-.425&&i<-.214?l:s>=.166&&s<.234&&i>=-.214&&i<-.115?r:a).invert(t)},g.stream=function(n){return t&&e===n?t:t=function(t){var e=t.length;return{point:function(n,i){for(var s=-1;++s<e;)t[s].point(n,i)},sphere:function(){for(var n=-1;++n<e;)t[n].sphere()},lineStart:function(){for(var n=-1;++n<e;)t[n].lineStart()},lineEnd:function(){for(var n=-1;++n<e;)t[n].lineEnd()},polygonStart:function(){for(var n=-1;++n<e;)t[n].polygonStart()},polygonEnd:function(){for(var n=-1;++n<e;)t[n].polygonEnd()}}}([a.stream(e=n),l.stream(n),r.stream(n)])},g.precision=function(t){return arguments.length?(a.precision(t),l.precision(t),r.precision(t),B()):a.precision()},g.scale=function(t){return arguments.length?(a.scale(t),l.scale(.35*t),r.scale(t),g.translate(a.translate())):a.scale()},g.translate=function(t){if(!arguments.length)return a.translate();var e=a.scale(),c=+t[0],g=+t[1];return n=a.translate(t).clipExtent([[c-.455*e,g-.238*e],[c+.455*e,g+.238*e]]).stream(o),i=l.translate([c-.307*e,g+.201*e]).clipExtent([[c-.425*e+ba,g+.12*e+ba],[c-.214*e-ba,g+.234*e-ba]]).stream(o),s=r.translate([c-.205*e,g+.212*e]).clipExtent([[c-.214*e+ba,g+.166*e+ba],[c-.115*e-ba,g+.234*e-ba]]).stream(o),B()},g.fitExtent=function(t,e){return Xr(g,t,e)},g.fitSize=function(t,e){return vr(g,t,e)},g.fitWidth=function(t,e){return Nr(g,t,e)},g.fitHeight=function(t,e){return Zr(g,t,e)},g.scale(1070)}function Kr(t){return function(e,n){var i=Sa(e),s=Sa(n),c=t(i*s);return c===1/0?[2,0]:[c*s*Na(e),c*Na(n)]}}function Or(t){return function(e,n){var i=Ea(e*e+n*n),s=t(i),c=Na(s),a=Sa(s);return[La(e*c,i*a),Wa(i&&n*c/i)]}}var _r=Kr((function(t){return Ea(2/(1+t))}));function Pr(){return Dr(_r).scale(124.75).clipAngle(179.999)}_r.invert=Or((function(t){return 2*Wa(t/2)}));var jr=Kr((function(t){return(t=wa(t))&&t/Na(t)}));function $r(){return Dr(jr).scale(79.4188).clipAngle(179.999)}function qr(t,e){return[t,Xa(Va((ya+e)/2))]}function to(){return eo(qr).scale(961/Ga)}function eo(t){var e,n,i,s=Dr(t),c=s.center,a=s.scale,l=s.translate,r=s.clipExtent,o=null;function g(){var c=Ca*a(),l=s(function(t){function e(e){return(e=t(e[0]*ma,e[1]*ma))[0]*=pa,e[1]*=pa,e}return t=el(t[0]*ma,t[1]*ma,t.length>2?t[2]*ma:0),e.invert=function(e){return(e=t.invert(e[0]*ma,e[1]*ma))[0]*=pa,e[1]*=pa,e},e}(s.rotate()).invert([0,0]));return r(null==o?[[l[0]-c,l[1]-c],[l[0]+c,l[1]+c]]:t===qr?[[Math.max(l[0]-c,o),e],[Math.min(l[0]+c,n),i]]:[[o,Math.max(l[1]-c,e)],[n,Math.min(l[1]+c,i)]])}return s.scale=function(t){return arguments.length?(a(t),g()):a()},s.translate=function(t){return arguments.length?(l(t),g()):l()},s.center=function(t){return arguments.length?(c(t),g()):c()},s.clipExtent=function(t){return arguments.length?(null==t?o=e=n=i=null:(o=+t[0][0],e=+t[0][1],n=+t[1][0],i=+t[1][1]),g()):null==o?null:[[o,e],[n,i]]},g()}function no(t){return Va((ya+t)/2)}function io(t,e){var n=Sa(t),i=t===e?Na(t):Xa(n/Sa(e))/Xa(no(e)/no(t)),s=n*va(no(t),i)/i;if(!i)return qr;function c(t,e){s>0?e<-ya+ba&&(e=-ya+ba):e>ya-ba&&(e=ya-ba);var n=s/va(no(e),i);return[n*Na(i*t),s-n*Sa(i*t)]}return c.invert=function(t,e){var n=s-e,c=Za(i)*Ea(t*t+n*n),a=La(t,Aa(n))*Za(n);return n*i<0&&(a-=Ca*Za(t)*Za(n)),[a/i,2*xa(va(s/c,1/i))-ya]},c}function so(){return kr(io).scale(109.5).parallels([30,30])}function co(t,e){return[t,e]}function ao(){return Dr(co).scale(152.63)}function lo(t,e){var n=Sa(t),i=t===e?Na(t):(n-Sa(e))/(e-t),s=n/i+t;if(Aa(i)<ba)return co;function c(t,e){var n=s-e,c=i*t;return[n*Na(c),s-n*Sa(c)]}return c.invert=function(t,e){var n=s-e,c=La(t,Aa(n))*Za(n);return n*i<0&&(c-=Ca*Za(t)*Za(n)),[c/i,s-Za(i)*Ea(t*t+n*n)]},c}function ro(){return kr(lo).scale(131.154).center([0,13.9389])}jr.invert=Or((function(t){return t})),qr.invert=function(t,e){return[t,2*xa(Ra(e))-ya]},co.invert=co;var oo=1.340264,go=-.081106,Bo=893e-6,Io=.003796,Qo=Ea(3)/2;function uo(t,e){var n=Wa(Qo*Na(e)),i=n*n,s=i*i*i;return[t*Sa(n)/(Qo*(oo+3*go*i+s*(7*Bo+9*Io*i))),n*(oo+go*i+s*(Bo+Io*i))]}function Fo(){return Dr(uo).scale(177.158)}function ho(t,e){var n=Sa(e),i=Sa(t)*n;return[n*Na(t)/i,Na(e)/i]}function bo(){return Dr(ho).scale(144.049).clipAngle(60)}function Uo(t,e){return[Sa(e)*Na(t),Na(e)]}function Co(){return Dr(Uo).scale(249.5).clipAngle(90+ba)}function yo(t,e){var n=Sa(e),i=1+Sa(t)*n;return[n*Na(t)/i,Na(e)/i]}function fo(){return Dr(yo).scale(250).clipAngle(142)}function Go(t,e){return[Xa(Va((ya+e)/2)),-t]}function po(){var t=eo(Go),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}function mo(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function Ao(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}uo.invert=function(t,e){for(var n,i=e,s=i*i,c=s*s*s,a=0;a<12&&(c=(s=(i-=n=(i*(oo+go*s+c*(Bo+Io*s))-e)/(oo+3*go*s+c*(7*Bo+9*Io*s)))*i)*s*s,!(Aa(n)<Ua));++a);return[Qo*t*(oo+3*go*s+c*(7*Bo+9*Io*s))/Sa(i),Wa(Na(i)/Qo)]},ho.invert=Or(xa),Uo.invert=Or(Wa),yo.invert=Or((function(t){return 2*xa(t)})),Go.invert=function(t,e){return[-e,2*xa(Ra(t))-ya]};const xo=Symbol("implicit");function Lo(){var t=new At,e=[],n=[],i=xo;function s(s){let c=t.get(s);if(void 0===c){if(i!==xo)return i;t.set(s,c=e.push(s)-1)}return n[c%n.length]}return s.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new At;for(const i of n)t.has(i)||t.set(i,e.push(i)-1);return s},s.range=function(t){return arguments.length?(n=Array.from(t),s):n.slice()},s.unknown=function(t){return arguments.length?(i=t,s):i},s.copy=function(){return Lo(e,n).unknown(i)},mo.apply(s,arguments),s}function So(){var t,e,n=Lo().unknown(void 0),i=n.domain,s=n.range,c=0,a=1,l=!1,r=0,o=0,g=.5;function B(){var n=i().length,B=a<c,d=B?a:c,I=B?c:a;t=(I-d)/Math.max(1,n-r+2*o),l&&(t=Math.floor(t)),d+=(I-d-t*(n-r))*g,e=t*(1-r),l&&(d=Math.round(d),e=Math.round(e));var Q=Be(n).map((function(e){return d+t*e}));return s(B?Q.reverse():Q)}return delete n.unknown,n.domain=function(t){return arguments.length?(i(t),B()):i()},n.range=function(t){return arguments.length?([c,a]=t,c=+c,a=+a,B()):[c,a]},n.rangeRound=function(t){return[c,a]=t,c=+c,a=+a,l=!0,B()},n.bandwidth=function(){return e},n.step=function(){return t},n.round=function(t){return arguments.length?(l=!!t,B()):l},n.padding=function(t){return arguments.length?(r=Math.min(1,o=+t),B()):r},n.paddingInner=function(t){return arguments.length?(r=Math.min(1,t),B()):r},n.paddingOuter=function(t){return arguments.length?(o=+t,B()):o},n.align=function(t){return arguments.length?(g=Math.max(0,Math.min(1,t)),B()):g},n.copy=function(){return So(i(),[c,a]).round(l).paddingInner(r).paddingOuter(o).align(g)},mo.apply(B(),arguments)}function Ro(t){var e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,delete t.paddingOuter,t.copy=function(){return Ro(e())},t}function Xo(){return Ro(So.apply(null,arguments).paddingInner(1))}function vo(t){return+t}var No=[0,1];function Zo(t){return t}function Eo(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:function(t){return function(){return t}}(isNaN(e)?NaN:.5)}function Vo(t,e,n){var i=t[0],s=t[1],c=e[0],a=e[1];return s<i?(i=Eo(s,i),c=n(a,c)):(i=Eo(i,s),c=n(c,a)),function(t){return c(i(t))}}function wo(t,e,n){var i=Math.min(t.length,e.length)-1,s=new Array(i),c=new Array(i),a=-1;for(t[i]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<i;)s[a]=Eo(t[a],t[a+1]),c[a]=n(e[a],e[a+1]);return function(e){var n=Ft(t,e,1,i)-1;return c[n](s[n](e))}}function Wo(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Ho(){var t,e,n,i,s,c,a=No,l=No,r=Xs,o=Zo;function g(){var t=Math.min(a.length,l.length);return o!==Zo&&(o=function(t,e){var n;return t>e&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(a[0],a[t-1])),i=t>2?wo:Vo,s=c=null,B}function B(e){return null==e||isNaN(e=+e)?n:(s||(s=i(a.map(t),l,r)))(t(o(e)))}return B.invert=function(n){return o(e((c||(c=i(l,a.map(t),As)))(n)))},B.domain=function(t){return arguments.length?(a=Array.from(t,vo),g()):a.slice()},B.range=function(t){return arguments.length?(l=Array.from(t),g()):l.slice()},B.rangeRound=function(t){return l=Array.from(t),r=vs,g()},B.clamp=function(t){return arguments.length?(o=!!t||Zo,g()):o!==Zo},B.interpolate=function(t){return arguments.length?(r=t,g()):r},B.unknown=function(t){return arguments.length?(n=t,B):n},function(n,i){return t=n,e=i,g()}}function Do(){return Ho()(Zo,Zo)}function Yo(t,e,n,i){var s,c=Kt(t,e,n);switch((i=la(null==i?",f":i)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=i.precision||isNaN(s=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(sa(e)/3)))-sa(Math.abs(t)))}(c,a))||(i.precision=s),Qa(i,a);case"":case"e":case"g":case"p":case"r":null!=i.precision||isNaN(s=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,sa(e)-sa(t))+1}(c,Math.max(Math.abs(t),Math.abs(e))))||(i.precision=s-("e"===i.type));break;case"f":case"%":null!=i.precision||isNaN(s=function(t){return Math.max(0,-sa(Math.abs(t)))}(c))||(i.precision=s-2*("%"===i.type))}return Ia(i)}function ko(t){var e=t.domain;return t.ticks=function(t){var n=e();return Tt(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var i=e();return Yo(i[0],i[i.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var i,s,c=e(),a=0,l=c.length-1,r=c[a],o=c[l],g=10;for(o<r&&(s=r,r=o,o=s,s=a,a=l,l=s);g-- >0;){if((s=zt(r,o,n))===i)return c[a]=r,c[l]=o,e(c);if(s>0)r=Math.floor(r/s)*s,o=Math.ceil(o/s)*s;else{if(!(s<0))break;r=Math.ceil(r*s)/s,o=Math.floor(o*s)/s}i=s}return t},t}function Jo(){var t=Do();return t.copy=function(){return Wo(t,Jo())},mo.apply(t,arguments),ko(t)}function Mo(t){var e;function n(t){return null==t||isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Array.from(e,vo),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return Mo(t).unknown(e)},t=arguments.length?Array.from(t,vo):[0,1],ko(n)}function To(t,e){var n,i=0,s=(t=t.slice()).length-1,c=t[i],a=t[s];return a<c&&(n=i,i=s,s=n,n=c,c=a,a=n),t[i]=e.floor(c),t[s]=e.ceil(a),t}function zo(t){return Math.log(t)}function Ko(t){return Math.exp(t)}function Oo(t){return-Math.log(-t)}function _o(t){return-Math.exp(-t)}function Po(t){return isFinite(t)?+("1e"+t):t<0?0:t}function jo(t){return(e,n)=>-t(-e,n)}function $o(t){const e=t(zo,Ko),n=e.domain;let i,s,c=10;function a(){return i=function(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}(c),s=function(t){return 10===t?Po:t===Math.E?Math.exp:e=>Math.pow(t,e)}(c),n()[0]<0?(i=jo(i),s=jo(s),t(Oo,_o)):t(zo,Ko),e}return e.base=function(t){return arguments.length?(c=+t,a()):c},e.domain=function(t){return arguments.length?(n(t),a()):n()},e.ticks=t=>{const e=n();let a=e[0],l=e[e.length-1];const r=l<a;r&&([a,l]=[l,a]);let o,g,B=i(a),d=i(l);const I=null==t?10:+t;let Q=[];if(!(c%1)&&d-B<I){if(B=Math.floor(B),d=Math.ceil(d),a>0){for(;B<=d;++B)for(o=1;o<c;++o)if(g=B<0?o/s(-B):o*s(B),!(g<a)){if(g>l)break;Q.push(g)}}else for(;B<=d;++B)for(o=c-1;o>=1;--o)if(g=B>0?o/s(-B):o*s(B),!(g<a)){if(g>l)break;Q.push(g)}2*Q.length<I&&(Q=Tt(a,l,I))}else Q=Tt(B,d,Math.min(d-B,I)).map(s);return r?Q.reverse():Q},e.tickFormat=(t,n)=>{if(null==t&&(t=10),null==n&&(n=10===c?"s":","),"function"!=typeof n&&(c%1||null!=(n=la(n)).precision||(n.trim=!0),n=Ia(n)),t===1/0)return n;const a=Math.max(1,c*t/e.ticks().length);return t=>{let e=t/s(Math.round(i(t)));return e*c<c-.5&&(e*=c),e<=a?n(t):""}},e.nice=()=>n(To(n(),{floor:t=>s(Math.floor(i(t))),ceil:t=>s(Math.ceil(i(t)))})),e}function qo(){const t=$o(Ho()).domain([1,10]);return t.copy=()=>Wo(t,qo()).base(t.base()),mo.apply(t,arguments),t}function tg(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function eg(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function ng(t){var e=1,n=t(tg(e),eg(e));return n.constant=function(n){return arguments.length?t(tg(e=+n),eg(e)):e},ko(n)}function ig(){var t=ng(Ho());return t.copy=function(){return Wo(t,ig()).constant(t.constant())},mo.apply(t,arguments)}function sg(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function cg(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function ag(t){return t<0?-t*t:t*t}function lg(t){var e=t(Zo,Zo),n=1;return e.exponent=function(e){return arguments.length?1===(n=+e)?t(Zo,Zo):.5===n?t(cg,ag):t(sg(n),sg(1/n)):n},ko(e)}function rg(){var t=lg(Ho());return t.copy=function(){return Wo(t,rg()).exponent(t.exponent())},mo.apply(t,arguments),t}function og(){var t,e=[],n=[],i=[];function s(){var t=0,s=Math.max(1,n.length);for(i=new Array(s-1);++t<s;)i[t-1]=ie(e,t/s);return c}function c(e){return null==e||isNaN(e=+e)?t:n[Ft(i,e)]}return c.invertExtent=function(t){var s=n.indexOf(t);return s<0?[NaN,NaN]:[s>0?i[s-1]:e[0],s<i.length?i[s]:e[e.length-1]]},c.domain=function(t){if(!arguments.length)return e.slice();e=[];for(let n of t)null==n||isNaN(n=+n)||e.push(n);return e.sort(gt),s()},c.range=function(t){return arguments.length?(n=Array.from(t),s()):n.slice()},c.unknown=function(e){return arguments.length?(t=e,c):t},c.quantiles=function(){return i.slice()},c.copy=function(){return og().domain(e).range(n).unknown(t)},mo.apply(c,arguments)}function gg(){var t,e=[.5],n=[0,1],i=1;function s(s){return null!=s&&s<=s?n[Ft(e,s,0,i)]:t}return s.domain=function(t){return arguments.length?(e=Array.from(t),i=Math.min(e.length,n.length-1),s):e.slice()},s.range=function(t){return arguments.length?(n=Array.from(t),i=Math.min(e.length,n.length-1),s):n.slice()},s.invertExtent=function(t){var i=n.indexOf(t);return[e[i-1],e[i]]},s.unknown=function(e){return arguments.length?(t=e,s):t},s.copy=function(){return gg().domain(e).range(n).unknown(t)},mo.apply(s,arguments)}const Bg=new Date,dg=new Date;function Ig(t,e,n,i){function s(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return s.floor=e=>(t(e=new Date(+e)),e),s.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),s.round=t=>{const e=s(t),n=s.ceil(t);return t-e<n-t?e:n},s.offset=(t,n)=>(e(t=new Date(+t),null==n?1:Math.floor(n)),t),s.range=(n,i,c)=>{const a=[];if(n=s.ceil(n),c=null==c?1:Math.floor(c),!(n<i&&c>0))return a;let l;do{a.push(l=new Date(+n)),e(n,c),t(n)}while(l<n&&n<i);return a},s.filter=n=>Ig((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,i)=>{if(t>=t)if(i<0)for(;++i<=0;)for(;e(t,-1),!n(t););else for(;--i>=0;)for(;e(t,1),!n(t););})),n&&(s.count=(e,i)=>(Bg.setTime(+e),dg.setTime(+i),t(Bg),t(dg),Math.floor(n(Bg,dg))),s.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?s.filter(i?e=>i(e)%t==0:e=>s.count(0,e)%t==0):s:null)),s}const Qg=Ig((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Qg.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Ig((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):Qg:null),Qg.range;const ug=1e3,Fg=6e4,hg=36e5,bg=864e5,Ug=6048e5,Cg=2592e6,yg=31536e6,fg=Ig((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*ug)}),((t,e)=>(e-t)/ug),(t=>t.getUTCSeconds()));fg.range;const Gg=Ig((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ug)}),((t,e)=>{t.setTime(+t+e*Fg)}),((t,e)=>(e-t)/Fg),(t=>t.getMinutes()));Gg.range;const pg=Ig((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*Fg)}),((t,e)=>(e-t)/Fg),(t=>t.getUTCMinutes()));pg.range;const mg=Ig((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ug-t.getMinutes()*Fg)}),((t,e)=>{t.setTime(+t+e*hg)}),((t,e)=>(e-t)/hg),(t=>t.getHours()));mg.range;const Ag=Ig((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*hg)}),((t,e)=>(e-t)/hg),(t=>t.getUTCHours()));Ag.range;const xg=Ig((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Fg)/bg),(t=>t.getDate()-1));xg.range;const Lg=Ig((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bg),(t=>t.getUTCDate()-1));Lg.range;const Sg=Ig((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bg),(t=>Math.floor(t/bg)));function Rg(t){return Ig((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Fg)/Ug))}Sg.range;const Xg=Rg(0),vg=Rg(1),Ng=Rg(2),Zg=Rg(3),Eg=Rg(4),Vg=Rg(5),wg=Rg(6);function Wg(t){return Ig((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/Ug))}Xg.range,vg.range,Ng.range,Zg.range,Eg.range,Vg.range,wg.range;const Hg=Wg(0),Dg=Wg(1),Yg=Wg(2),kg=Wg(3),Jg=Wg(4),Mg=Wg(5),Tg=Wg(6);Hg.range,Dg.range,Yg.range,kg.range,Jg.range,Mg.range,Tg.range;const zg=Ig((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()));zg.range;const Kg=Ig((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()));Kg.range;const Og=Ig((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear()));Og.every=t=>isFinite(t=Math.floor(t))&&t>0?Ig((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null,Og.range;const _g=Ig((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));function Pg(t,e,n,i,s,c){const a=[[fg,1,ug],[fg,5,5e3],[fg,15,15e3],[fg,30,3e4],[c,1,Fg],[c,5,3e5],[c,15,9e5],[c,30,18e5],[s,1,hg],[s,3,108e5],[s,6,216e5],[s,12,432e5],[i,1,bg],[i,2,1728e5],[n,1,Ug],[e,1,Cg],[e,3,7776e6],[t,1,yg]];function l(e,n,i){const s=Math.abs(n-e)/i,c=dt((([,,t])=>t)).right(a,s);if(c===a.length)return t.every(Kt(e/yg,n/yg,i));if(0===c)return Qg.every(Math.max(Kt(e,n,i),1));const[l,r]=a[s/a[c-1][2]<a[c][2]/s?c-1:c];return l.every(r)}return[function(t,e,n){const i=e<t;i&&([t,e]=[e,t]);const s=n&&"function"==typeof n.range?n:l(t,e,n),c=s?s.range(t,+e+1):[];return i?c.reverse():c},l]}_g.every=t=>isFinite(t=Math.floor(t))&&t>0?Ig((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null,_g.range;const[jg,$g]=Pg(_g,Kg,Hg,Sg,Ag,pg),[qg,tB]=Pg(Og,zg,Xg,xg,mg,Gg);function eB(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function nB(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function iB(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var sB,cB,aB,lB={"-":"",_:" ",0:"0"},rB=/^\s*\d+/,oB=/^%/,gB=/[\\^$*+?|[\]().{}]/g;function BB(t,e,n){var i=t<0?"-":"",s=(i?-t:t)+"",c=s.length;return i+(c<n?new Array(n-c+1).join(e)+s:s)}function dB(t){return t.replace(gB,"\\$&")}function IB(t){return new RegExp("^(?:"+t.map(dB).join("|")+")","i")}function QB(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function uB(t,e,n){var i=rB.exec(e.slice(n,n+1));return i?(t.w=+i[0],n+i[0].length):-1}function FB(t,e,n){var i=rB.exec(e.slice(n,n+1));return i?(t.u=+i[0],n+i[0].length):-1}function hB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.U=+i[0],n+i[0].length):-1}function bB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.V=+i[0],n+i[0].length):-1}function UB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.W=+i[0],n+i[0].length):-1}function CB(t,e,n){var i=rB.exec(e.slice(n,n+4));return i?(t.y=+i[0],n+i[0].length):-1}function yB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.y=+i[0]+(+i[0]>68?1900:2e3),n+i[0].length):-1}function fB(t,e,n){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),n+i[0].length):-1}function GB(t,e,n){var i=rB.exec(e.slice(n,n+1));return i?(t.q=3*i[0]-3,n+i[0].length):-1}function pB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.m=i[0]-1,n+i[0].length):-1}function mB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.d=+i[0],n+i[0].length):-1}function AB(t,e,n){var i=rB.exec(e.slice(n,n+3));return i?(t.m=0,t.d=+i[0],n+i[0].length):-1}function xB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.H=+i[0],n+i[0].length):-1}function LB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.M=+i[0],n+i[0].length):-1}function SB(t,e,n){var i=rB.exec(e.slice(n,n+2));return i?(t.S=+i[0],n+i[0].length):-1}function RB(t,e,n){var i=rB.exec(e.slice(n,n+3));return i?(t.L=+i[0],n+i[0].length):-1}function XB(t,e,n){var i=rB.exec(e.slice(n,n+6));return i?(t.L=Math.floor(i[0]/1e3),n+i[0].length):-1}function vB(t,e,n){var i=oB.exec(e.slice(n,n+1));return i?n+i[0].length:-1}function NB(t,e,n){var i=rB.exec(e.slice(n));return i?(t.Q=+i[0],n+i[0].length):-1}function ZB(t,e,n){var i=rB.exec(e.slice(n));return i?(t.s=+i[0],n+i[0].length):-1}function EB(t,e){return BB(t.getDate(),e,2)}function VB(t,e){return BB(t.getHours(),e,2)}function wB(t,e){return BB(t.getHours()%12||12,e,2)}function WB(t,e){return BB(1+xg.count(Og(t),t),e,3)}function HB(t,e){return BB(t.getMilliseconds(),e,3)}function DB(t,e){return HB(t,e)+"000"}function YB(t,e){return BB(t.getMonth()+1,e,2)}function kB(t,e){return BB(t.getMinutes(),e,2)}function JB(t,e){return BB(t.getSeconds(),e,2)}function MB(t){var e=t.getDay();return 0===e?7:e}function TB(t,e){return BB(Xg.count(Og(t)-1,t),e,2)}function zB(t){var e=t.getDay();return e>=4||0===e?Eg(t):Eg.ceil(t)}function KB(t,e){return t=zB(t),BB(Eg.count(Og(t),t)+(4===Og(t).getDay()),e,2)}function OB(t){return t.getDay()}function _B(t,e){return BB(vg.count(Og(t)-1,t),e,2)}function PB(t,e){return BB(t.getFullYear()%100,e,2)}function jB(t,e){return BB((t=zB(t)).getFullYear()%100,e,2)}function $B(t,e){return BB(t.getFullYear()%1e4,e,4)}function qB(t,e){var n=t.getDay();return BB((t=n>=4||0===n?Eg(t):Eg.ceil(t)).getFullYear()%1e4,e,4)}function td(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+BB(e/60|0,"0",2)+BB(e%60,"0",2)}function ed(t,e){return BB(t.getUTCDate(),e,2)}function nd(t,e){return BB(t.getUTCHours(),e,2)}function id(t,e){return BB(t.getUTCHours()%12||12,e,2)}function sd(t,e){return BB(1+Lg.count(_g(t),t),e,3)}function cd(t,e){return BB(t.getUTCMilliseconds(),e,3)}function ad(t,e){return cd(t,e)+"000"}function ld(t,e){return BB(t.getUTCMonth()+1,e,2)}function rd(t,e){return BB(t.getUTCMinutes(),e,2)}function od(t,e){return BB(t.getUTCSeconds(),e,2)}function gd(t){var e=t.getUTCDay();return 0===e?7:e}function Bd(t,e){return BB(Hg.count(_g(t)-1,t),e,2)}function dd(t){var e=t.getUTCDay();return e>=4||0===e?Jg(t):Jg.ceil(t)}function Id(t,e){return t=dd(t),BB(Jg.count(_g(t),t)+(4===_g(t).getUTCDay()),e,2)}function Qd(t){return t.getUTCDay()}function ud(t,e){return BB(Dg.count(_g(t)-1,t),e,2)}function Fd(t,e){return BB(t.getUTCFullYear()%100,e,2)}function hd(t,e){return BB((t=dd(t)).getUTCFullYear()%100,e,2)}function bd(t,e){return BB(t.getUTCFullYear()%1e4,e,4)}function Ud(t,e){var n=t.getUTCDay();return BB((t=n>=4||0===n?Jg(t):Jg.ceil(t)).getUTCFullYear()%1e4,e,4)}function Cd(){return"+0000"}function yd(){return"%"}function fd(t){return+t}function Gd(t){return Math.floor(+t/1e3)}function pd(t){return new Date(t)}function md(t){return t instanceof Date?+t:+new Date(+t)}function Ad(t,e,n,i,s,c,a,l,r,o){var g=Do(),B=g.invert,d=g.domain,I=o(".%L"),Q=o(":%S"),u=o("%I:%M"),F=o("%I %p"),h=o("%a %d"),b=o("%b %d"),U=o("%B"),C=o("%Y");function y(t){return(r(t)<t?I:l(t)<t?Q:a(t)<t?u:c(t)<t?F:i(t)<t?s(t)<t?h:b:n(t)<t?U:C)(t)}return g.invert=function(t){return new Date(B(t))},g.domain=function(t){return arguments.length?d(Array.from(t,md)):d().map(pd)},g.ticks=function(e){var n=d();return t(n[0],n[n.length-1],null==e?10:e)},g.tickFormat=function(t,e){return null==e?y:o(e)},g.nice=function(t){var n=d();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?d(To(n,t)):g},g.copy=function(){return Wo(g,Ad(t,e,n,i,s,c,a,l,r,o))},g}function xd(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function Ld(){var t,e,n,i,s,c,a,l=0,r=.5,o=1,g=1,B=Zo,d=!1;function I(t){return isNaN(t=+t)?a:(t=.5+((t=+c(t))-e)*(g*t<g*e?i:s),B(d?Math.max(0,Math.min(1,t)):t))}function Q(t){return function(e){var n,i,s;return arguments.length?([n,i,s]=e,B=Ms(t,[n,i,s]),I):[B(0),B(.5),B(1)]}}return I.domain=function(a){return arguments.length?([l,r,o]=a,t=c(l=+l),e=c(r=+r),n=c(o=+o),i=t===e?0:.5/(e-t),s=e===n?0:.5/(n-e),g=e<t?-1:1,I):[l,r,o]},I.clamp=function(t){return arguments.length?(d=!!t,I):d},I.interpolator=function(t){return arguments.length?(B=t,I):B},I.range=Q(Xs),I.rangeRound=Q(vs),I.unknown=function(t){return arguments.length?(a=t,I):a},function(a){return c=a,t=a(l),e=a(r),n=a(o),i=t===e?0:.5/(e-t),s=e===n?0:.5/(n-e),g=e<t?-1:1,I}}function Sd(){var t=ko(Ld()(Zo));return t.copy=function(){return xd(t,Sd())},Ao.apply(t,arguments)}function Rd(){var t=$o(Ld()).domain([.1,1,10]);return t.copy=function(){return xd(t,Rd()).base(t.base())},Ao.apply(t,arguments)}function Xd(){var t=ng(Ld());return t.copy=function(){return xd(t,Xd()).constant(t.constant())},Ao.apply(t,arguments)}function vd(){var t=lg(Ld());return t.copy=function(){return xd(t,vd()).exponent(t.exponent())},Ao.apply(t,arguments)}function Nd(t){for(var e=t.length/6|0,n=new Array(e),i=0;i<e;)n[i]="#"+t.slice(6*i,6*++i);return n}!function(t){sB=function(t){var e=t.dateTime,n=t.date,i=t.time,s=t.periods,c=t.days,a=t.shortDays,l=t.months,r=t.shortMonths,o=IB(s),g=QB(s),B=IB(c),d=QB(c),I=IB(a),Q=QB(a),u=IB(l),F=QB(l),h=IB(r),b=QB(r),U={a:function(t){return a[t.getDay()]},A:function(t){return c[t.getDay()]},b:function(t){return r[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:null,d:EB,e:EB,f:DB,g:jB,G:qB,H:VB,I:wB,j:WB,L:HB,m:YB,M:kB,p:function(t){return s[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:fd,s:Gd,S:JB,u:MB,U:TB,V:KB,w:OB,W:_B,x:null,X:null,y:PB,Y:$B,Z:td,"%":yd},C={a:function(t){return a[t.getUTCDay()]},A:function(t){return c[t.getUTCDay()]},b:function(t){return r[t.getUTCMonth()]},B:function(t){return l[t.getUTCMonth()]},c:null,d:ed,e:ed,f:ad,g:hd,G:Ud,H:nd,I:id,j:sd,L:cd,m:ld,M:rd,p:function(t){return s[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:fd,s:Gd,S:od,u:gd,U:Bd,V:Id,w:Qd,W:ud,x:null,X:null,y:Fd,Y:bd,Z:Cd,"%":yd},y={a:function(t,e,n){var i=I.exec(e.slice(n));return i?(t.w=Q.get(i[0].toLowerCase()),n+i[0].length):-1},A:function(t,e,n){var i=B.exec(e.slice(n));return i?(t.w=d.get(i[0].toLowerCase()),n+i[0].length):-1},b:function(t,e,n){var i=h.exec(e.slice(n));return i?(t.m=b.get(i[0].toLowerCase()),n+i[0].length):-1},B:function(t,e,n){var i=u.exec(e.slice(n));return i?(t.m=F.get(i[0].toLowerCase()),n+i[0].length):-1},c:function(t,n,i){return p(t,e,n,i)},d:mB,e:mB,f:XB,g:yB,G:CB,H:xB,I:xB,j:AB,L:RB,m:pB,M:LB,p:function(t,e,n){var i=o.exec(e.slice(n));return i?(t.p=g.get(i[0].toLowerCase()),n+i[0].length):-1},q:GB,Q:NB,s:ZB,S:SB,u:FB,U:hB,V:bB,w:uB,W:UB,x:function(t,e,i){return p(t,n,e,i)},X:function(t,e,n){return p(t,i,e,n)},y:yB,Y:CB,Z:fB,"%":vB};function f(t,e){return function(n){var i,s,c,a=[],l=-1,r=0,o=t.length;for(n instanceof Date||(n=new Date(+n));++l<o;)37===t.charCodeAt(l)&&(a.push(t.slice(r,l)),null!=(s=lB[i=t.charAt(++l)])?i=t.charAt(++l):s="e"===i?" ":"0",(c=e[i])&&(i=c(n,s)),a.push(i),r=l+1);return a.push(t.slice(r,l)),a.join("")}}function G(t,e){return function(n){var i,s,c=iB(1900,void 0,1);if(p(c,t,n+="",0)!=n.length)return null;if("Q"in c)return new Date(c.Q);if("s"in c)return new Date(1e3*c.s+("L"in c?c.L:0));if(e&&!("Z"in c)&&(c.Z=0),"p"in c&&(c.H=c.H%12+12*c.p),void 0===c.m&&(c.m="q"in c?c.q:0),"V"in c){if(c.V<1||c.V>53)return null;"w"in c||(c.w=1),"Z"in c?(s=(i=nB(iB(c.y,0,1))).getUTCDay(),i=s>4||0===s?Dg.ceil(i):Dg(i),i=Lg.offset(i,7*(c.V-1)),c.y=i.getUTCFullYear(),c.m=i.getUTCMonth(),c.d=i.getUTCDate()+(c.w+6)%7):(s=(i=eB(iB(c.y,0,1))).getDay(),i=s>4||0===s?vg.ceil(i):vg(i),i=xg.offset(i,7*(c.V-1)),c.y=i.getFullYear(),c.m=i.getMonth(),c.d=i.getDate()+(c.w+6)%7)}else("W"in c||"U"in c)&&("w"in c||(c.w="u"in c?c.u%7:"W"in c?1:0),s="Z"in c?nB(iB(c.y,0,1)).getUTCDay():eB(iB(c.y,0,1)).getDay(),c.m=0,c.d="W"in c?(c.w+6)%7+7*c.W-(s+5)%7:c.w+7*c.U-(s+6)%7);return"Z"in c?(c.H+=c.Z/100|0,c.M+=c.Z%100,nB(c)):eB(c)}}function p(t,e,n,i){for(var s,c,a=0,l=e.length,r=n.length;a<l;){if(i>=r)return-1;if(37===(s=e.charCodeAt(a++))){if(s=e.charAt(a++),!(c=y[s in lB?e.charAt(a++):s])||(i=c(t,n,i))<0)return-1}else if(s!=n.charCodeAt(i++))return-1}return i}return U.x=f(n,U),U.X=f(i,U),U.c=f(e,U),C.x=f(n,C),C.X=f(i,C),C.c=f(e,C),{format:function(t){var e=f(t+="",U);return e.toString=function(){return t},e},parse:function(t){var e=G(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=f(t+="",C);return e.toString=function(){return t},e},utcParse:function(t){var e=G(t+="",!0);return e.toString=function(){return t},e}}}(t),cB=sB.format,sB.parse,aB=sB.utcFormat,sB.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Zd=Nd("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Ed=Nd("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),Vd=Nd("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),wd=Nd("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),Wd=Nd("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),Hd=Nd("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),Dd=Nd("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),Yd=Nd("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),kd=Nd("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),Jd=Nd("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"),Md=t=>fs(t[t.length-1]),Td=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(Nd),zd=Md(Td),Kd=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(Nd),Od=Md(Kd),_d=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(Nd),Pd=Md(_d),jd=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(Nd),$d=Md(jd),qd=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(Nd),tI=Md(qd),eI=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(Nd),nI=Md(eI),iI=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(Nd),sI=Md(iI),cI=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(Nd),aI=Md(cI),lI=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(Nd),rI=Md(lI),oI=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(Nd),gI=Md(oI),BI=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(Nd),dI=Md(BI),II=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(Nd),QI=Md(II),uI=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(Nd),FI=Md(uI),hI=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(Nd),bI=Md(hI),UI=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(Nd),CI=Md(UI),yI=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(Nd),fI=Md(yI),GI=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(Nd),pI=Md(GI),mI=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(Nd),AI=Md(mI),xI=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(Nd),LI=Md(xI),SI=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(Nd),RI=Md(SI),XI=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(Nd),vI=Md(XI),NI=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(Nd),ZI=Md(NI),EI=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(Nd),VI=Md(EI),wI=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(Nd),WI=Md(wI),HI=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(Nd),DI=Md(HI),YI=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(Nd),kI=Md(YI),JI=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(Nd),MI=Md(JI);function TI(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-t*(35.34-t*(2381.73-t*(6402.7-t*(7024.72-2710.57*t)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+t*(170.73+t*(52.82-t*(131.46-t*(176.58-67.37*t)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+t*(442.36-t*(2482.43-t*(6167.24-t*(6614.94-2475.67*t)))))))+")"}var zI=Js(Is(300,.5,0),Is(-240,.5,1)),KI=Js(Is(-100,.75,.35),Is(80,1.5,.8)),OI=Js(Is(260,.75,.35),Is(80,1.5,.8)),_I=Is();function PI(t){(t<0||t>1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return _I.h=360*t-100,_I.s=1.5-1.5*e,_I.l=.8-.9*e,_I+""}var jI=Ai(),$I=Math.PI/3,qI=2*Math.PI/3;function tQ(t){var e;return t=(.5-t)*Math.PI,jI.r=255*(e=Math.sin(t))*e,jI.g=255*(e=Math.sin(t+$I))*e,jI.b=255*(e=Math.sin(t+qI))*e,jI+""}function eQ(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"}function nQ(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var iQ=nQ(Nd("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),sQ=nQ(Nd("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),cQ=nQ(Nd("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),aQ=nQ(Nd("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function lQ(t){return function(){return t}}const rQ=Math.cos,oQ=Math.min,gQ=Math.sin,BQ=Math.sqrt,dQ=Math.PI,IQ=2*dQ;function QQ(t){this._context=t}function uQ(t){return new QQ(t)}function FQ(t){return t[0]}function hQ(t){return t[1]}function bQ(t,e){var n=lQ(!0),i=null,s=uQ,c=null,a=function(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new ea(e)}(l);function l(l){var r,o,g,B=(l=function(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}(l)).length,d=!1;for(null==i&&(c=s(g=a())),r=0;r<=B;++r)!(r<B&&n(o=l[r],r,l))===d&&((d=!d)?c.lineStart():c.lineEnd()),d&&c.point(+t(o,r,l),+e(o,r,l));if(g)return c=null,g+""||null}return t="function"==typeof t?t:void 0===t?FQ:lQ(t),e="function"==typeof e?e:void 0===e?hQ:lQ(e),l.x=function(e){return arguments.length?(t="function"==typeof e?e:lQ(+e),l):t},l.y=function(t){return arguments.length?(e="function"==typeof t?t:lQ(+t),l):e},l.defined=function(t){return arguments.length?(n="function"==typeof t?t:lQ(!!t),l):n},l.curve=function(t){return arguments.length?(s=t,null!=i&&(c=s(i)),l):s},l.context=function(t){return arguments.length?(null==t?i=c=null:c=s(i=t),l):i},l}QQ.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};class UQ{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}const CQ=BQ(3);var yQ={draw(t,e){const n=.59436*BQ(e+oQ(e/28,.75)),i=n/2,s=i*CQ;t.moveTo(0,n),t.lineTo(0,-n),t.moveTo(-s,-i),t.lineTo(s,i),t.moveTo(-s,i),t.lineTo(s,-i)}},fQ={draw(t,e){const n=BQ(e/dQ);t.moveTo(n,0),t.arc(0,0,n,0,IQ)}},GQ={draw(t,e){const n=BQ(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}};const pQ=BQ(1/3),mQ=2*pQ;var AQ={draw(t,e){const n=BQ(e/mQ),i=n*pQ;t.moveTo(0,-n),t.lineTo(i,0),t.lineTo(0,n),t.lineTo(-i,0),t.closePath()}},xQ={draw(t,e){const n=.62625*BQ(e);t.moveTo(0,-n),t.lineTo(n,0),t.lineTo(0,n),t.lineTo(-n,0),t.closePath()}},LQ={draw(t,e){const n=.87559*BQ(e-oQ(e/7,2));t.moveTo(-n,0),t.lineTo(n,0),t.moveTo(0,n),t.lineTo(0,-n)}},SQ={draw(t,e){const n=BQ(e),i=-n/2;t.rect(i,i,n,n)}},RQ={draw(t,e){const n=.4431*BQ(e);t.moveTo(n,n),t.lineTo(n,-n),t.lineTo(-n,-n),t.lineTo(-n,n),t.closePath()}};const XQ=gQ(dQ/10)/gQ(7*dQ/10),vQ=gQ(IQ/10)*XQ,NQ=-rQ(IQ/10)*XQ;var ZQ={draw(t,e){const n=BQ(.8908130915292852*e),i=vQ*n,s=NQ*n;t.moveTo(0,-n),t.lineTo(i,s);for(let e=1;e<5;++e){const c=IQ*e/5,a=rQ(c),l=gQ(c);t.lineTo(l*n,-a*n),t.lineTo(a*i-l*s,l*i+a*s)}t.closePath()}};const EQ=BQ(3);var VQ={draw(t,e){const n=-BQ(e/(3*EQ));t.moveTo(0,2*n),t.lineTo(-EQ*n,-n),t.lineTo(EQ*n,-n),t.closePath()}};const wQ=BQ(3);var WQ={draw(t,e){const n=.6824*BQ(e),i=n/2,s=n*wQ/2;t.moveTo(0,-n),t.lineTo(s,i),t.lineTo(-s,i),t.closePath()}};const HQ=-.5,DQ=BQ(3)/2,YQ=1/BQ(12),kQ=3*(YQ/2+1);var JQ={draw(t,e){const n=BQ(e/kQ),i=n/2,s=n*YQ,c=i,a=n*YQ+n,l=-c,r=a;t.moveTo(i,s),t.lineTo(c,a),t.lineTo(l,r),t.lineTo(HQ*i-DQ*s,DQ*i+HQ*s),t.lineTo(HQ*c-DQ*a,DQ*c+HQ*a),t.lineTo(HQ*l-DQ*r,DQ*l+HQ*r),t.lineTo(HQ*i+DQ*s,HQ*s-DQ*i),t.lineTo(HQ*c+DQ*a,HQ*a-DQ*c),t.lineTo(HQ*l+DQ*r,HQ*r-DQ*l),t.closePath()}},MQ={draw(t,e){const n=.6189*BQ(e-oQ(e/6,1.7));t.moveTo(-n,-n),t.lineTo(n,n),t.moveTo(-n,n),t.lineTo(n,-n)}};const TQ=[fQ,GQ,AQ,SQ,ZQ,VQ,JQ],zQ=[fQ,LQ,MQ,WQ,yQ,RQ,xQ];function KQ(){}function OQ(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function _Q(t){this._context=t}function PQ(t){this._context=t}function jQ(t){this._context=t}function $Q(t,e){this._basis=new _Q(t),this._beta=e}_Q.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:OQ(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:OQ(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},PQ.prototype={areaStart:KQ,areaEnd:KQ,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:OQ(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},jQ.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,i=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,i):this._context.moveTo(n,i);break;case 3:this._point=4;default:OQ(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},$Q.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var i,s=t[0],c=e[0],a=t[n]-s,l=e[n]-c,r=-1;++r<=n;)i=r/n,this._basis.point(this._beta*t[r]+(1-this._beta)*(s+i*a),this._beta*e[r]+(1-this._beta)*(c+i*l));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var qQ=function t(e){function n(t){return 1===e?new _Q(t):new $Q(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function tu(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function eu(t,e){this._context=t,this._k=(1-e)/6}eu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:tu(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:tu(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var nu=function t(e){function n(t){return new eu(t,e)}return n.tension=function(e){return t(+e)},n}(0);function iu(t,e){this._context=t,this._k=(1-e)/6}iu.prototype={areaStart:KQ,areaEnd:KQ,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:tu(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var su=function t(e){function n(t){return new iu(t,e)}return n.tension=function(e){return t(+e)},n}(0);function cu(t,e){this._context=t,this._k=(1-e)/6}cu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:tu(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var au=function t(e){function n(t){return new cu(t,e)}return n.tension=function(e){return t(+e)},n}(0);function lu(t,e,n){var i=t._x1,s=t._y1,c=t._x2,a=t._y2;if(t._l01_a>1e-12){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,r=3*t._l01_a*(t._l01_a+t._l12_a);i=(i*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/r,s=(s*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/r}if(t._l23_a>1e-12){var o=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,g=3*t._l23_a*(t._l23_a+t._l12_a);c=(c*o+t._x1*t._l23_2a-e*t._l12_2a)/g,a=(a*o+t._y1*t._l23_2a-n*t._l12_2a)/g}t._context.bezierCurveTo(i,s,c,a,t._x2,t._y2)}function ru(t,e){this._context=t,this._alpha=e}ru.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:lu(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var ou=function t(e){function n(t){return e?new ru(t,e):new eu(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function gu(t,e){this._context=t,this._alpha=e}gu.prototype={areaStart:KQ,areaEnd:KQ,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:lu(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Bu=function t(e){function n(t){return e?new gu(t,e):new iu(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function du(t,e){this._context=t,this._alpha=e}du.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:lu(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Iu=function t(e){function n(t){return e?new du(t,e):new cu(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Qu(t){this._context=t}function uu(t){return t<0?-1:1}function Fu(t,e,n){var i=t._x1-t._x0,s=e-t._x1,c=(t._y1-t._y0)/(i||s<0&&-0),a=(n-t._y1)/(s||i<0&&-0),l=(c*s+a*i)/(i+s);return(uu(c)+uu(a))*Math.min(Math.abs(c),Math.abs(a),.5*Math.abs(l))||0}function hu(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function bu(t,e,n){var i=t._x0,s=t._y0,c=t._x1,a=t._y1,l=(c-i)/3;t._context.bezierCurveTo(i+l,s+l*e,c-l,a-l*n,c,a)}function Uu(t){this._context=t}function Cu(t){this._context=new yu(t)}function yu(t){this._context=t}function fu(t){this._context=t}function Gu(t){var e,n,i=t.length-1,s=new Array(i),c=new Array(i),a=new Array(i);for(s[0]=0,c[0]=2,a[0]=t[0]+2*t[1],e=1;e<i-1;++e)s[e]=1,c[e]=4,a[e]=4*t[e]+2*t[e+1];for(s[i-1]=2,c[i-1]=7,a[i-1]=8*t[i-1]+t[i],e=1;e<i;++e)n=s[e]/c[e-1],c[e]-=n,a[e]-=n*a[e-1];for(s[i-1]=a[i-1]/c[i-1],e=i-2;e>=0;--e)s[e]=(a[e]-s[e+1])/c[e];for(c[i-1]=(t[i]+s[i-1])/2,e=0;e<i-1;++e)c[e]=2*t[e+1]-s[e+1];return[s,c]}function pu(t,e){this._context=t,this._t=e}function mu(t,e,n){this.k=t,this.x=e,this.y=n}Qu.prototype={areaStart:KQ,areaEnd:KQ,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Uu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:bu(this,this._t0,hu(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,bu(this,hu(this,n=Fu(this,t,e)),n);break;default:bu(this,this._t0,n=Fu(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(Cu.prototype=Object.create(Uu.prototype)).point=function(t,e){Uu.prototype.point.call(this,e,t)},yu.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,i,s,c){this._context.bezierCurveTo(e,t,i,n,c,s)}},fu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var i=Gu(t),s=Gu(e),c=0,a=1;a<n;++c,++a)this._context.bezierCurveTo(i[0][c],s[0][c],i[1][c],s[1][c],t[a],e[a]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},pu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}},mu.prototype={constructor:mu,scale:function(t){return 1===t?this:new mu(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new mu(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},mu.prototype;class Au extends rt{getComputedStyleValue(t){return getComputedStyle(this).getPropertyValue(t).trim()}firstUpdated(t){super.firstUpdated(t),Tn(this.renderRoot.host).classed("keyboard",!0).on("mousemove.keyboard touchstart.keyboard",(t=>{Tn(t.currentTarget.renderRoot.host).classed("keyboard",!1).on("mousemove.keyboard touchstart.keyboard",null)})).on("keydown.keyboard",(t=>{Tn(t.currentTarget.renderRoot.host).classed("keyboard",!0).on("keydown.keyboard mousemove.keyboard touchstart.keyboard",null)}))}static get greys(){const t="#999999",e={white:"#ffffff"};return e.light75=Cs(t,"#ffffff")(.75),e.light50=Cs(t,"#ffffff")(.5),e.light25=Cs(t,"#ffffff")(.25),e.grey=t,e.dark25=Cs(t,"#000000")(.25),e.dark50=Cs(t,"#000000")(.5),e.dark75=Cs(t,"#000000")(.75),e.black="#000000",e}static get shadows(){return{elevations:[0,2,4,8,16],baselineColor:"#000000",baselineColorString:"0, 0, 0",inverseBaselineColor:"#FFFFFF",inverseBaselineColorString:"255, 255, 255",opacityUmbra:.2,opacityPenumbra:.14,opacityAmbient:.12,opacityBoost:.2,mapUmbra:{0:{x:0,y:0,b:0,s:0},2:{x:0,y:3,b:1,s:-2},4:{x:0,y:2,b:4,s:-1},8:{x:0,y:5,b:5,s:-3},16:{x:0,y:8,b:10,s:-5}},mapPenumbra:{0:{x:0,y:0,b:0,s:0},2:{x:0,y:2,b:2,s:0},4:{x:0,y:4,b:5,s:0},8:{x:0,y:8,b:10,s:1},16:{x:0,y:16,b:24,s:2}},mapAmbient:{0:{x:0,y:0,b:0,s:0},2:{x:0,y:1,b:5,s:0},4:{x:0,y:1,b:10,s:0},8:{x:0,y:3,b:14,s:2},16:{x:0,y:6,b:30,s:5}}}}static cssBoxShadow(t,e=!1,n=!1){const i=this.shadows.opacityUmbra+this.shadows.opacityBoost,s=this.shadows.opacityPenumbra+this.shadows.opacityBoost,c=this.shadows.opacityAmbient+this.shadows.opacityBoost,a=n?`rgba(${this.shadows.inverseBaselineColorString}, ${i})`:`rgba(${this.shadows.baselineColorString}, ${i})`,l=n?`rgba(${this.shadows.inverseBaselineColorString}, ${s})`:`rgba(${this.shadows.baselineColorString}, ${s})`,r=n?`rgba(${this.shadows.inverseBaselineColorString}, ${c})`:`rgba(${this.shadows.baselineColorString}, ${c})`,o=this.shadows.mapUmbra[t],g=this.shadows.mapPenumbra[t],B=this.shadows.mapAmbient[t];return`${e?`${-o.y}px ${o.y/2}px ${o.b}px ${o.s}px`:`${o.y/2}px ${o.y}px ${o.b}px ${o.s}px`} ${a}, ${e?`${-g.y}px ${g.y/2}px ${g.b}px ${g.s}px`:`${g.y/2}px ${g.y}px ${g.b}px ${g.s}px`} ${l}, ${e?`${-B.y}px ${B.y/2}px ${B.b}px ${B.s}px`:`${B.y/2}px ${B.y}px ${B.b}px ${B.s}px`} ${r}`}static get svgDefs(){const t=Au.shadows,e=t.elevations.map((e=>`\n <filter id=shadow-${e} filterUnits="userSpaceOnUse" x="-100%" y="-100%" width="200%" height="200%">\n <feComponentTransfer in="SourceAlpha" result="solid">\n <feFuncA type="table" tableValues="0 1 1"/>\n </feComponentTransfer>\n <feOffset in="solid" result="offU" dx=${t.mapUmbra[e].y/2} dy=${t.mapUmbra[e].y} />\n <feOffset in="solid" result="offP" dx=${t.mapPenumbra[e].y/2} dy=${t.mapPenumbra[e].y} />\n <feOffset in="solid" result="offA" dx=${t.mapAmbient[e].y/2} dy=${t.mapAmbient[e].y} />\n ${0===t.mapUmbra[e].s?"":`<feMorphology in="offU" result="spreadU" operator=${t.mapUmbra[e].s>0?"dilate":"erode"} radius=${Math.abs(t.mapUmbra[e].s)} />`}\n ${0===t.mapPenumbra[e].s?"":`<feMorphology in="offP" result="spreadP" operator=${t.mapPenumbra[e].s>0?"dilate":"erode"} radius=${Math.abs(t.mapPenumbra[e].s)} />`}\n ${0===t.mapAmbient[e].s?"":`<feMorphology in="offA" result="spreadA" operator=${t.mapAmbient[e].s>0?"dilate":"erode"} radius=${Math.abs(t.mapAmbient[e].s)} />`}\n <feGaussianBlur in=${0===t.mapUmbra[e].s?"offU":"spreadU"} result="blurU" stdDeviation=${t.mapUmbra[e].b/2} />\n <feGaussianBlur in=${0===t.mapPenumbra[e].s?"offP":"spreadP"} result="blurP" stdDeviation=${t.mapPenumbra[e].b/2} />\n <feGaussianBlur in=${0===t.mapAmbient[e].s?"offA":"spreadA"} result="blurA" stdDeviation=${t.mapAmbient[e].b/2} />\n <feFlood in="SourceGraphic" result="opU" flood-color=${t.baselineColor} flood-opacity=${t.opacityUmbra+t.opacityBoost} />\n <feFlood in="SourceGraphic" result="opP" flood-color=${t.baselineColor} flood-opacity=${t.opacityPenumbra+t.opacityBoost} />\n <feFlood in="SourceGraphic" result="opA" flood-color=${t.baselineColor} flood-opacity=${t.opacityAmbient+t.opacityBoost} />\n <feComposite in="opU" in2="blurU" result="shU" operator="in" />\n <feComposite in="opP" in2="blurP" result="shP" operator="in" />\n <feComposite in="opA" in2="blurA" result="shA" operator="in" />\n <feMorphology in="solid" result="smaller" operator="erode" radius="1" />\n <feComposite in="shU" in2="smaller" result="finalU" operator="out" />\n <feComposite in="shP" in2="smaller" result="finalP" operator="out" />\n <feComposite in="shA" in2="smaller" result="finalA" operator="out" />\n <feMerge>\n <feMergeNode in="finalU" />\n <feMergeNode in="finalP" />\n <feMergeNode in="finalA" />\n <feMergeNode in="SourceGraphic" />\n </feMerge>\n </filter>`));return`\n <defs>\n ${e}\n </defs>\n `}static get svgFilters(){const t=Au.shadows,e=t.elevations.map((e=>Y`
24
+ <filter id=${`shadow-${e}`} x="-250%" y="-250%" width="600%" height="600%">
25
+ <feComponentTransfer in="SourceAlpha" result="solid">
26
+ <feFuncA type="table" tableValues="0 1 1"/>
27
+ </feComponentTransfer>
28
+ <feOffset in="solid" result="offU" dx=${t.mapUmbra[e].y/2} dy=${t.mapUmbra[e].y} />
29
+ <feOffset in="solid" result="offP" dx=${t.mapPenumbra[e].y/2} dy=${t.mapPenumbra[e].y} />
30
+ <feOffset in="solid" result="offA" dx=${t.mapAmbient[e].y/2} dy=${t.mapAmbient[e].y} />
31
+ ${0===t.mapUmbra[e].s?Y``:Y`<feMorphology in="offU" result="spreadU" operator=${t.mapUmbra[e].s>0?"dilate":"erode"} radius=${Math.abs(t.mapUmbra[e].s)} />`}
32
+ ${0===t.mapPenumbra[e].s?Y``:Y`<feMorphology in="offP" result="spreadP" operator=${t.mapPenumbra[e].s>0?"dilate":"erode"} radius=${Math.abs(t.mapPenumbra[e].s)} />`}
33
+ ${0===t.mapAmbient[e].s?Y``:Y`<feMorphology in="offA" result="spreadA" operator=${t.mapAmbient[e].s>0?"dilate":"erode"} radius=${Math.abs(t.mapAmbient[e].s)} />`}
34
+ <feGaussianBlur in=${0===t.mapUmbra[e].s?"offU":"spreadU"} result="blurU" stdDeviation=${t.mapUmbra[e].b/2} />
35
+ <feGaussianBlur in=${0===t.mapPenumbra[e].s?"offP":"spreadP"} result="blurP" stdDeviation=${t.mapPenumbra[e].b/2} />
36
+ <feGaussianBlur in=${0===t.mapAmbient[e].s?"offA":"spreadA"} result="blurA" stdDeviation=${t.mapAmbient[e].b/2} />
37
+ <feFlood in="SourceGraphic" result="opU" flood-color=${t.baselineColor} flood-opacity=${t.opacityUmbra+t.opacityBoost} />
38
+ <feFlood in="SourceGraphic" result="opP" flood-color=${t.baselineColor} flood-opacity=${t.opacityPenumbra+t.opacityBoost} />
39
+ <feFlood in="SourceGraphic" result="opA" flood-color=${t.baselineColor} flood-opacity=${t.opacityAmbient+t.opacityBoost} />
40
+ <feComposite in="opU" in2="blurU" result="shU" operator="in" />
41
+ <feComposite in="opP" in2="blurP" result="shP" operator="in" />
42
+ <feComposite in="opA" in2="blurA" result="shA" operator="in" />
43
+ <feMorphology in="solid" result="smaller" operator="erode" radius="1" />
44
+ <feComposite in="shU" in2="smaller" result="finalU" operator="out" />
45
+ <feComposite in="shP" in2="smaller" result="finalP" operator="out" />
46
+ <feComposite in="shA" in2="smaller" result="finalA" operator="out" />
47
+ <feMerge>
48
+ <feMergeNode in="finalU" />
49
+ <feMergeNode in="finalP" />
50
+ <feMergeNode in="finalA" />
51
+ <feMergeNode in="SourceGraphic" />
52
+ </feMerge>
53
+ </filter>`));return Y`
54
+ <svg class="defs">
55
+ <defs>
56
+ ${e}
57
+ </defs>
58
+ </svg>
59
+ `}static get styles(){return l`
60
+ :host {
61
+ ---shadow-0: var(--shadow-0, ${a(this.cssBoxShadow(0))});
62
+ ---shadow-2: var(--shadow-2, ${a(this.cssBoxShadow(2))});
63
+ ---shadow-4: var(--shadow-4, ${a(this.cssBoxShadow(4))});
64
+ ---shadow-8: var(--shadow-8, ${a(this.cssBoxShadow(8))});
65
+
66
+ ---color-background: var(--color-background, ${a(this.greys.white)});
67
+ ---color-border: var(--color-border, ${a(this.greys.light75)});
68
+ ---color-text: var(--color-text, ${a(this.greys.dark75)});
69
+ ---color-text-inverse: var(--color-text-inverse, ${a(this.greys.white)});
70
+ ---color-link: var(--color-link, ${a(this.greys.dark25)});
71
+ ---color-element-background: var(--color-element-background, ${a(this.greys.light75)});
72
+ ---color-element-disabled: var(--color-element-disabled, ${a(this.greys.light50)});
73
+ ---color-element-enabled: var(--color-element-enabled, ${a(this.greys.dark25)});
74
+ ---color-element-selected: var(--color-element-selected, ${a(this.greys.grey)});
75
+ ---color-element-border: var(--color-element-border, ${a(this.greys.dark50)});
76
+ ---color-element-emphasis: var(--color-element-emphasis, ${a(this.greys.dark75)});
77
+
78
+ ---font-family-base: var(--font-family-base, "Source Sans", sans-serif);
79
+ ---font-family-math: var(--font-family-math, "Source Serif", serif);
80
+
81
+ ---border: var(--border, 1px solid var(---color-border));
82
+ ---border-radius: var(--border-radius, 0.25rem);
83
+ ---transition-duration: var(--transition-duration, 500ms);
84
+
85
+ font-family: var(---font-family-base);
86
+ }
87
+
88
+ :host,
89
+ :host *,
90
+ :host *::before,
91
+ :host *::after {
92
+ box-sizing: border-box;
93
+ }
94
+
95
+ .math-greek {
96
+ font-family: var(---font-family-math);
97
+ font-style: normal;
98
+ }
99
+
100
+ .math-num {
101
+ font-family: var(---font-family-base);
102
+ font-style: normal;
103
+ }
104
+
105
+ .math-var {
106
+ font-family: var(---font-family-math);
107
+ font-style: italic;
108
+ }
109
+
110
+ .defs {
111
+ display: block;
112
+
113
+ width: 0;
114
+ height: 0;
115
+ }
116
+ `}}customElements.define("decidables-button",class extends Au{static get properties(){return{disabled:{attribute:"disabled",type:Boolean,reflect:!0}}}constructor(){super(),this.disabled=!1}static get styles(){return[super.styles,l`
117
+ :host {
118
+ margin: 0.25rem;
119
+ }
120
+
121
+ button {
122
+ width: 100%;
123
+ height: 100%;
124
+ padding: 0.375rem 0.75rem;
125
+
126
+ font-family: var(---font-family-base);
127
+ font-size: 1.125rem;
128
+ line-height: 1.5;
129
+ color: var(---color-text-inverse);
130
+
131
+ border: 0;
132
+ border-radius: var(---border-radius);
133
+ outline: none;
134
+ }
135
+
136
+ button:disabled {
137
+ background-color: var(--decidables-button-background-color, var(---color-element-disabled));
138
+ outline: none;
139
+ box-shadow: none;
140
+ }
141
+
142
+ button:enabled {
143
+ cursor: pointer;
144
+
145
+ background-color: var(--decidables-button-background-color, var(---color-element-enabled));
146
+ outline: none;
147
+ box-shadow: var(---shadow-2);
148
+ }
149
+
150
+ button:enabled:hover {
151
+ outline: none;
152
+ box-shadow: var(---shadow-4);
153
+ }
154
+
155
+ button:enabled:active {
156
+ outline: none;
157
+ box-shadow: var(---shadow-8);
158
+ }
159
+
160
+ :host(.keyboard) button:enabled:focus {
161
+ outline: none;
162
+ box-shadow: var(---shadow-4);
163
+ }
164
+
165
+ :host(.keyboard) button:enabled:focus:active {
166
+ outline: none;
167
+ box-shadow: var(---shadow-8);
168
+ }
169
+ `]}render(){return D`
170
+ <button ?disabled=${this.disabled}>
171
+ <slot></slot>
172
+ </button>
173
+ `}});
174
+ /**
175
+ * @license
176
+ * Copyright 2018 Google LLC
177
+ * SPDX-License-Identifier: BSD-3-Clause
178
+ */
179
+ const xu=t=>null!=t?t:J;customElements.define("decidables-slider",class extends Au{static get properties(){return{disabled:{attribute:"disabled",type:Boolean,reflect:!0},max:{attribute:"max",type:Number,reflect:!0},min:{attribute:"min",type:Number,reflect:!0},step:{attribute:"step",type:Number,reflect:!0},value:{attribute:"value",type:Number,reflect:!0}}}constructor(){super(),this.disabled=!1,this.max=void 0,this.min=void 0,this.step=void 0,this.value=void 0}changed(t){this.value=t.target.value,this.dispatchEvent(new CustomEvent("change",{detail:{value:this.value},bubbles:!0}))}inputted(t){this.value=t.target.value}static get styles(){return[super.styles,l`
180
+ :host {
181
+ ---shadow-2-rotate: var(--shadow-2-rotate, ${a(this.cssBoxShadow(2,!0,!1))});
182
+ ---shadow-4-rotate: var(--shadow-4-rotate, ${a(this.cssBoxShadow(4,!0,!1))});
183
+ ---shadow-8-rotate: var(--shadow-8-rotate, ${a(this.cssBoxShadow(8,!0,!1))});
184
+
185
+ display: flex;
186
+
187
+ flex-direction: column;
188
+
189
+ align-items: center;
190
+ justify-content: center;
191
+ }
192
+
193
+ label {
194
+ margin: 0.25rem 0.25rem 0;
195
+ }
196
+
197
+ .range {
198
+ display: inline-block;
199
+
200
+ width: 3.5rem;
201
+ height: 4.75rem;
202
+ margin: 0 0.25rem 0.25rem;
203
+ }
204
+
205
+ decidables-spinner {
206
+ --decidables-spinner-input-width: 3.5rem;
207
+
208
+ margin: 0 0.25rem 0.25rem;
209
+ }
210
+
211
+ /* Adapted from http://danielstern.ca/range.css/#/ */
212
+ /* Overall */
213
+ input[type=range] {
214
+ width: 4.75rem;
215
+ height: 3.5rem;
216
+ padding: 0;
217
+ margin: 0;
218
+
219
+ background-color: unset;
220
+
221
+ transform: rotate(-90deg);
222
+ transform-origin: 2.375rem 2.375rem;
223
+
224
+ /* stylelint-disable-next-line property-no-vendor-prefix */
225
+ -webkit-appearance: none;
226
+ }
227
+
228
+ input[type=range]:enabled {
229
+ cursor: ns-resize;
230
+ }
231
+
232
+ input[type=range]:focus {
233
+ outline: none;
234
+ }
235
+
236
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
237
+ input[type=range]::-ms-tooltip {
238
+ display: none;
239
+ }
240
+
241
+ /* Track */
242
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
243
+ input[type=range]::-webkit-slider-runnable-track {
244
+ width: 100%;
245
+ height: 4px;
246
+
247
+ background: var(---color-element-disabled);
248
+ border: 0;
249
+ border-radius: 2px;
250
+ box-shadow: none;
251
+ }
252
+
253
+ input[type=range]:focus::-webkit-slider-runnable-track {
254
+ background: var(---color-element-disabled);
255
+ }
256
+
257
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
258
+ input[type=range]::-moz-range-track {
259
+ width: 100%;
260
+ height: 4px;
261
+
262
+ background: var(---color-element-disabled);
263
+ border: 0;
264
+ border-radius: 2px;
265
+ box-shadow: none;
266
+ }
267
+
268
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
269
+ input[type=range]::-ms-track {
270
+ width: 100%;
271
+ height: 4px;
272
+
273
+ color: transparent;
274
+
275
+ background: transparent;
276
+ border-color: transparent;
277
+ }
278
+
279
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
280
+ input[type=range]::-ms-fill-lower {
281
+ background: #cccccc;
282
+ /* background: var(---color-element-disabled); */
283
+ border: 0;
284
+ border-radius: 2px;
285
+ box-shadow: none;
286
+ }
287
+
288
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
289
+ input[type=range]::-ms-fill-upper {
290
+ background: #cccccc;
291
+ /* background: var(---color-element-disabled); */
292
+ border: 0;
293
+ border-radius: 2px;
294
+ box-shadow: none;
295
+ }
296
+
297
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
298
+ input[type=range]:focus::-ms-fill-lower {
299
+ background: var(---color-element-disabled);
300
+ }
301
+
302
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
303
+ input[type=range]:focus::-ms-fill-upper {
304
+ background: var(---color-element-disabled);
305
+ }
306
+
307
+ /* Thumb */
308
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
309
+ input[type=range]::-webkit-slider-thumb {
310
+ width: 10px;
311
+ height: 20px;
312
+ margin-top: -8px;
313
+
314
+ border: 0;
315
+ border-radius: 4px;
316
+
317
+ /* stylelint-disable-next-line property-no-vendor-prefix */
318
+ -webkit-appearance: none;
319
+ }
320
+
321
+ input[type=range]:disabled::-webkit-slider-thumb {
322
+ background: var(---color-element-disabled);
323
+ box-shadow: none;
324
+ }
325
+
326
+ input[type=range]:enabled::-webkit-slider-thumb {
327
+ background: var(---color-element-enabled);
328
+ box-shadow: var(---shadow-2-rotate);
329
+ }
330
+
331
+ input[type=range]:enabled:hover::-webkit-slider-thumb {
332
+ box-shadow: var(---shadow-4-rotate);
333
+ }
334
+
335
+ input[type=range]:enabled:active::-webkit-slider-thumb {
336
+ box-shadow: var(---shadow-8-rotate);
337
+ }
338
+
339
+ :host(.keyboard) input[type=range]:enabled:focus::-webkit-slider-thumb {
340
+ box-shadow: var(---shadow-4-rotate);
341
+ }
342
+
343
+ :host(.keyboard) input[type=range]:focus:active::-webkit-slider-thumb {
344
+ box-shadow: var(---shadow-8-rotate);
345
+ }
346
+
347
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
348
+ input[type=range]::-moz-range-thumb {
349
+ width: 10px;
350
+ height: 20px;
351
+
352
+ border: 0;
353
+ border-radius: 4px;
354
+ }
355
+
356
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
357
+ input[type=range]:disabled::-moz-range-thumb {
358
+ background: var(---color-element-disabled);
359
+ box-shadow: none;
360
+ }
361
+
362
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
363
+ input[type=range]:enabled::-moz-range-thumb {
364
+ background: var(---color-element-enabled);
365
+ box-shadow: var(---shadow-2-rotate);
366
+ }
367
+
368
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
369
+ input[type=range]:enabled:hover::-moz-range-thumb {
370
+ box-shadow: var(---shadow-4-rotate);
371
+ }
372
+
373
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
374
+ input[type=range]:enabled:active::-moz-range-thumb {
375
+ box-shadow: var(---shadow-8-rotate);
376
+ }
377
+
378
+ :host(.keyboard) input[type=range]:enabled:focus::-moz-range-thumb {
379
+ box-shadow: var(---shadow-4-rotate);
380
+ }
381
+
382
+ :host(.keyboard) input[type=range]:enabled:focus:active::-moz-range-thumb {
383
+ box-shadow: var(---shadow-8-rotate);
384
+ }
385
+
386
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
387
+ input[type=range]::-ms-thumb {
388
+ width: 10px;
389
+ height: 20px;
390
+ margin-top: 0;
391
+
392
+ background: #999999;
393
+ /* background: var(---color-element-enabled); */
394
+ border: 0;
395
+ border-radius: 4px;
396
+ box-shadow: var(---shadow-2-rotate);
397
+ }
398
+
399
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
400
+ input[type=range]:disabled::-ms-thumb {
401
+ background: var(---color-element-disabled);
402
+ box-shadow: none;
403
+ }
404
+
405
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
406
+ input[type=range]:enabled::-ms-thumb {
407
+ background: var(---color-element-enabled);
408
+ box-shadow: var(---shadow-2-rotate);
409
+ }
410
+
411
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
412
+ input[type=range]:enabled:hover::-ms-thumb {
413
+ box-shadow: var(---shadow-4-rotate);
414
+ }
415
+
416
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
417
+ input[type=range]:enabled:active::-ms-thumb {
418
+ box-shadow: var(---shadow-8-rotate);
419
+ }
420
+
421
+ /* stylelint-disable-next-line no-descending-specificity */ /* stylelint ERROR */
422
+ :host(.keyboard) input[type=range]:enabled:focus::-ms-thumb {
423
+ box-shadow: var(---shadow-4-rotate);
424
+ }
425
+
426
+ :host(.keyboard) input[type=range]:enabled:focus:active::-ms-thumb {
427
+ box-shadow: var(---shadow-8-rotate);
428
+ }
429
+ `]}render(){return D`
430
+ <label for="slider">
431
+ <slot></slot>
432
+ </label>
433
+ <div class="range">
434
+ <input type="range" id="slider" min=${xu(this.min)} max=${xu(this.max)} step=${xu(this.step)} .value=${this.value} @change=${this.changed.bind(this)} @input=${this.inputted.bind(this)}>
435
+ </div>
436
+ <decidables-spinner min=${xu(this.min)} max=${xu(this.max)} step=${xu(this.step)} .value=${this.value} @input=${this.inputted.bind(this)}></decidables-spinner>
437
+ `}});customElements.define("decidables-spinner",class extends Au{static get properties(){return{disabled:{attribute:"disabled",type:Boolean,reflect:!0},max:{attribute:"max",type:Number,reflect:!0},min:{attribute:"min",type:Number,reflect:!0},step:{attribute:"step",type:Number,reflect:!0},value:{attribute:"value",type:Number,reflect:!0}}}constructor(){super(),this.disabled=!1,this.max=void 0,this.min=void 0,this.step=void 0,this.value=void 0}inputted(t){this.value=t.target.value}static get styles(){return[super.styles,l`
438
+ :host {
439
+ ---decidables-spinner-font-size: var(--decidables-spinner-font-size, 1.125rem);
440
+ ---decidables-spinner-input-width: var(--decidables-spinner-input-width, 4rem);
441
+ ---decidables-spinner-prefix: var(--decidables-spinner-prefix, "");
442
+
443
+ ---decidables-spinner-postfix: var(--decidables-spinner-postfix, "");
444
+ ---decidables-spinner-postfix-padding: var(--decidables-spinner-postfix-padding, 0);
445
+
446
+ display: block;
447
+ }
448
+
449
+ label {
450
+ position: relative;
451
+ display: flex;
452
+
453
+ flex-direction: column;
454
+
455
+ align-items: center;
456
+
457
+ margin: 0;
458
+
459
+ font-size: 0.75rem;
460
+ }
461
+
462
+ label::before {
463
+ position: absolute;
464
+ bottom: 1px;
465
+ left: calc(50% - var(---decidables-spinner-input-width) / 2 + 0.25rem);
466
+
467
+ font-size: var(---decidables-spinner-font-size);
468
+ line-height: normal;
469
+
470
+ content: var(---decidables-spinner-prefix);
471
+ }
472
+
473
+ label::after {
474
+ position: absolute;
475
+ right: 0.25rem;
476
+ bottom: 1px;
477
+
478
+ font-size: var(---decidables-spinner-font-size);
479
+ line-height: normal;
480
+
481
+ content: var(---decidables-spinner-postfix);
482
+ }
483
+
484
+ input[type=number] {
485
+ width: var(---decidables-spinner-input-width);
486
+ padding-right: var(---decidables-spinner-postfix-padding);
487
+
488
+ font-family: var(---font-family-base);
489
+ font-size: var(---decidables-spinner-font-size);
490
+ color: inherit;
491
+ text-align: right;
492
+
493
+ background: none;
494
+ border: 0;
495
+ border-radius: 0;
496
+ outline: none;
497
+ box-shadow: var(---shadow-2);
498
+
499
+ -webkit-appearance: none; /* stylelint-disable-line property-no-vendor-prefix */
500
+ }
501
+
502
+ input[type=number]:hover {
503
+ box-shadow: var(---shadow-4);
504
+ }
505
+
506
+ input[type=number]:focus,
507
+ input[type=number]:active {
508
+ box-shadow: var(---shadow-8);
509
+ }
510
+
511
+ input[type=number]:disabled {
512
+ color: var(---color-text);
513
+
514
+ border: 0;
515
+ box-shadow: none;
516
+
517
+ /* HACK: Use correct text color in Safari */
518
+ -webkit-opacity: 1;
519
+ /* HACK: Hide spinners in disabled input for Firefox and Safari */
520
+ -moz-appearance: textfield; /* stylelint-disable-line property-no-vendor-prefix */
521
+ /* HACK: Use correct text color in Safari */
522
+ -webkit-text-fill-color: var(---color-text);
523
+ }
524
+
525
+ /* HACK: Hide spinners in disabled input for Firefox and Safari */
526
+ input[type=number]:disabled::-webkit-outer-spin-button,
527
+ input[type=number]:disabled::-webkit-inner-spin-button {
528
+ margin: 0;
529
+ -webkit-appearance: none; /* stylelint-disable-line property-no-vendor-prefix */
530
+ }
531
+ `]}render(){return D`
532
+ <label>
533
+ <slot></slot>
534
+ <input ?disabled=${this.disabled} type="number" min=${xu(this.min)} max=${xu(this.max)} step=${xu(this.step)} .value=${this.value} @input=${this.inputted.bind(this)}>
535
+ </label>
536
+ `}});customElements.define("decidables-switch",class extends Au{static get properties(){return{checked:{attribute:"checked",type:Boolean,reflect:!0},disabled:{attribute:"disabled",type:Boolean,reflect:!0}}}constructor(){super(),this.checked=!1,this.disabled=!1}changed(t){this.checked=t.target.checked,this.dispatchEvent(new CustomEvent("change",{detail:{checked:this.checked},bubbles:!0}))}static get styles(){return[super.styles,l`
537
+ :host {
538
+ display: flex;
539
+
540
+ flex-direction: column;
541
+
542
+ align-items: center;
543
+ justify-content: center;
544
+ }
545
+
546
+ /* Adapted from https://codepen.io/guuslieben/pen/YyPRVP */
547
+ input[type=checkbox] {
548
+ /* visuallyhidden: https://github.com/h5bp/html5-boilerplate/blob/master/dist/doc/css.md */
549
+ position: absolute;
550
+
551
+ width: 1px;
552
+ height: 1px;
553
+ padding: 0;
554
+ margin: -1px;
555
+ overflow: hidden;
556
+ clip: rect(0 0 0 0);
557
+
558
+ white-space: nowrap;
559
+
560
+ border: 0;
561
+ clip-path: inset(100%); /* May cause a performance issue: https://github.com/h5bp/html5-boilerplate/issues/2021 */
562
+ }
563
+
564
+ input[type=checkbox] + label {
565
+ order: 1;
566
+
567
+ margin: 0 0.25rem 0.25rem;
568
+
569
+ font-weight: 400;
570
+ }
571
+
572
+ input[type=checkbox] + label + label {
573
+ position: relative;
574
+
575
+ min-width: 24px;
576
+ padding: 0 0 36px;
577
+ margin: 0.25rem 0.25rem 0;
578
+
579
+ font-weight: 400;
580
+
581
+ outline: none;
582
+ }
583
+
584
+ input[type=checkbox] + label + label::before,
585
+ input[type=checkbox] + label + label::after {
586
+ position: absolute;
587
+
588
+ left: 50%;
589
+
590
+ margin: 0;
591
+
592
+ content: "";
593
+
594
+ outline: 0;
595
+
596
+ transition: all var(---transition-duration) ease;
597
+ transform: translate(-50%, 0);
598
+ }
599
+
600
+ input[type=checkbox] + label + label::before {
601
+ bottom: 1px;
602
+
603
+ width: 8px;
604
+ height: 34px;
605
+
606
+ background-color: var(---color-element-disabled);
607
+ border-radius: 4px;
608
+ }
609
+
610
+ input[type=checkbox] + label + label::after {
611
+ bottom: 0;
612
+
613
+ width: 18px;
614
+ height: 18px;
615
+
616
+ background-color: var(---color-element-enabled);
617
+ border-radius: 50%;
618
+ box-shadow: var(---shadow-2);
619
+ }
620
+
621
+ input[type=checkbox]:checked + label + label::after {
622
+ transform: translate(-50%, -100%);
623
+ }
624
+
625
+ input[type=checkbox]:disabled + label + label::after {
626
+ background-color: var(---color-element-disabled);
627
+ box-shadow: none;
628
+ }
629
+
630
+ input[type=checkbox]:enabled + label,
631
+ input[type=checkbox]:enabled + label + label {
632
+ cursor: pointer;
633
+ }
634
+
635
+ input[type=checkbox]:enabled + label:hover + label::after,
636
+ input[type=checkbox]:enabled + label + label:hover::after {
637
+ box-shadow: var(---shadow-4);
638
+ }
639
+
640
+ input[type=checkbox]:enabled + label:active + label::after,
641
+ input[type=checkbox]:enabled + label + label:active::after {
642
+ box-shadow: var(---shadow-8);
643
+ }
644
+
645
+ /* stylelint-disable-next-line selector-max-compound-selectors */
646
+ :host(.keyboard) input[type=checkbox]:enabled:focus + label + label::after {
647
+ box-shadow: var(---shadow-4);
648
+ }
649
+
650
+ /* stylelint-disable-next-line selector-max-compound-selectors */
651
+ :host(.keyboard) input[type=checkbox]:enabled:focus + label + label:active::after,
652
+ :host(.keyboard) input[type=checkbox]:enabled:focus:active + label + label::after {
653
+ box-shadow: var(---shadow-8);
654
+ }
655
+ `]}render(){return D`
656
+ <input type="checkbox" id="switch" ?checked=${this.checked} ?disabled=${this.disabled} @change=${this.changed.bind(this)}>
657
+ <label for="switch">
658
+ <slot name="off-label"></slot>
659
+ </label>
660
+ <label for="switch">
661
+ <slot></slot>
662
+ </label>
663
+ `}});customElements.define("decidables-toggle",class extends Au{static get properties(){return{disabled:{attribute:"disabled",type:Boolean,reflect:!0}}}constructor(){super(),this.disabled=!1}static get styles(){return[super.styles,l`
664
+ fieldset {
665
+ display: flex;
666
+
667
+ flex-direction: column;
668
+
669
+ align-items: stretch;
670
+ justify-content: center;
671
+
672
+ margin: 0.25rem;
673
+
674
+ border: 0;
675
+ }
676
+
677
+ legend {
678
+ text-align: center;
679
+ }
680
+ `]}render(){return D`
681
+ <fieldset ?disabled=${this.disabled}>
682
+ <legend><slot name="label"></slot></legend>
683
+ <slot></slot>
684
+ </fieldset>
685
+ `}});customElements.define("decidables-toggle-option",class extends Au{static get properties(){return{checked:{attribute:"checked",type:Boolean,reflect:!0},disabled:{attribute:"disabled",type:Boolean,reflect:!0},name:{attribute:"name",type:String,reflect:!0},value:{attribute:"value",type:String,reflect:!0}}}constructor(){super(),this.checked=!1,this.disabled=!1,this.name=void 0,this.value=void 0}changed(t){this.checked=t.target.checked,this.dispatchEvent(new CustomEvent("change",{detail:{checked:this.checked,value:this.value},bubbles:!0}))}static get styles(){return[super.styles,l`
686
+ :host {
687
+ display: flex;
688
+ }
689
+
690
+ input[type=radio] {
691
+ /* visuallyhidden: https://github.com/h5bp/html5-boilerplate/blob/master/dist/doc/css.md */
692
+ position: absolute;
693
+
694
+ width: 1px;
695
+ height: 1px;
696
+ padding: 0;
697
+ margin: -1px;
698
+ overflow: hidden;
699
+ clip: rect(0 0 0 0);
700
+
701
+ white-space: nowrap;
702
+
703
+ border: 0;
704
+ clip-path: inset(100%); /* May cause a performance issue: https://github.com/h5bp/html5-boilerplate/issues/2021 */
705
+ }
706
+
707
+ input[type=radio] + label {
708
+ width: 100%;
709
+ padding: 0.375rem 0.75rem;
710
+
711
+ font-family: var(---font-family-base);
712
+ font-size: 1.125rem;
713
+ line-height: 1.5;
714
+ color: var(---color-text-inverse);
715
+ text-align: center;
716
+
717
+ cursor: pointer;
718
+
719
+ background-color: var(---color-element-enabled);
720
+ border: 0;
721
+ border-radius: 0;
722
+ outline: none;
723
+
724
+ box-shadow: var(---shadow-2);
725
+ }
726
+
727
+ input[type=radio]:checked + label {
728
+ background-color: var(---color-element-selected);
729
+ outline: none;
730
+ box-shadow: var(---shadow-2);
731
+ }
732
+
733
+ input[type=radio] + label:hover {
734
+ z-index: 1;
735
+
736
+ outline: none;
737
+ box-shadow: var(---shadow-4);
738
+ }
739
+
740
+ input[type=radio] + label:active {
741
+ z-index: 2;
742
+
743
+ outline: none;
744
+ box-shadow: var(---shadow-8);
745
+ }
746
+
747
+ :host(:first-of-type) input[type=radio] + label {
748
+ border-top-left-radius: 0.25rem;
749
+ border-top-right-radius: 0.25rem;
750
+ }
751
+
752
+ :host(:last-of-type) input[type=radio] + label {
753
+ border-bottom-right-radius: 0.25rem;
754
+ border-bottom-left-radius: 0.25rem;
755
+ }
756
+
757
+ :host(.keyboard) input[type=radio]:focus + label {
758
+ z-index: 1;
759
+
760
+ outline: none;
761
+ box-shadow: var(---shadow-4);
762
+ }
763
+
764
+ :host(.keyboard) input[type=radio]:focus:checked + label {
765
+ z-index: 1;
766
+
767
+ background-color: var(---color-element-selected);
768
+ outline: none;
769
+ box-shadow: var(---shadow-4);
770
+ }
771
+
772
+ :host(.keyboard) input[type=radio]:focus + label:active {
773
+ z-index: 2;
774
+
775
+ outline: none;
776
+ box-shadow: var(---shadow-8);
777
+ }
778
+ `]}render(){return D`
779
+ <input type="radio" id="toggle-option" name=${this.name} value=${this.value} .checked=${this.checked} @change=${this.changed.bind(this)}>
780
+ <label for="toggle-option">
781
+ <slot></slot>
782
+ </label>
783
+ `}});class Lu extends Au{static get properties(){return{interactive:{attribute:"interactive",type:Boolean,reflect:!0}}}constructor(){super(),this.interactive=!1}static get colors(){return{a:Dd[0],d:Dd[1],k:Dd[2],v:Dd[3],chosen:Dd[8],better:"#4545d0",worse:"#f032e6",even:"#10dbc9",correct:"#ffffff",error:"#000000",nr:"#cccccc"}}static get lights(){return Object.keys(Lu.colors).reduce(((t,e)=>(t[e]=Cs(Lu.colors[e],"#ffffff")(.5),t)),{})}static get darks(){return Object.keys(Lu.colors).reduce(((t,e)=>(t[e]=Cs(Lu.colors[e],"#000000")(.5),t)),{})}static get styles(){return[super.styles,l`
784
+ :host {
785
+ ---color-a: var(--color-a, ${a(this.colors.a)});
786
+ ---color-d: var(--color-d, ${a(this.colors.d)});
787
+ ---color-k: var(--color-k, ${a(this.colors.k)});
788
+ ---color-v: var(--color-v, ${a(this.colors.v)});
789
+ ---color-chosen: var(--color-chosen, ${a(this.colors.chosen)});
790
+ ---color-better: var(--color-better, ${a(this.colors.better)});
791
+ ---color-worse: var(--color-worse, ${a(this.colors.worse)});
792
+ ---color-even: var(--color-even, ${a(this.colors.even)});
793
+ ---color-correct: var(--color-correct, ${a(this.colors.correct)});
794
+ ---color-error: var(--color-error, ${a(this.colors.error)});
795
+ ---color-nr: var(--color-nr, ${a(this.colors.nr)});
796
+
797
+ ---color-a-light: var(--color-a-light, ${a(this.lights.a)});
798
+ ---color-d-light: var(--color-d-light, ${a(this.lights.d)});
799
+ ---color-k-light: var(--color-k-light, ${a(this.lights.k)});
800
+ ---color-v-light: var(--color-v-light, ${a(this.lights.v)});
801
+ ---color-chosen-light: var(--color-chosen-light, ${a(this.lights.chosen)});
802
+ ---color-better-light: var(--color-better-light, ${a(this.lights.better)});
803
+ ---color-worse-light: var(--color-worse-light, ${a(this.lights.worse)});
804
+ ---color-even-light: var(--color-even-light, ${a(this.lights.even)});
805
+ ---color-correct-light: var(--color-correct-light, ${a(this.lights.correct)});
806
+ ---color-error-light: var(--color-error-light, ${a(this.lights.error)});
807
+ ---color-nr-light: var(--color-nr-light, ${a(this.lights.nr)});
808
+
809
+ ---color-a-dark: var(--color-a-dark, ${a(this.darks.a)});
810
+ ---color-d-dark: var(--color-d-dark, ${a(this.darks.d)});
811
+ ---color-k-dark: var(--color-k-dark, ${a(this.darks.k)});
812
+ ---color-v-dark: var(--color-v-dark, ${a(this.darks.v)});
813
+ ---color-chosen-dark: var(--color-chosen-dark, ${a(this.darks.chosen)});
814
+ ---color-better-dark: var(--color-better-dark, ${a(this.darks.better)});
815
+ ---color-worse-dark: var(--color-worse-dark, ${a(this.darks.worse)});
816
+ ---color-even-dark: var(--color-even-dark, ${a(this.darks.even)});
817
+ ---color-correct-dark: var(--color-correct-dark, ${a(this.darks.correct)});
818
+ ---color-error-dark: var(--color-error-dark, ${a(this.darks.error)});
819
+ ---color-nr-dark: var(--color-nr-dark, ${a(this.darks.nr)});
820
+ }
821
+ `]}}class Su extends Lu{static get properties(){return{trials:{attribute:"trials",type:Number,reflect:!0},duration:{attribute:"duration",type:Number,reflect:!0},run:{attribute:"run",type:Boolean,reflect:!0},pause:{attribute:"pause",type:Boolean,reflect:!0},reset:{attribute:"reset",type:Boolean,reflect:!0},state:{atribute:!1,type:String,reflect:!1}}}constructor(){super(),this.trials=void 0,this.duration=void 0,this.run=!1,this.pause=!1,this.reset=!1,this.states=["resetted","running","paused","ended"],this.state="resetted"}setTrials(t){this.trials=t.target.value,this.dispatchEvent(new CustomEvent("discountable-control-trials",{detail:{trials:this.trials},bubbles:!0}))}setDuration(t){this.duration=t.target.value,this.dispatchEvent(new CustomEvent("discountable-control-duration",{detail:{duration:this.duration},bubbles:!0}))}doRun(){this.state="running",this.dispatchEvent(new CustomEvent("discountable-control-run",{detail:{},bubbles:!0}))}doPause(){this.state="paused",this.dispatchEvent(new CustomEvent("discountable-control-pause",{detail:{},bubbles:!0}))}doReset(){this.state="resetted",this.dispatchEvent(new CustomEvent("discountable-control-reset",{detail:{},bubbles:!0}))}complete(){this.state="ended"}static get styles(){return[super.styles,l`
822
+ :host {
823
+ display: inline-block;
824
+ }
825
+
826
+ .holder {
827
+ display: flex;
828
+
829
+ flex-direction: row;
830
+
831
+ align-items: stretch;
832
+ justify-content: center;
833
+ }
834
+
835
+ .buttons {
836
+ display: flex;
837
+
838
+ flex-direction: column;
839
+
840
+ align-items: stretch;
841
+ justify-content: center;
842
+ }
843
+ `]}render(){return D`
844
+ <div class="holder">
845
+ ${this.trials?D`<decidables-slider min="1" max="100" step="1" .value=${this.trials} @change=${this.setTrials.bind(this)} @input=${this.setTrials.bind(this)}>Trials</decidables-slider>`:D``}
846
+ ${this.duration?D`<decidables-slider min="10" max="4000" step="10" .value=${this.duration} @change=${this.setDuration.bind(this)} @input=${this.setDuration.bind(this)}>Duration</decidables-slider>`:D``}
847
+ ${this.run||this.pause||this.reset?D`
848
+ <div class="buttons">
849
+ ${this.run?D`<decidables-button name="run" ?disabled=${"running"===this.state||"ended"===this.state} @click=${this.doRun.bind(this)}>Run</decidables-button>`:D``}
850
+ ${this.pause?D`<decidables-button name="pause" ?disabled=${"running"!==this.state} @click=${this.doPause.bind(this)}>Pause</decidables-button>`:D``}
851
+ ${this.reset?D`<decidables-button name="reset" ?disabled=${"resetted"===this.state} @click=${this.doReset.bind(this)}>Reset</decidables-button>`:D``}
852
+ </div>
853
+ `:D``}
854
+ </div>`}}customElements.define("discountable-control",Su);class Ru extends Lu{static get properties(){return{trial:{attribute:"trial",type:Boolean,reflect:!0},feedback:{attribute:"feedback",type:Boolean,reflect:!0},state:{attribute:!1,type:String,reflect:!1},trialCount:{attribute:!1,type:Number,reflect:!1},trialTotal:{attribute:!1,type:Number,reflect:!1}}}constructor(){super(),this.trial=!1,this.feedback=!1,this.states=["off","waiting","feedback"],this.state="off",this.trialCount=0,this.trialTotal=0,this.as=0,this.ds=0,this.al=0,this.dl=0,this.responses=["first","second","nr"],this.response=void 0}start(t,e,n,i,s){this.state="waiting",this.as=t,this.ds=e,this.al=n,this.dl=i,this.trialCount=s,this.response=void 0}stop(){this.state="feedback",void 0===this.response&&(this.response="nr")}first(){this.responded("first")}second(){this.responded("second")}responded(t){this.state="feedback",this.response=t,this.dispatchEvent(new CustomEvent("discountable-response",{detail:{trial:this.trialCount,as:this.as,ds:this.ds,al:this.al,dl:this.dl,response:this.response},bubbles:!0}))}reset(){this.state="off",this.trialCount=0,this.response=void 0}static get styles(){return[super.styles,l`
855
+ :host {
856
+ display: inline-block;
857
+ }
858
+
859
+ /* Overall container */
860
+ .holder {
861
+ display: flex;
862
+
863
+ flex-direction: column;
864
+ }
865
+
866
+ /* Trial messages */
867
+ .trials {
868
+ display: flex;
869
+
870
+ flex-direction: column;
871
+
872
+ justify-content: center;
873
+ }
874
+
875
+ .trial {
876
+ text-align: center;
877
+ }
878
+
879
+ .trial .label {
880
+ font-weight: 600;
881
+ }
882
+
883
+ /* Response buttons */
884
+ .responses {
885
+ display: flex;
886
+
887
+ flex-direction: row;
888
+
889
+ align-items: stretch;
890
+ justify-content: center;
891
+ }
892
+
893
+ .response {
894
+ width: 5.25rem;
895
+ }
896
+
897
+ .waiting[disabled] {
898
+ --decidables-button-background-color: var(---color-element-enabled);
899
+ }
900
+
901
+ .selected[disabled][name="first"] {
902
+ --decidables-button-background-color: var(---color-worse);
903
+ }
904
+
905
+ .selected[disabled][name="second"] {
906
+ --decidables-button-background-color: var(---color-better);
907
+ }
908
+
909
+ /* Feedback messages */
910
+ .feedbacks {
911
+ display: flex;
912
+
913
+ flex-direction: row;
914
+
915
+ justify-content: center;
916
+ }
917
+
918
+ /* Outcome feedback */
919
+ .feedback {
920
+ display: flex;
921
+
922
+ flex-direction: column;
923
+
924
+ align-items: center;
925
+ justify-content: center;
926
+
927
+ width: 5.25rem;
928
+ height: 3.5rem;
929
+ padding: 0.375rem 0.75rem;
930
+ margin: 0.25rem;
931
+
932
+ text-align: center;
933
+
934
+ background-color: var(---color-element-background);
935
+ border: 1px solid var(---color-element-border);
936
+ }
937
+
938
+ .feedback.first {
939
+ background-color: var(---color-worse-light);
940
+ }
941
+
942
+ .feedback.second {
943
+ background-color: var(---color-better-light);
944
+ }
945
+
946
+ .feedback.nr {
947
+ background-color: var(---color-nr-light);
948
+ }
949
+ `]}render(){return D`
950
+ <div class="holder">
951
+ ${this.trial?D`
952
+ <div class="trials">
953
+ <div class="trial">
954
+ <span class="label">Trial: </span
955
+ ><span class="count">${this.trialCount}</span
956
+ ><span class="of"> of </span
957
+ ><span class="total">${this.trialTotal}</span>
958
+ </div>
959
+ </div>`:D``}
960
+ <div class="responses">
961
+ <decidables-button
962
+ name="first"
963
+ class="response ${"feedback"===this.state&&"first"===this.response?"selected":"waiting"===this.state?"waiting":""}"
964
+ ?disabled=${"waiting"!==this.state||!0!==this.interactive}
965
+ @click=${this.first.bind(this)}
966
+ >First</decidables-button>
967
+ <decidables-button
968
+ name="second"
969
+ class="response ${"feedback"===this.state&&"second"===this.response?"selected":"waiting"===this.state?"waiting":""}"
970
+ ?disabled=${"waiting"!==this.state||!0!==this.interactive}
971
+ @click=${this.second.bind(this)}
972
+ >Second</decidables-button>
973
+ </div>
974
+ ${this.feedback?D`
975
+ <div class="feedbacks">
976
+ <div class="feedback
977
+ ${"feedback"===this.state&&this.feedback?this.response:""}">
978
+ ${"feedback"===this.state&&this.feedback?"first"===this.response?D`<span class="response">First</span>`:"second"===this.response?D`<span class="response">Second</span>`:D`<span class="response">No<br>Response</span>`:""}
979
+ </div>
980
+ </div>`:D``}
981
+ </div>`}}customElements.define("discountable-response",Ru);
982
+ /**
983
+ * @license
984
+ * Copyright 2017 Google LLC
985
+ * SPDX-License-Identifier: BSD-3-Clause
986
+ */
987
+ const Xu=2;let vu=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,n){this._$Ct=t,this._$AM=e,this._$Ci=n}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};
988
+ /**
989
+ * @license
990
+ * Copyright 2020 Google LLC
991
+ * SPDX-License-Identifier: BSD-3-Clause
992
+ */const Nu=(t,e)=>{var n,i;const s=t._$AN;if(void 0===s)return!1;for(const t of s)null===(i=(n=t)._$AO)||void 0===i||i.call(n,e,!1),Nu(t,e);return!0},Zu=t=>{let e,n;do{if(void 0===(e=t._$AM))break;n=e._$AN,n.delete(t),t=e}while(0===(null==n?void 0:n.size))},Eu=t=>{for(let e;e=t._$AM;t=e){let n=e._$AN;if(void 0===n)e._$AN=n=new Set;else if(n.has(t))break;n.add(t),Wu(e)}};
993
+ /**
994
+ * @license
995
+ * Copyright 2017 Google LLC
996
+ * SPDX-License-Identifier: BSD-3-Clause
997
+ */function Vu(t){void 0!==this._$AN?(Zu(this),this._$AM=t,Eu(this)):this._$AM=t}function wu(t,e=!1,n=0){const i=this._$AH,s=this._$AN;if(void 0!==s&&0!==s.size)if(e)if(Array.isArray(i))for(let t=n;t<i.length;t++)Nu(i[t],!1),Zu(i[t]);else null!=i&&(Nu(i,!1),Zu(i));else Nu(this,t)}const Wu=t=>{var e,n,i,s;t.type==Xu&&(null!==(e=(i=t)._$AP)&&void 0!==e||(i._$AP=wu),null!==(n=(s=t)._$AQ)&&void 0!==n||(s._$AQ=Vu))};class Hu extends vu{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,n){super._$AT(t,e,n),Eu(this),this.isConnected=t._$AU}_$AO(t,e=!0){var n,i;t!==this.isConnected&&(this.isConnected=t,t?null===(n=this.reconnected)||void 0===n||n.call(this):null===(i=this.disconnected)||void 0===i||i.call(this)),e&&(Nu(this,t),Zu(this))}setValue(t){if((t=>void 0===t.strings)(this._$Ct))this._$Ct._$AI(t,this);else{const e=[...this._$Ct._$AH];e[this._$Ci]=t,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}}const Du=new WeakMap;let Yu=0;const ku=new Map,Ju=new WeakSet,Mu=()=>new Promise((t=>requestAnimationFrame(t))),Tu=[{opacity:0},{opacity:1}],zu=(t,e)=>{const n=t-e;return 0===n?void 0:n},Ku=(t,e)=>{const n=t/e;return 1===n?void 0:n},Ou={left:(t,e)=>{const n=zu(t,e);return{value:n,transform:null==n||isNaN(n)?void 0:`translateX(${n}px)`}},top:(t,e)=>{const n=zu(t,e);return{value:n,transform:null==n||isNaN(n)?void 0:`translateY(${n}px)`}},width:(t,e)=>{let n;0===e&&(e=1,n={width:"1px"});const i=Ku(t,e);return{value:i,overrideFrom:n,transform:null==i||isNaN(i)?void 0:`scaleX(${i})`}},height:(t,e)=>{let n;0===e&&(e=1,n={height:"1px"});const i=Ku(t,e);return{value:i,overrideFrom:n,transform:null==i||isNaN(i)?void 0:`scaleY(${i})`}}},_u={duration:333,easing:"ease-in-out"},Pu=["left","top","width","height","opacity","color","background"],ju=new WeakMap;const $u=(t=>(...e)=>({_$litDirective$:t,values:e}))(class extends Hu{constructor(t){if(super(t),this.t=null,this.i=null,this.o=!0,this.shouldLog=!1,t.type===Xu)throw Error("The `animate` directive must be used in attribute position.");this.createFinished()}createFinished(){var t;null===(t=this.resolveFinished)||void 0===t||t.call(this),this.finished=new Promise((t=>{this.h=t}))}async resolveFinished(){var t;null===(t=this.h)||void 0===t||t.call(this),this.h=void 0}render(t){return J}getController(){return Du.get(this.l)}isDisabled(){var t;return this.options.disabled||(null===(t=this.getController())||void 0===t?void 0:t.disabled)}update(t,[e]){var n;const i=void 0===this.l;return i&&(this.l=null===(n=t.options)||void 0===n?void 0:n.host,this.l.addController(this),this.element=t.element,ju.set(this.element,this)),this.optionsOrCallback=e,(i||"function"!=typeof e)&&this.u(e),this.render(e)}u(t){var e,n;t=null!=t?t:{};const i=this.getController();void 0!==i&&((t={...i.defaultOptions,...t}).keyframeOptions={...i.defaultOptions.keyframeOptions,...t.keyframeOptions}),null!==(e=(n=t).properties)&&void 0!==e||(n.properties=Pu),this.options=t}v(){const t={},e=this.element.getBoundingClientRect(),n=getComputedStyle(this.element);return this.options.properties.forEach((i=>{var s;const c=null!==(s=e[i])&&void 0!==s?s:Ou[i]?void 0:n[i],a=Number(c);t[i]=isNaN(a)?c+"":a})),t}p(){let t,e=!0;return this.options.guard&&(t=this.options.guard(),e=((t,e)=>{if(Array.isArray(t)){if(Array.isArray(e)&&e.length===t.length&&t.every(((t,n)=>t===e[n])))return!1}else if(e===t)return!1;return!0})(t,this.m)),this.o=this.l.hasUpdated&&!this.isDisabled()&&!this.isAnimating()&&e&&this.element.isConnected,this.o&&(this.m=Array.isArray(t)?Array.from(t):t),this.o}hostUpdate(){var t;"function"==typeof this.optionsOrCallback&&this.u(this.optionsOrCallback()),this.p()&&(this.g=this.v(),this.t=null!==(t=this.t)&&void 0!==t?t:this.element.parentNode,this.i=this.element.nextSibling)}async hostUpdated(){if(!this.o||!this.element.isConnected||this.options.skipInitial&&!this.isHostRendered)return;let t;this.prepare(),await Mu;const e=this._(),n=this.A(this.options.keyframeOptions,e),i=this.v();if(void 0!==this.g){const{from:n,to:s}=this.O(this.g,i,e);this.log("measured",[this.g,i,n,s]),t=this.calculateKeyframes(n,s)}else{const n=ku.get(this.options.inId);if(n){ku.delete(this.options.inId);const{from:s,to:c}=this.O(n,i,e);t=this.calculateKeyframes(s,c),t=this.options.in?[{...this.options.in[0],...t[0]},...this.options.in.slice(1),t[1]]:t,Yu++,t.forEach((t=>t.zIndex=Yu))}else this.options.in&&(t=[...this.options.in,{}])}this.animate(t,n)}resetStyles(){var t;void 0!==this.j&&(this.element.setAttribute("style",null!==(t=this.j)&&void 0!==t?t:""),this.j=void 0)}commitStyles(){var t,e;this.j=this.element.getAttribute("style"),null===(t=this.webAnimation)||void 0===t||t.commitStyles(),null===(e=this.webAnimation)||void 0===e||e.cancel()}reconnected(){}async disconnected(){var t;if(!this.o)return;if(void 0!==this.options.id&&ku.set(this.options.id,this.g),void 0===this.options.out)return;if(this.prepare(),await Mu(),null===(t=this.t)||void 0===t?void 0:t.isConnected){const t=this.i&&this.i.parentNode===this.t?this.i:null;if(this.t.insertBefore(this.element,t),this.options.stabilizeOut){const t=this.v();this.log("stabilizing out");const e=this.g.left-t.left,n=this.g.top-t.top;!("static"===getComputedStyle(this.element).position)||0===e&&0===n||(this.element.style.position="relative"),0!==e&&(this.element.style.left=e+"px"),0!==n&&(this.element.style.top=n+"px")}}const e=this.A(this.options.keyframeOptions);await this.animate(this.options.out,e),this.element.remove()}prepare(){this.createFinished()}start(){var t,e;null===(e=(t=this.options).onStart)||void 0===e||e.call(t,this)}didFinish(t){var e,n;t&&(null===(n=(e=this.options).onComplete)||void 0===n||n.call(e,this)),this.g=void 0,this.animatingProperties=void 0,this.frames=void 0,this.resolveFinished()}_(){const t=[];for(let e=this.element.parentNode;e;e=null==e?void 0:e.parentNode){const n=ju.get(e);n&&!n.isDisabled()&&n&&t.push(n)}return t}get isHostRendered(){const t=Ju.has(this.l);return t||this.l.updateComplete.then((()=>{Ju.add(this.l)})),t}A(t,e=this._()){const n={..._u};return e.forEach((t=>Object.assign(n,t.options.keyframeOptions))),Object.assign(n,t),n}O(t,e,n){t={...t},e={...e};const i=n.map((t=>t.animatingProperties)).filter((t=>void 0!==t));let s=1,c=1;return void 0!==i&&(i.forEach((t=>{t.width&&(s/=t.width),t.height&&(c/=t.height)})),void 0!==t.left&&void 0!==e.left&&(t.left=s*t.left,e.left=s*e.left),void 0!==t.top&&void 0!==e.top&&(t.top=c*t.top,e.top=c*e.top)),{from:t,to:e}}calculateKeyframes(t,e,n=!1){var i;const s={},c={};let a=!1;const l={};for(const n in e){const r=t[n],o=e[n];if(n in Ou){const t=Ou[n];if(void 0===r||void 0===o)continue;const e=t(r,o);void 0!==e.transform&&(l[n]=e.value,a=!0,s.transform=`${null!==(i=s.transform)&&void 0!==i?i:""} ${e.transform}`,void 0!==e.overrideFrom&&Object.assign(s,e.overrideFrom))}else r!==o&&void 0!==r&&void 0!==o&&(a=!0,s[n]=r,c[n]=o)}return s.transformOrigin=c.transformOrigin=n?"center center":"top left",this.animatingProperties=l,a?[s,c]:void 0}async animate(t,e=this.options.keyframeOptions){this.start(),this.frames=t;let n=!1;if(!this.isAnimating()&&!this.isDisabled()&&(this.options.onFrames&&(this.frames=t=this.options.onFrames(this),this.log("modified frames",t)),void 0!==t)){this.log("animate",[t,e]),n=!0,this.webAnimation=this.element.animate(t,e);const i=this.getController();null==i||i.add(this);try{await this.webAnimation.finished}catch(t){}null==i||i.remove(this)}return this.didFinish(n),n}isAnimating(){var t,e;return"running"===(null===(t=this.webAnimation)||void 0===t?void 0:t.playState)||(null===(e=this.webAnimation)||void 0===e?void 0:e.pending)}log(t,e){this.shouldLog&&!this.isDisabled()&&console.log(t,this.options.id,e)}});class qu{static adk2v(t,e,n){return t/(1+n*e)}static adv2k(t,e,n){return(t-n)/(n*e)}}class tF extends Lu{static get properties(){return{numeric:{attribute:"numeric",type:Boolean,reflect:!0}}}constructor(){super(),this.numeric=!1}static get styles(){return[super.styles,l`
998
+ :host {
999
+ display: block;
1000
+
1001
+ margin: 1rem;
1002
+ }
1003
+
1004
+ /* Containing <div> */
1005
+ .holder {
1006
+ display: flex;
1007
+
1008
+ flex-direction: row;
1009
+
1010
+ justify-content: left;
1011
+ }
1012
+
1013
+ /* Overall <table> */
1014
+ .equation {
1015
+ text-align: center;
1016
+ white-space: nowrap;
1017
+
1018
+ border-collapse: collapse;
1019
+
1020
+ border: 0;
1021
+ }
1022
+
1023
+ /* Modifies <td> */
1024
+ .underline {
1025
+ border-bottom: 1px solid var(---color-text);
1026
+ }
1027
+
1028
+ /* Basic <span> and <var> w/modifiers */
1029
+ span,
1030
+ var {
1031
+ padding: 0 0.25rem;
1032
+
1033
+ font-style: normal;
1034
+ }
1035
+
1036
+ var {
1037
+ border-radius: var(---border-radius);
1038
+ }
1039
+
1040
+ .tight {
1041
+ padding: 0;
1042
+ }
1043
+
1044
+ .paren {
1045
+ font-size: 150%;
1046
+ }
1047
+
1048
+ .bracket {
1049
+ font-size: 175%;
1050
+ }
1051
+
1052
+ .brace {
1053
+ font-size: 200%;
1054
+ }
1055
+
1056
+ .addend {
1057
+ position: relative;
1058
+ display: inline-block;
1059
+ }
1060
+
1061
+ .comparison {
1062
+ position: relative;
1063
+ display: inline-block;
1064
+
1065
+ font-size: 125%;
1066
+ font-weight: 600;
1067
+ }
1068
+
1069
+ .function {
1070
+ display: inline-block;
1071
+
1072
+ border-radius: var(---border-radius);
1073
+ }
1074
+
1075
+ :host([numeric]) .function {
1076
+ padding: 0.25rem;
1077
+ }
1078
+
1079
+ .exp {
1080
+ display: inline-block;
1081
+
1082
+ font-size: 0.75rem;
1083
+ }
1084
+
1085
+ .subscript {
1086
+ display: inline-block;
1087
+
1088
+ font-size: 66.667%;
1089
+ }
1090
+
1091
+ .summation {
1092
+ display: flex;
1093
+
1094
+ flex-direction: column;
1095
+
1096
+ line-height: 0.8;
1097
+ }
1098
+
1099
+ .sigma {
1100
+ display: inline-block;
1101
+
1102
+ font-size: 200%;
1103
+ }
1104
+
1105
+ /* Input wrapping <label> */
1106
+ decidables-spinner {
1107
+ --decidables-spinner-input-width: 4rem;
1108
+
1109
+ display: inline-block;
1110
+
1111
+ padding: 0.125rem 0.375rem 0.375rem;
1112
+
1113
+ line-height: 1.5;
1114
+ vertical-align: middle;
1115
+
1116
+ border-radius: var(---border-radius);
1117
+ }
1118
+
1119
+ .n {
1120
+ --decidables-spinner-input-width: 2rem;
1121
+ }
1122
+
1123
+ .left {
1124
+ text-align: left;
1125
+ }
1126
+
1127
+ .right {
1128
+ text-align: right;
1129
+ }
1130
+
1131
+ .bottom {
1132
+ vertical-align: bottom;
1133
+ }
1134
+
1135
+ .top {
1136
+ vertical-align: top;
1137
+ }
1138
+
1139
+ /* Color scheme */
1140
+ /* .win {
1141
+ background: var(---color-better);
1142
+ }
1143
+
1144
+ .loss {
1145
+ background: var(---color-worse);
1146
+ }
1147
+
1148
+ .sure {
1149
+ background: var(---color-even);
1150
+ } */
1151
+
1152
+ .a {
1153
+ background: var(---color-a-light);
1154
+ }
1155
+
1156
+ .d {
1157
+ background: var(---color-d-light);
1158
+ }
1159
+
1160
+ .k {
1161
+ background: var(---color-k-light);
1162
+ }
1163
+
1164
+ .v {
1165
+ background: var(---color-v-light);
1166
+ }
1167
+ `]}}class eF extends tF{static get properties(){return{numeric:{attribute:"numeric",type:Boolean,reflect:!0},as:{attribute:"amount-ss",type:Number,reflect:!0},ds:{attribute:"delay-ss",type:Number,reflect:!0},al:{attribute:"amount-ll",type:Number,reflect:!0},dl:{attribute:"delay-ll",type:Number,reflect:!0},k:{attribute:"k",type:Number,reflect:!0}}}constructor(){super(),this.numeric=!1,this.as=20,this.ds=5,this.al=50,this.dl=40,this.k=.1,this.alignState()}alignState(){this.vs=qu.adk2v(this.as,this.ds,this.k),this.vl=qu.adk2v(this.al,this.dl,this.k),this.vDiff=this.vs-this.vl}sendEvent(){this.dispatchEvent(new CustomEvent("htd-calculation-change",{detail:{as:this.as,ds:this.ds,al:this.al,dl:this.dl,k:this.k},bubbles:!0}))}asInput(t){this.as=parseFloat(t.target.value),this.alignState(),this.sendEvent()}dsInput(t){this.ds=parseFloat(t.target.value),this.alignState(),this.sendEvent()}alInput(t){this.al=parseFloat(t.target.value),this.alignState(),this.sendEvent()}dlInput(t){this.dl=parseFloat(t.target.value),this.alignState(),this.sendEvent()}kInput(t){this.k=parseFloat(t.target.value),this.alignState(),this.sendEvent()}static get styles(){return[super.styles,l`
1168
+ /* :host {
1169
+ display: inline-block;
1170
+ } */
1171
+
1172
+ var {
1173
+ border-radius: var(---border-radius);
1174
+ }
1175
+
1176
+ decidables-spinner {
1177
+ border-radius: var(---border-radius);
1178
+ }
1179
+ `]}render(){let t,e,n,i,s,c,a,l;this.alignState(),this.numeric?(t=D`<decidables-spinner class="a as" ?disabled=${!this.interactive} step="1" .value="${this.as}" @input=${this.asInput.bind(this)}>
1180
+ <var class="math-var">A<sub class="subscript">ss</sub></var>
1181
+ </decidables-spinner>`,e=D`<decidables-spinner class="d ds" ?disabled=${!this.interactive} min="0" step="1" .value="${this.ds}" @input=${this.dsInput.bind(this)}>
1182
+ <var class="math-var">D<sub class="subscript">ss</sub></var>
1183
+ </decidables-spinner>`,n=D`<decidables-spinner class="a al" ?disabled=${!this.interactive} step="1" .value="${this.al}" @input=${this.alInput.bind(this)}>
1184
+ <var class="math-var">A<sub class="subscript">ll</sub></var>
1185
+ </decidables-spinner>`,i=D`<decidables-spinner class="d dl" ?disabled=${!this.interactive} min="0" step="1" .value="${this.dl}" @input=${this.dlInput.bind(this)}>
1186
+ <var class="math-var">D<sub class="subscript">ll</sub></var>
1187
+ </decidables-spinner>`,s=D`<decidables-spinner class="k" ?disabled=${!this.interactive} min="0" max="100" step=".001" .value="${this.k}" @input=${this.kInput.bind(this)}>
1188
+ <var class="math-var">k</var>
1189
+ </decidables-spinner>`,c=D`<decidables-spinner class="v vs" disabled .value="${+this.vs.toFixed(2)}">
1190
+ <var class="math-var">V<sub class="subscript">ss</sub></var>
1191
+ </decidables-spinner>`,a=D`<decidables-spinner class="v vl" disabled .value="${+this.vl.toFixed(2)}">
1192
+ <var class="math-var">V<sub class="subscript">ll</sub></var>
1193
+ </decidables-spinner>`,l=D`${this.vDiff>0?D`<span class="comparison" ${$u({in:Tu})}>&gt;</span>`:this.vDiff<0?D`<span class="comparison" ${$u({in:Tu})}>&lt;</span>`:D`<span class="comparison" ${$u({in:Tu})}>=</span>`}`):(t=D`<var class="math-var a as">A<sub class="subscript">ss</sub></var>`,e=D`<var class="math-var d ds">D<sub class="subscript">ss</sub></var>`,n=D`<var class="math-var a al">A<sub class="subscript">ll</sub></var>`,i=D`<var class="math-var d dl">D<sub class="subscript">ll</sub></var>`,s=D`<var class="math-var k">k</var>`,c=D`<var class="math-var v vs">V<sub class="subscript">ss</sub></var>`,a=D`<var class="math-var v vl">V<sub class="subscript">ll</sub></var>`,l=D`<span class="comparison">≟</span>`);const r=D`
1194
+ <tr>
1195
+ <td class="underline">
1196
+ ${t}
1197
+ </td>
1198
+ <td rowspan="2">
1199
+ ${l}
1200
+ </td>
1201
+ <td class="underline">
1202
+ ${n}
1203
+ </td>
1204
+ </tr>
1205
+ <tr>
1206
+ <td class="">
1207
+ <span class="paren tight">(</span>1<span class="plus">+</span>${s}${e}<span class="paren tight">)</span>
1208
+ </td>
1209
+ <td class="">
1210
+ <span class="paren tight">(</span>1<span class="plus">+</span>${s}${i}<span class="paren tight">)</span>
1211
+ </td>
1212
+ </tr>
1213
+ <tr>
1214
+ <td class="right">
1215
+ ${c}
1216
+ </td>
1217
+ <td>
1218
+ ${l}
1219
+ </td>
1220
+ <td class="left">
1221
+ ${a}
1222
+ </td>
1223
+ </tr>`;return D`
1224
+ <div class="holder">
1225
+ <table class="equation">
1226
+ <tbody>
1227
+ ${r}
1228
+ </tbody>
1229
+ </table>
1230
+ </div>`}}customElements.define("htd-calculation",eF);class nF extends(function(t){return class extends t{static get properties(){return{width:{attribute:!1,type:Number,reflect:!1},height:{attribute:!1,type:Number,reflect:!1},rem:{attribute:!1,type:Number,reflect:!1}}}constructor(){super(),this.width=NaN,this.height=NaN,this.rem=NaN}getDimensions(){this.width=parseFloat(this.getComputedStyleValue("width"),10),this.height=parseFloat(this.getComputedStyleValue("height"),10),this.rem=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("font-size"),10)}connectedCallback(){super.connectedCallback(),this.resizeObserver=new ResizeObserver(this.getDimensions.bind(this)),this.resizeObserver.observe(this)}disconnectedCallback(){this.resizeObserver.unobserve(this),super.disconnectedCallback()}}}(Lu)){static get properties(){return{a:{attribute:"amount",type:Number,reflect:!0},d:{attribute:"delay",type:Number,reflect:!0},label:{attribute:"label",type:String,reflect:!0},k:{attribute:"k",type:Number,reflect:!0},v:{attribute:!1,type:Number,reflect:!1}}}constructor(){super(),this.firstUpdate=!0,this.drag=!1,this.scale={value:{min:0,max:80,step:1,round:Math.round},time:{min:0,max:100,step:1,round:Math.round},discount:{min:0,max:100,step:.001,round:t=>+t.toFixed(3)}},this.a=null,this.d=null,this.label="",this.k=.1,this.options=[{name:"default",a:this.a,d:this.d,label:this.label}],this.as=null,this.ds=null,this.al=null,this.dl=null,this.trialCount=null,this.response=null,this.alignState()}alignState(){this.options[0].a=this.a,this.options[0].d=this.d,this.options[0].label=this.label,this.options.forEach((t=>{t.v=qu.adk2v(t.a,t.d,this.k)})),this.v=this.options[0].v}trial(t,e,n,i,s,c){this.trialCount&&this.removeOption(`${this.trialCount}-s`),this.trialCount&&this.removeOption(`${this.trialCount}-l`),this.as=t,this.ds=e,this.al=n,this.dl=i,this.trialCount=s,this.response=c,this.setOption(this.as,this.ds,`${this.trialCount}-s`,"s",!0),this.setOption(this.al,this.dl,`${this.trialCount}-l`,"l",!0)}pauseTrial(){const t=Tn(this.renderRoot).selectAll(".lines[data-animating-ease-time-1]");t.interrupt("new-1"),t.interrupt("new-2"),t.datum((t=>(t.paused=!0,t)))}resumeTrial(){Tn(this.renderRoot).selectAll(".lines[data-animating-ease-time-1]").datum((t=>(t.paused=!1,t))),this.requestUpdate()}clearOptions(){this.options.splice(1),this.requestUpdate()}removeOption(t){this.options=this.options.filter((e=>e.name!==t)),this.requestUpdate()}getOption(t="default"){return this.options.find((e=>e.name===t))}setOption(t,e,n="default",i="",s=!1){"default"===n&&(this.a=t,this.d=e,this.label=i);const c=this.options.find((t=>t.name===n));void 0===c?this.options.push({name:n,a:t,d:e,label:i,trial:s,new:s}):(c.a=t,c.d=e,c.label=i),this.requestUpdate()}static get styles(){return[super.styles,l`
1231
+ :host {
1232
+ display: inline-block;
1233
+
1234
+ width: 27rem;
1235
+ height: 15rem;
1236
+ }
1237
+
1238
+ .main {
1239
+ width: 100%;
1240
+ height: 100%;
1241
+ }
1242
+
1243
+ text {
1244
+ /* stylelint-disable property-no-vendor-prefix */
1245
+ -webkit-user-select: none;
1246
+ -moz-user-select: none;
1247
+ -ms-user-select: none;
1248
+ user-select: none;
1249
+ }
1250
+
1251
+ .background {
1252
+ fill: var(---color-element-background);
1253
+ stroke: var(---color-element-border);
1254
+ stroke-width: 1;
1255
+ shape-rendering: crispEdges;
1256
+ }
1257
+
1258
+ .title-x,
1259
+ .title-y {
1260
+ font-weight: 600;
1261
+
1262
+ fill: currentColor;
1263
+ }
1264
+
1265
+ .tick {
1266
+ font-size: 0.75rem;
1267
+ }
1268
+
1269
+ .axis-x path,
1270
+ .axis-x line,
1271
+ .axis-y path,
1272
+ .axis-y line {
1273
+ stroke: var(---color-element-border);
1274
+ /* shape-rendering: crispEdges; */
1275
+ }
1276
+
1277
+ .curve {
1278
+ fill: none;
1279
+ stroke: var(---color-element-emphasis);
1280
+ stroke-width: 2;
1281
+ }
1282
+
1283
+ .curve.interactive {
1284
+ cursor: nwse-resize;
1285
+
1286
+ filter: url("#shadow-2");
1287
+ outline: none;
1288
+ }
1289
+
1290
+ .curve.interactive:hover {
1291
+ filter: url("#shadow-4");
1292
+ }
1293
+
1294
+ .curve.interactive:active {
1295
+ filter: url("#shadow-8");
1296
+ }
1297
+
1298
+ :host(.keyboard) .curve.interactive:focus {
1299
+ filter: url("#shadow-8");
1300
+ }
1301
+
1302
+ .bar {
1303
+ fill: none;
1304
+ stroke: var(---color-element-emphasis);
1305
+ stroke-width: 2;
1306
+ }
1307
+
1308
+ .bar.interactive {
1309
+ cursor: ew-resize;
1310
+
1311
+ filter: url("#shadow-2");
1312
+ outline: none;
1313
+ }
1314
+
1315
+ .bar.interactive:hover {
1316
+ filter: url("#shadow-4");
1317
+ }
1318
+
1319
+ .bar.interactive:active {
1320
+ filter: url("#shadow-8");
1321
+ }
1322
+
1323
+ :host(.keyboard) .bar.interactive:focus {
1324
+ filter: url("#shadow-8");
1325
+ }
1326
+
1327
+ .point .mark {
1328
+ fill: var(---color-element-emphasis);
1329
+
1330
+ r: 6px;
1331
+ }
1332
+
1333
+ .point .label {
1334
+ font-size: 0.75rem;
1335
+
1336
+ dominant-baseline: middle;
1337
+ text-anchor: middle;
1338
+
1339
+ fill: var(---color-text-inverse);
1340
+ }
1341
+
1342
+ .point.interactive {
1343
+ cursor: ns-resize;
1344
+
1345
+ filter: url("#shadow-2");
1346
+ outline: none;
1347
+
1348
+ /* HACK: This gets Safari to correctly apply the filter! */
1349
+ /* https://github.com/emilbjorklund/svg-weirdness/issues/27 */
1350
+ stroke: #000000;
1351
+ stroke-opacity: 0;
1352
+ stroke-width: 0;
1353
+ }
1354
+
1355
+ .point.interactive:hover {
1356
+ filter: url("#shadow-4");
1357
+
1358
+ /* HACK: This gets Safari to correctly apply the filter! */
1359
+ stroke: #ff0000;
1360
+ }
1361
+
1362
+ .point.interactive:active {
1363
+ filter: url("#shadow-8");
1364
+
1365
+ /* HACK: This gets Safari to correctly apply the filter! */
1366
+ stroke: #00ff00;
1367
+ }
1368
+
1369
+ :host(.keyboard) .point.interactive:focus {
1370
+ filter: url("#shadow-8");
1371
+
1372
+ /* HACK: This gets Safari to correctly apply the filter! */
1373
+ stroke: #0000ff;
1374
+ }
1375
+ `]}render(){return D``}update(t){if(super.update(t),this.alignState(),Number.isNaN(this.width)||Number.isNaN(this.height)||Number.isNaN(this.rem))return;const e=this.width,n=this.height;let i,s;e/n>1.8?(s=n,i=1.8*s):(i=e,s=i/1.8);const c=2*this.rem,a=3*this.rem,l=3*this.rem,r=s-(c+a),o=i-(l+2*this.rem),g=parseInt(this.getComputedStyleValue("---transition-duration"),10),B=Jo().domain([this.scale.time.min,this.scale.time.max]).range([0,o]),d=Jo().domain([this.scale.value.min,this.scale.value.max]).range([r,0]),I=bQ().x((t=>B(t.d))).y((t=>d(t.v))),Q=Tn(this.renderRoot).selectAll(".main").data([{width:this.width,height:this.height,rem:this.rem}]),u=Q.enter().append("svg").classed("main",!0);u.html(Lu.svgDefs);const F=u.merge(Q).attr("viewBox",`0 0 ${i} ${s}`),h=u.append("g").classed("plot",!0),b=F.select(".plot").attr("transform",`translate(${l}, ${c})`);h.append("clipPath").attr("id","clip-htd-curves").append("rect"),b.select("clipPath rect").attr("height",r+1).attr("width",o+1);const U=h.append("g").classed("underlayer",!0),C=b.select(".underlayer");U.append("rect").classed("background",!0),C.select(".background").attr("height",r).attr("width",o),U.append("g").classed("axis-x",!0);C.select(".axis-x").attr("transform",`translate(0, ${d(0)})`).transition().duration(2*g).ease(Kc).call(Ae(B)).attr("font-size",null).attr("font-family",null).selectAll("line, path").attr("stroke",null);const y=U.append("text").classed("title-x",!0).attr("text-anchor","middle");y.append("tspan").classed("name",!0).text("Delay ("),y.append("tspan").classed("math-var d",!0).text("D"),y.append("tspan").classed("name",!0).text(")"),C.select(".title-x").attr("transform",`translate(${o/2}, ${r+2.25*this.rem})`),U.append("g").classed("axis-y",!0);var f;C.select(".axis-y").transition().duration(2*g).ease(Kc).call((f=d,me(be,f))).attr("font-size",null).attr("font-family",null).selectAll("line, path").attr("stroke",null);const G=U.append("text").classed("title-y",!0).attr("text-anchor","middle");G.append("tspan").classed("name",!0).text("Value ("),G.append("tspan").classed("math-var v",!0).text("V"),G.append("tspan").classed("name",!0).text(")"),C.select(".title-y").attr("transform",`translate(${-2*this.rem}, ${r/2})rotate(-90)`),h.append("g").classed("content",!0);const p=b.select(".content").selectAll(".option").data(this.options.filter((t=>null!==t.a&&null!==t.d)),(t=>t.name)),m=p.enter().append("g").classed("option",!0);m.append("path").classed("curve",!0).attr("clip-path","url(#clip-htd-curves)").attr("d",(t=>{const e=Be(B(t.d),B(0),-1).map((e=>({d:B.invert(e),v:qu.adk2v(t.a,t.d-B.invert(e),this.k)})));return I(e)})).attr("stroke-dasharray",((t,e,n)=>{if(t.trial){return`0,${n[e].getTotalLength()}`}return"none"})),m.append("line").classed("bar",!0).attr("x1",(t=>B(t.d))).attr("x2",(t=>B(t.d))).attr("y1",d(0)).attr("y2",(t=>d(t.a))).attr("stroke-dasharray",((t,e,n)=>{if(t.trial){return`0,${n[e].getTotalLength()}`}return"none"}));const A=m.append("g").classed("point",!0).attr("transform",(t=>`translate(${B(t.d)}, ${d(t.a)})`)).attr("opacity",(t=>t.trial?0:1));A.append("circle").classed("mark",!0),A.append("text").classed("label",!0);const x=m.merge(p);x.filter(((t,e,n)=>this.interactive&&!n[e].classList.contains("interactive"))).select(".curve").classed("interactive",!0).attr("tabindex",0).call(ii().subject((t=>({x:t.x,y:t.y}))).on("start",(t=>{Tn(t.currentTarget).classed("dragging",!0)})).on("drag",((t,e)=>{this.drag=!0;const n=e.d-B.invert(t.x),i=n<0?0:n>e.d?e.d:n,s=d.invert(t.y),c=s<=0?.001:s>e.a?e.a:s,a=qu.adv2k(e.a,i,c);this.k=a<this.scale.discount.min?this.scale.discount.min:a>this.scale.discount.max?this.scale.discount.max:this.scale.discount.round(a),this.alignState(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("htd-curves-change",{detail:{name:e.name,a:e.a,d:e.d,k:this.k,label:e.label},bubbles:!0}))})).on("end",(t=>{Tn(t.currentTarget).classed("dragging",!1)}))).on("keydown",((t,e)=>{if(["ArrowUp","ArrowDown","ArrowRight","ArrowLeft"].includes(t.key)){let n=this.k;switch(t.key){case"ArrowUp":case"ArrowLeft":n*=t.shiftKey?.95:.85;break;case"ArrowDown":case"ArrowRight":n*=t.shiftKey?1.05:1.15}n=n<this.scale.discount.min?this.scale.discount.min:n>this.scale.discount.max?this.scale.discount.max:this.scale.discount.round(n),n!==this.k&&(this.k=n,this.alignState(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("htd-curves-change",{detail:{name:e.name,a:e.a,d:e.d,k:this.k,label:e.label},bubbles:!0}))),t.preventDefault()}})),x.filter(((t,e,n)=>this.interactive&&!t.trial&&!n[e].classList.contains("interactive"))).select(".bar").classed("interactive",!0).attr("tabindex",0).call(ii().subject(((t,e)=>({x:B(e.d),y:d(e.a)}))).on("start",(t=>{Tn(t.currentTarget).classed("dragging",!0)})).on("drag",((t,e)=>{this.drag=!0;const n=B.invert(t.x);e.d=n<this.scale.time.min?this.scale.time.min:n>this.scale.time.max?this.scale.time.max:this.scale.time.round(n),"default"===e.name&&(this.d=e.d),this.alignState(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("htd-curves-change",{detail:{name:e.name,a:e.a,d:e.d,k:this.k,label:e.label},bubbles:!0}))})).on("end",(t=>{Tn(t.currentTarget).classed("dragging",!1)}))).on("keydown",((t,e)=>{if(["ArrowLeft","ArrowRight"].includes(t.key)){let n=e.d;switch(t.key){case"ArrowRight":n+=t.shiftKey?1:5;break;case"ArrowLeft":n-=t.shiftKey?1:5}n=n<this.scale.time.min?this.scale.time.min:n>this.scale.time.max?this.scale.time.max:n,n!==e.d&&(e.d=n,"default"===e.name&&(this.d=e.d),this.alignState(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("htd-curves-change",{detail:{name:e.name,a:e.a,d:e.d,k:this.k,label:e.label},bubbles:!0}))),t.preventDefault()}})),x.filter(((t,e,n)=>this.interactive&&!t.trial&&!n[e].classList.contains("interactive"))).select(".point").classed("interactive",!0).attr("tabindex",0).call(ii().subject(((t,e)=>({x:B(e.d),y:d(e.a)}))).on("start",(t=>{Tn(t.currentTarget).classed("dragging",!0)})).on("drag",((t,e)=>{this.drag=!0;const n=d.invert(t.y);e.a=n<this.scale.value.min?this.scale.value.min:n>this.scale.value.max?this.scale.value.max:this.scale.value.round(n),"default"===e.name&&(this.a=e.a),this.alignState(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("htd-curves-change",{detail:{name:e.name,a:e.a,d:e.d,k:this.k,label:e.label},bubbles:!0}))})).on("end",(t=>{Tn(t.currentTarget).classed("dragging",!1)}))).on("keydown",((t,e)=>{if(["ArrowUp","ArrowDown"].includes(t.key)){let n=e.a;switch(t.key){case"ArrowUp":n+=t.shiftKey?1:5;break;case"ArrowDown":n-=t.shiftKey?1:5}n=n<this.scale.value.min?this.scale.value.min:n>this.scale.value.max?this.scale.value.max:n,n!==e.a&&(e.a=n,"default"===e.name&&(this.a=e.a),this.alignState(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("htd-curves-change",{detail:{name:e.name,a:e.a,d:e.d,k:this.k,label:e.label},bubbles:!0}))),t.preventDefault()}})),x.filter(((t,e,n)=>!this.interactive&&n[e].classList.contains("interactive"))).select(".curve").classed("interactive",!1).attr("tabindex",null).on("drag",null).on("keydown",null),x.filter(((t,e,n)=>(!this.interactive||t.trial)&&n[e].classList.contains("interactive"))).select(".bar").classed("interactive",!1).attr("tabindex",null).on("drag",null).on("keydown",null),x.filter(((t,e,n)=>(!this.interactive||t.trial)&&n[e].classList.contains("interactive"))).select(".point").classed("interactive",!1).attr("tabindex",null).on("drag",null).on("keydown",null),x.filter((t=>t.new)).select(".curve").transition().duration(g).delay(g+g/10).ease(zc).attrTween("stroke-dasharray",((t,e,n)=>{const i=n[e].getTotalLength();return Xs(`0,${i}`,`${i},0`)})).on("end",(t=>{t.new=!1,this.dispatchEvent(new CustomEvent("discountable-response",{detail:{trial:this.trialCount,as:this.as,ds:this.ds,al:this.al,dl:this.dl,response:this.response},bubbles:!0}))})),x.filter((t=>t.new)).select(".bar").transition().duration(g).ease(zc).attrTween("stroke-dasharray",((t,e,n)=>{const i=n[e].getTotalLength();return Xs(`0,${i}`,`${i},${i}`)})),x.filter((t=>t.new)).select(".point").transition().duration(g/10).delay(g).ease(zc).attrTween("opacity",(()=>Xs(0,1))),p.select(".curve").transition().duration(this.drag?0:this.firstUpdate?2*g:g).ease(Kc).attrTween("d",((t,e,n)=>{const i=n[e],s=Xs(void 0!==i.a?i.a:t.a,t.a),c=Xs(void 0!==i.d?i.d:t.d,t.d);return t=>{i.a=s(t),i.d=c(t);const e=Be(B(i.d),B(0),-1).map((t=>({d:B.invert(t),v:qu.adk2v(i.a,i.d-B.invert(t),this.k)})));return I(e)}})),p.select(".bar").transition().duration(this.drag?0:this.firstUpdate?2*g:g).ease(Kc).attrTween("x1",((t,e,n)=>{const i=n[e],s=Xs(void 0!==i.d?i.d:t.d,t.d);return t=>(i.d=s(t),`${B(i.d)}`)})).attrTween("x2",((t,e,n)=>{const i=n[e],s=Xs(void 0!==i.d?i.d:t.d,t.d);return t=>(i.d=s(t),`${B(i.d)}`)})).attrTween("y2",((t,e,n)=>{const i=n[e],s=Xs(void 0!==i.a?i.a:t.a,t.a);return t=>(i.a=s(t),`${d(i.a)}`)})),p.select(".point").transition().duration(this.drag?0:this.firstUpdate?2*g:g).ease(Kc).attrTween("transform",((t,e,n)=>{const i=n[e],s=Xs(void 0!==i.d?i.d:t.d,t.d),c=Xs(void 0!==i.a?i.a:t.a,t.a);return t=>(i.d=s(t),i.a=c(t),`translate(${B(i.d)}, ${d(i.a)})`)})),x.select(".point .label").text((t=>t.label)),p.exit().remove(),this.drag=!1,this.firstUpdate=!1}}function iF(t){return null!=t&&!Number.isNaN(t)}function sF(t,e){return+iF(e)-+iF(t)||gt(t,e)}function cF(t,e){return+iF(e)-+iF(t)||Bt(t,e)}function aF(t){return null!=t&&""!=`${t}`}function lF(t){return isFinite(t)?t:NaN}function rF(t){return t>0&&isFinite(t)?t:NaN}function oF(t){return t<0&&isFinite(t)?t:NaN}function gF(t,e){if(t instanceof Date||(t=new Date(+t)),isNaN(t))return"function"==typeof e?e(t):e;const n=t.getUTCHours(),i=t.getUTCMinutes(),s=t.getUTCSeconds(),c=t.getUTCMilliseconds();return`${a=t.getUTCFullYear(),a<0?`-${BF(-a,6)}`:a>9999?`+${BF(a,6)}`:BF(a,4)}-${BF(t.getUTCMonth()+1,2)}-${BF(t.getUTCDate(),2)}${n||i||s||c?`T${BF(n,2)}:${BF(i,2)}${s||c?`:${BF(s,2)}${c?`.${BF(c,3)}`:""}`:""}Z`:""}`;var a}function BF(t,e){return`${t}`.padStart(e,"0")}customElements.define("htd-curves",nF);const dF=/^(?:[-+]\d{2})?\d{4}(?:-\d{2}(?:-\d{2})?)?(?:T\d{2}:\d{2}(?::\d{2}(?:\.\d{3})?)?(?:Z|[-+]\d{2}:?\d{2})?)?$/;function IF(t,e){return dF.test(t+="")?new Date(t):"function"==typeof e?e(t):e}const QF=1e3,uF=6e4,FF=36e5,hF=864e5,bF=7*hF,UF=30*hF,CF=365*hF,yF=[["millisecond",1],["2 milliseconds",2],["5 milliseconds",5],["10 milliseconds",10],["20 milliseconds",20],["50 milliseconds",50],["100 milliseconds",100],["200 milliseconds",200],["500 milliseconds",500],["second",QF],["5 seconds",5e3],["15 seconds",15e3],["30 seconds",3e4],["minute",uF],["5 minutes",3e5],["15 minutes",9e5],["30 minutes",18e5],["hour",FF],["3 hours",108e5],["6 hours",216e5],["12 hours",432e5],["day",hF],["2 days",2*hF],["week",bF],["2 weeks",2*bF],["month",UF],["3 months",3*UF],["6 months",6*UF],["year",CF],["2 years",2*CF],["5 years",5*CF],["10 years",10*CF],["20 years",20*CF],["50 years",50*CF],["100 years",100*CF]],fF=new Map([["second",QF],["minute",uF],["hour",FF],["day",hF],["monday",bF],["tuesday",bF],["wednesday",bF],["thursday",bF],["friday",bF],["saturday",bF],["sunday",bF],["week",bF],["month",UF],["year",CF]]),GF=new Map([["second",fg],["minute",Gg],["hour",mg],["day",xg],["monday",vg],["tuesday",Ng],["wednesday",Zg],["thursday",Eg],["friday",Vg],["saturday",wg],["sunday",Xg],["week",Xg],["month",zg],["year",Og]]),pF=new Map([["second",fg],["minute",pg],["hour",Ag],["day",Sg],["monday",Dg],["tuesday",Yg],["wednesday",kg],["thursday",Jg],["friday",Mg],["saturday",Tg],["sunday",Hg],["week",Hg],["month",Kg],["year",_g]]),mF=Symbol("intervalDuration"),AF=Symbol("intervalType");for(const[t,e]of GF)e[mF]=fF.get(t),e[AF]="time";for(const[t,e]of pF)e[mF]=fF.get(t),e[AF]="utc";const xF=[["year",_g,"utc"],["year",Og,"time"],["month",Kg,"utc"],["month",zg,"time"],["day",Sg,"utc",6*UF],["day",xg,"time",6*UF],["hour",Ag,"utc",3*hF],["minute",pg,"utc",216e5],["second",fg,"utc",18e5]];function LF(t,e,n){let i=`${t}`.toLowerCase();i.endsWith("s")&&(i=i.slice(0,-1));let s=1;const c=/^(?:(\d+)\s+)/.exec(i);switch(c&&(i=i.slice(c[0].length),s=+c[1]),i){case"quarter":i="month",s*=3;break;case"half":i="month",s*=6}let a=e.get(i);if(!a)throw new Error(`unknown interval: ${t}`);if(s>1){if(!a.every)throw new Error(`non-periodic interval: ${i}`);a=a.every(s),a[mF]=fF.get(i)*s,a[AF]=n}return a}function SF(t){return LF(t,GF,"time")}function RF(t){return LF(t,pF,"utc")}function XF(t,e){if(!(e>1))return;const n=t[mF];if(!yF.some((([,t])=>t===n)))return;if(n%hF==0&&hF<n&&n<UF)return;const[i]=yF[dt((([,t])=>Math.log(t))).center(yF,Math.log(n*e))];return("time"===t[AF]?SF:RF)(i)}function vF(t,e,n){const i="time"===e?cB:aB;if(null==n)return i("year"===t?"%Y":"month"===t?"%Y-%m":"day"===t?"%Y-%m-%d":"hour"===t||"minute"===t?"%Y-%m-%dT%H:%M":"second"===t?"%Y-%m-%dT%H:%M:%S":"%Y-%m-%dT%H:%M:%S.%L");const s=function(t){return"left"===t||"right"===t?(t,e)=>`\n${t}\n${e}`:"top"===t?(t,e)=>`${e}\n${t}`:(t,e)=>`${t}\n${e}`}(n);switch(t){case"millisecond":return ZF(i(".%L"),i(":%M:%S"),s);case"second":return ZF(i(":%S"),i("%-I:%M"),s);case"minute":return ZF(i("%-I:%M"),i("%p"),s);case"hour":return ZF(i("%-I %p"),i("%b %-d"),s);case"day":return ZF(i("%-d"),i("%b"),s);case"month":return ZF(i("%b"),i("%Y"),s);case"year":return i("%Y")}throw new Error("unable to format time ticks")}function NF(t,e){const n=_t(function(t,e=ge){const n=[];let i,s=!1;for(const c of t)s&&n.push(e(i,c)),i=c,s=!0;return n}(t,((t,e)=>Math.abs(e-t))));if(n<1e3)return vF("millisecond","utc",e);for(const[i,s,c,a]of xF){if(n>a)break;if("hour"===i&&!n)break;if(t.every((t=>s.floor(t)>=t)))return vF(i,c,e)}}function ZF(t,e,n){return(i,s,c)=>{const a=t(i,s),l=e(i,s),r=s-Mh(c);return s!==r&&void 0!==c[r]&&l===e(c[r],r)?a:n(a,l)}}const EF=Object.getPrototypeOf(Uint8Array),VF=Object.prototype.toString,wF=Symbol("reindex");function WF(t,e,n){const i=typeof e;return"string"===i?HF(t,kF(e),n):"function"===i?HF(t,e,n):"number"===i||e instanceof Date||"boolean"===i?lh(t,jF(e),n):"function"==typeof e?.transform?DF(e.transform(t),n):function(t,e){return e?hh(t,e):t}(DF(e,n),t?.[wF])}function HF(t,e,n){return lh(t,n?.prototype instanceof EF?function(t){return(e,n)=>qF(t(e,n))}(e):e,n)}function DF(t,e){return void 0===e?ah(t):t instanceof e?t:e.prototype instanceof EF&&!(t instanceof EF)?e.from(t,qF):e.from(t)}const YF=[null],kF=t=>e=>e[t],JF={transform:Fh},MF={transform:t=>t},TF=()=>1,zF=()=>!0,KF=t=>null==t?t:`${t}`,OF=t=>null==t?t:+t,_F=t=>t?t[0]:void 0,PF=t=>t?t[1]:void 0,jF=t=>()=>t;function $F(t){return t instanceof EF?t:lh(t,qF,Float64Array)}function qF(t){return null==t?NaN:Number(t)}function th(t){return lh(t,eh)}function eh(t){return t instanceof Date&&!isNaN(t)?t:"string"==typeof t?IF(t):null==t||isNaN(t=+t)?void 0:new Date(t)}function nh(t,e){return void 0===t&&(t=e),null===t?[void 0,"none"]:Wh(t)?[void 0,t]:[t,void 0]}function ih(t,e){return void 0===t&&(t=e),null===t||"number"==typeof t?[void 0,t]:[t,void 0]}function sh(t,e,n){if(null!=t)return ch(t,e,n)}function ch(t,e,n){const i=`${t}`.toLowerCase();if(!n.includes(i))throw new Error(`invalid ${e}: ${t}`);return i}function ah(t){return null==t||t instanceof Array||t instanceof EF?t:Array.from(t)}function lh(t,e,n=Array){return null==t?t:t instanceof n?t.map(e):n.from(t,e)}function rh(t,e=Array){return t instanceof e?t.slice():e.from(t)}function oh({y:t,y1:e,y2:n}){return void 0!==t||void 0!==e||void 0!==n}function gh(t){return t?.toString===VF}function Bh(t){return gh(t)&&(void 0!==t.type||void 0!==t.domain)}function dh(t){return gh(t)&&"function"!=typeof t.transform}function Ih(t){return dh(t)&&void 0===t.value&&void 0===t.channel}function Qh(t,e){return void 0===t&&void 0===e?[_F,PF]:[t,e]}function uh({z:t,fill:e,stroke:n}={}){return void 0===t&&([t]=nh(e)),void 0===t&&([t]=nh(n)),t}function Fh(t){const e=t.length,n=new Uint32Array(e);for(let t=0;t<e;++t)n[t]=t;return n}function hh(t,e){return lh(e,(e=>t[e]),t.constructor)}function bh(t,e,n){return t.subarray?t.subarray(e,n):t.slice(e,n)}function Uh(t){return null!==t&&"object"==typeof t?t.valueOf():t}function Ch(t){let e;return[{transform:()=>e,label:fh(t)},t=>e=t]}function yh(t){return null==t?[t]:Ch(t)}function fh(t,e){return"string"==typeof t?t:t&&void 0!==t.label?t.label:e}function Gh(t,e){return{transform(n){const i=t.transform(n),s=e.transform(n);return Nh(i)||Nh(s)?lh(i,((t,e)=>new Date((+i[e]+ +s[e])/2))):lh(i,((t,e)=>(+i[e]+ +s[e])/2),Float64Array)},label:t.label}}function ph(t,e){const n=mh(e?.interval,e?.type);return n?lh(t,n):t}function mh(t,e){const n=Ah(t,e);return n&&(t=>iF(t)?n.floor(t):t)}function Ah(t,e){if(null!=t){if("number"==typeof t){0<t&&t<1&&Number.isInteger(1/t)&&(t=-1/t);const e=Math.abs(t);return t<0?{floor:t=>Math.floor(t*e)/e,offset:t=>(t*e+1)/e,range:(t,n)=>Be(Math.ceil(t*e),n*e).map((t=>t/e))}:{floor:t=>Math.floor(t/e)*e,offset:t=>t+e,range:(t,n)=>Be(Math.ceil(t/e),n/e).map((t=>t*e))}}if("string"==typeof t)return("time"===e?SF:RF)(t);if("function"!=typeof t.floor)throw new Error("invalid interval; missing floor method");if("function"!=typeof t.offset)throw new Error("invalid interval; missing offset method");return t}}function xh(t,e){if((t=Ah(t,e))&&"function"!=typeof t.range)throw new Error("invalid interval: missing range method");return t}function Lh(t){return"function"==typeof t?.range}function Sh(t){return void 0===t||dh(t)?t:{value:t}}function Rh(t){return t&&"function"==typeof t[Symbol.iterator]}function Xh(t){for(const e of t)if(null!=e)return"object"!=typeof e||e instanceof Date}function vh(t){for(const e of t){if(null==e)continue;const t=typeof e;return"string"===t||"boolean"===t}}function Nh(t){for(const e of t)if(null!=e)return e instanceof Date}function Zh(t){for(const e of t)if(null!=e)return"string"==typeof e&&isNaN(e)&&IF(e)}function Eh(t){for(const e of t)if(null!=e){if("string"!=typeof e)return!1;if(e.trim())return!isNaN(e)}}function Vh(t,e){let n;for(const i of t)if(null!=i){if(!e(i))return!1;n=!0}return n}const wh=new Set("none,currentcolor,transparent,aliceblue,antiquewhite,aqua,aquamarine,azure,beige,bisque,black,blanchedalmond,blue,blueviolet,brown,burlywood,cadetblue,chartreuse,chocolate,coral,cornflowerblue,cornsilk,crimson,cyan,darkblue,darkcyan,darkgoldenrod,darkgray,darkgreen,darkgrey,darkkhaki,darkmagenta,darkolivegreen,darkorange,darkorchid,darkred,darksalmon,darkseagreen,darkslateblue,darkslategray,darkslategrey,darkturquoise,darkviolet,deeppink,deepskyblue,dimgray,dimgrey,dodgerblue,firebrick,floralwhite,forestgreen,fuchsia,gainsboro,ghostwhite,gold,goldenrod,gray,green,greenyellow,grey,honeydew,hotpink,indianred,indigo,ivory,khaki,lavender,lavenderblush,lawngreen,lemonchiffon,lightblue,lightcoral,lightcyan,lightgoldenrodyellow,lightgray,lightgreen,lightgrey,lightpink,lightsalmon,lightseagreen,lightskyblue,lightslategray,lightslategrey,lightsteelblue,lightyellow,lime,limegreen,linen,magenta,maroon,mediumaquamarine,mediumblue,mediumorchid,mediumpurple,mediumseagreen,mediumslateblue,mediumspringgreen,mediumturquoise,mediumvioletred,midnightblue,mintcream,mistyrose,moccasin,navajowhite,navy,oldlace,olive,olivedrab,orange,orangered,orchid,palegoldenrod,palegreen,paleturquoise,palevioletred,papayawhip,peachpuff,peru,pink,plum,powderblue,purple,rebeccapurple,red,rosybrown,royalblue,saddlebrown,salmon,sandybrown,seagreen,seashell,sienna,silver,skyblue,slateblue,slategray,slategrey,snow,springgreen,steelblue,tan,teal,thistle,tomato,turquoise,violet,wheat,white,whitesmoke,yellow".split(","));function Wh(t){return"string"==typeof t&&(t=t.toLowerCase().trim(),/^#[0-9a-f]{3,8}$/.test(t)||/^(?:url|var|rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix)\(.*\)$/.test(t)||wh.has(t))}function Hh(t){return"number"==typeof t&&(0<=t&&t<=1||isNaN(t))}function Dh(t){return null==t||Yh(t)}function Yh(t){return/^\s*none\s*$/i.test(t)}function kh(t,e){return sh(t,e,["middle","top-left","top","top-right","right","bottom-right","bottom","bottom-left","left"])}function Jh(t="middle"){return kh(t,"frameAnchor")}function Mh(t){if(null==t)return;return Bt(t[0],t[t.length-1])}function Th(t){return Rh(t)?function(t){console.warn("named iterables are deprecated; please use an object instead");const e=new Set;return Object.fromEntries(Array.from(t,(t=>{const{name:n}=t;if(null==n)throw new Error("missing name");const i=`${n}`;if("__proto__"===i)throw new Error(`illegal name: ${i}`);if(e.has(i))throw new Error(`duplicate name: ${i}`);return e.add(i),[n,t]})))}(t):t}const zh=Symbol("position"),Kh=Symbol("color"),Oh=Symbol("radius"),_h=Symbol("length"),Ph=Symbol("opacity"),jh=Symbol("symbol"),$h=Symbol("projection"),qh=new Map([["x",zh],["y",zh],["fx",zh],["fy",zh],["r",Oh],["color",Kh],["opacity",Ph],["symbol",jh],["length",_h],["projection",$h]]);const tb=2/Math.sqrt(3),eb=new Map([["asterisk",yQ],["circle",fQ],["cross",GQ],["diamond",AQ],["diamond2",xQ],["hexagon",{draw(t,e){const n=Math.sqrt(e/Math.PI),i=n*tb,s=i/2;t.moveTo(0,i),t.lineTo(n,s),t.lineTo(n,-s),t.lineTo(0,-i),t.lineTo(-n,-s),t.lineTo(-n,s),t.closePath()}}],["plus",LQ],["square",SQ],["square2",RQ],["star",ZQ],["times",MQ],["triangle",VQ],["triangle2",WQ],["wye",JQ]]);function nb(t){return t&&"function"==typeof t.draw}function ib(t){return!!nb(t)||"string"==typeof t&&eb.has(t.toLowerCase())}function sb(t){if(null==t||nb(t))return t;const e=eb.get(`${t}`.toLowerCase());if(e)return e;throw new Error(`invalid symbol: ${t}`)}function cb({filter:t,sort:e,reverse:n,transform:i,initializer:s,...c}={},a){if(void 0===i&&(null!=t&&(i=ob(t)),null==e||Ih(e)||(i=lb(i,Bb(e))),n&&(i=lb(i,gb))),null!=a&&null!=s)throw new Error("transforms cannot be applied after initializers");return{...c,...(null===e||Ih(e))&&{sort:e},transform:lb(i,a)}}function ab({filter:t,sort:e,reverse:n,initializer:i,...s}={},c){return void 0===i&&(null!=t&&(i=ob(t)),null==e||Ih(e)||(i=rb(i,Bb(e))),n&&(i=rb(i,gb))),{...s,...(null===e||Ih(e))&&{sort:e},initializer:rb(i,c)}}function lb(t,e){return null==t?null===e?void 0:e:null==e?null===t?void 0:t:function(n,i,s){return({data:n,facets:i}=t.call(this,n,i,s)),e.call(this,ah(n),i,s)}}function rb(t,e){return null==t?null===e?void 0:e:null==e?null===t?void 0:t:function(n,i,s,...c){let a,l,r,o,g,B;return({data:l=n,facets:r=i,channels:a}=t.call(this,n,i,s,...c)),({data:g=l,facets:B=r,channels:o}=e.call(this,l,r,{...s,...a},...c)),{data:g,facets:B,channels:{...a,...o}}}}function ob(t){return(e,n)=>{const i=WF(e,t);return{data:e,facets:n.map((t=>t.filter((t=>i[t]))))}}}function gb(t,e){return{data:t,facets:e.map((t=>t.slice().reverse()))}}function Bb(t){return("function"==typeof t&&1!==t.length?db:Ib)(t)}function db(t){return(e,n)=>{const i=(n,i)=>t(e[n],e[i]);return{data:e,facets:n.map((t=>t.slice().sort(i)))}}}function Ib(t){let e,n;({channel:e,value:t,order:n}={...Sh(t)});const i=e?.startsWith("-");if(i&&(e=e.slice(1)),void 0===n&&(n=i?cF:sF),"function"!=typeof n)switch(`${n}`.toLowerCase()){case"ascending":n=sF;break;case"descending":n=cF;break;default:throw new Error(`invalid order: ${n}`)}return(i,s,c)=>{let a;if(void 0===e)a=WF(i,t);else{if(void 0===c)throw new Error("channel sort requires an initializer");if(a=c[e],!a)return{};a=a.value}const l=(t,e)=>n(a[t],a[e]);return{data:i,facets:s.map((t=>t.slice().sort(l)))}}}function Qb(t,...e){for(const{name:n}of t)if(e.includes(n))return!0;return!1}function ub(t,e,n,i=Fb){let s;gh(e)&&"reduce"in e&&(s=e.scale,e=e.reduce);const c=i(t,e,n),[a,l]=Ch(c.label);let r;return{name:t,output:void 0===s?a:{value:a,scale:s},initialize(t){c.initialize(t),r=l([])},scope(t,e){c.scope(t,e)},reduce(t,e){r.push(c.reduce(t,e))}}}function Fb(t,e,n,i=bb){const s=function(t,e){if(void 0!==e[t])return e[t];switch(t){case"x1":case"x2":t="x";break;case"y1":case"y2":t="y"}return e[t]}(t,n),c=i(e,s);let a,l;return{label:fh(c===Ab?null:s,c.label),initialize(t){a=void 0===s?t:WF(t,s),"data"===c.scope&&(l=c.reduceIndex(Fh(t),a))},scope(t,e){c.scope===t&&(l=c.reduceIndex(e,a))},reduce:(t,e)=>null==c.scope?c.reduceIndex(t,a,e):c.reduceIndex(t,a,l,e)}}function hb(t,e){return e?wt(Nt(t,(t=>e[t])),_F):[[,t]]}function bb(t,e,n=Ub){if(null==t)return n(t);if("function"==typeof t.reduceIndex)return t;if("function"==typeof t.reduce&&gh(t))return function(t){return console.warn("deprecated reduce interface; implement reduceIndex instead."),{...t,reduceIndex:t.reduce.bind(t)}}(t);if("function"==typeof t)return function(t){return{reduceIndex:(e,n,i)=>t(hh(n,e),i)}}(t);if(/^p\d{2}$/i.test(t))return Cb(function(t){const e=+`${t}`.slice(1)/100;return(t,n)=>ne(t,e,n)}(t));switch(`${t}`.toLowerCase()){case"first":return Gb;case"last":return mb;case"identity":return fb;case"count":return Ab;case"distinct":return xb;case"sum":return null==e?Ab:Lb;case"proportion":return Sb(e,"data");case"proportion-facet":return Sb(e,"facet");case"deviation":return Cb(Gt);case"min":return Cb(jt);case"min-index":return Cb($t);case"max":return Cb(_t);case"max-index":return Cb(Pt);case"mean":return yb(ae);case"median":return yb(le);case"variance":return Cb(ft);case"mode":return Cb(oe)}return n(t)}function Ub(t){throw new Error(`invalid reduce: ${t}`)}function Cb(t){return{reduceIndex:(e,n)=>t(e,(t=>n[t]))}}function yb(t){return{reduceIndex(e,n){const i=t(e,(t=>n[t]));return Nh(n)?new Date(i):i}}}const fb={reduceIndex:(t,e)=>hh(e,t)},Gb={reduceIndex:(t,e)=>e[t[0]]},pb={reduceIndex(t,e){const n=wt(Zt(t,(t=>t.length),(t=>e[t])),PF),i=n.slice(-5).reverse();if(i.length<n.length){const t=n.slice(0,-4);i[4]=[`… ${t.length.toLocaleString("en-US")} more`,de(t,PF)]}return i.map((([t,e])=>`${t} (${e.toLocaleString("en-US")})`)).join("\n")}},mb={reduceIndex:(t,e)=>e[t[t.length-1]]},Ab={label:"Frequency",reduceIndex:t=>t.length},xb={label:"Distinct",reduceIndex(t,e){const n=new xt;for(const i of t)n.add(e[i]);return n.size}},Lb=Cb(de);function Sb(t,e){return null==t?{scope:e,label:"Frequency",reduceIndex:(t,e,n=1)=>t.length/n}:{scope:e,reduceIndex:(t,e,n=1)=>de(t,(t=>e[t]))/n}}function Rb(t,{scale:e,type:n,value:i,filter:s,hint:c,label:a=fh(i)},l){return void 0===c&&"function"==typeof i?.transform&&(c=i.hint),Xb(l,{scale:e,type:n,value:WF(t,i),label:a,filter:s,hint:c})}function Xb(t,e){const{scale:n,value:i}=e;if(!0===n||"auto"===n)switch(t){case"fill":case"stroke":case"color":e.scale=!0!==n&&Vh(i,Wh)?null:"color";break;case"fillOpacity":case"strokeOpacity":case"opacity":e.scale=!0!==n&&Vh(i,Hh)?null:"opacity";break;case"symbol":!0!==n&&Vh(i,ib)?(e.scale=null,e.value=lh(i,sb)):e.scale="symbol";break;default:e.scale=qh.has(t)?t:null}else if(!1===n)e.scale=null;else if(null!=n&&!qh.has(n))throw new Error(`unknown scale: ${n}`);return e}function vb(t,e){for(const n in t){const i=t[n];if(i.scale===e)return i}}function Nb(t,e){const n=t.original;if(n===t)return e;const i=e.value,s=e.value=[];for(let e=0;e<n.length;++e){const c=i[n[e][0]];for(const n of t[e])s[n]=c}return e}function Zb(t,e,n){const i=Eb(t,e);return lh(Eb(t,n),((t,e)=>Math.abs(t-i[e])),Float64Array)}function Eb(t,e,n){let i=t[e];if(i||void 0===n||(i=t[n]),i)return i.value;throw new Error(`missing channel: ${e}`)}function Vb(t){if(null==t||"function"==typeof t)return t;switch(`${t}`.toLowerCase()){case"ascending":return wb;case"descending":return Wb}throw new Error(`invalid order: ${t}`)}function wb([t,e],[n,i]){return sF(e,i)||sF(t,n)}function Wb([t,e],[n,i]){return cF(e,i)||sF(t,n)}function Hb(t,e){let n=t[e];if(n){for(;n.source;)n=n.source;return null===n.source?null:n}}const Db=function(t){let e,n;return(...i)=>((n?.length!==i.length||n.some(((t,e)=>t!==i[e])))&&(n=i,e=t(...i)),e)}((t=>new Intl.NumberFormat(t)));function Yb(t){return gF(t,"Invalid Date")}const kb=function(t="en-US"){const e=function(t="en-US"){const e=Db(t);return t=>null==t||isNaN(t)?void 0:e.format(t)}(t);return t=>(t instanceof Date?Yb:"number"==typeof t?e:KF)(t)}();let Jb,Mb=0;function Tb(t){t!==Jb&&(Jb=t,console.warn(t),++Mb)}const zb=("undefined"!=typeof window?window.devicePixelRatio>1:"undefined"==typeof it)?0:.5;let Kb=0;function Ob(){return"plot-clip-"+ ++Kb}function _b(t,{title:e,href:n,ariaLabel:i,ariaDescription:s,ariaHidden:c,target:a,fill:l,fillOpacity:r,stroke:o,strokeWidth:g,strokeOpacity:B,strokeLinejoin:d,strokeLinecap:I,strokeMiterlimit:Q,strokeDasharray:u,strokeDashoffset:F,opacity:h,mixBlendMode:b,imageFilter:U,paintOrder:C,pointerEvents:y,shapeRendering:f,channels:G},{ariaLabel:p,fill:m="currentColor",fillOpacity:A,stroke:x="none",strokeOpacity:L,strokeWidth:S,strokeLinecap:R,strokeLinejoin:X,strokeMiterlimit:v,paintOrder:N}){null===m&&(l=null,r=null),null===x&&(o=null,B=null),Dh(m)?Dh(x)||Dh(l)&&!G?.fill||(x="none"):!Dh(x)||Dh(o)&&!G?.stroke||(m="none");const[Z,E]=nh(l,m),[V,w]=ih(r,A),[W,H]=nh(o,x),[D,Y]=ih(B,L),[k,J]=ih(h);Yh(H)||(void 0===g&&(g=S),void 0===I&&(I=R),void 0===d&&(d=X),void 0!==Q||/^\s*round\s*$/i.test(d)||(Q=v),Yh(E)||void 0!==C||(C=N));const[M,T]=ih(g);return null!==m&&(t.fill=lU(E,"currentColor"),t.fillOpacity=rU(w,1)),null!==x&&(t.stroke=lU(H,"none"),t.strokeWidth=rU(T,1),t.strokeOpacity=rU(Y,1),t.strokeLinejoin=lU(d,"miter"),t.strokeLinecap=lU(I,"butt"),t.strokeMiterlimit=rU(Q,4),t.strokeDasharray=lU(u,"none"),t.strokeDashoffset=lU(F,"0")),t.target=KF(a),t.ariaLabel=KF(p),t.ariaDescription=KF(s),t.ariaHidden=KF(c),t.opacity=rU(J,1),t.mixBlendMode=lU(b,"normal"),t.imageFilter=lU(U,"none"),t.paintOrder=lU(C,"normal"),t.pointerEvents=lU(y,"auto"),t.shapeRendering=lU(f,"auto"),{title:{value:e,optional:!0,filter:null},href:{value:n,optional:!0,filter:null},ariaLabel:{value:i,optional:!0,filter:null},fill:{value:Z,scale:"auto",optional:!0},fillOpacity:{value:V,scale:"auto",optional:!0},stroke:{value:W,scale:"auto",optional:!0},strokeOpacity:{value:D,scale:"auto",optional:!0},strokeWidth:{value:M,optional:!0},opacity:{value:k,scale:"auto",optional:!0}}}function Pb(t,e){e&&t.text((t=>kb(e[t])))}function jb(t,e){e&&t.text((([t])=>kb(e[t])))}function $b(t,{target:e,tip:n},{ariaLabel:i,title:s,fill:c,fillOpacity:a,stroke:l,strokeOpacity:r,strokeWidth:o,opacity:g,href:B}){i&&cU(t,"aria-label",(t=>i[t])),c&&cU(t,"fill",(t=>c[t])),a&&cU(t,"fill-opacity",(t=>a[t])),l&&cU(t,"stroke",(t=>l[t])),r&&cU(t,"stroke-opacity",(t=>r[t])),o&&cU(t,"stroke-width",(t=>o[t])),g&&cU(t,"opacity",(t=>g[t])),B&&sU(t,(t=>B[t]),e),n||function(t,e){e&&t.filter((t=>aF(e[t]))).append("title").call(Pb,e)}(t,s)}function qb(t,{target:e,tip:n},{ariaLabel:i,title:s,fill:c,fillOpacity:a,stroke:l,strokeOpacity:r,strokeWidth:o,opacity:g,href:B}){i&&cU(t,"aria-label",(([t])=>i[t])),c&&cU(t,"fill",(([t])=>c[t])),a&&cU(t,"fill-opacity",(([t])=>a[t])),l&&cU(t,"stroke",(([t])=>l[t])),r&&cU(t,"stroke-opacity",(([t])=>r[t])),o&&cU(t,"stroke-width",(([t])=>o[t])),g&&cU(t,"opacity",(([t])=>g[t])),B&&sU(t,(([t])=>B[t]),e),n||function(t,e){e&&t.filter((([t])=>aF(e[t]))).append("title").call(jb,e)}(t,s)}function*tU(t,e,n,i){const{z:s}=n,{z:c}=i,a=function({ariaLabel:t,title:e,fill:n,fillOpacity:i,stroke:s,strokeOpacity:c,strokeWidth:a,opacity:l,href:r},{tip:o}){return[t,o?void 0:e,n,i,s,c,a,l,r].filter((t=>void 0!==t))}(i,n),l=[...e,...a];for(const e of c?function(t,e,n){const i=Nt(t,(t=>e[t]));return void 0===n&&i.size>1+t.length>>1&&Tb("Warning: the implicit z channel has high cardinality. This may occur when the fill or stroke channel is associated with quantitative data rather than ordinal or categorical data. You can suppress this warning by setting the z option explicitly; if this data represents a single series, set z to null."),i.values()}(t,c,s):[t]){let t,n;t:for(const i of e){for(const t of l)if(!iF(t[i])){n&&n.push(-1);continue t}if(void 0!==t){n.push(i);for(let e=0;e<a.length;++e){if(Uh(a[e][i])!==t[e]){yield n,t=a.map((t=>Uh(t[i]))),n=[i];continue t}}}else n&&(yield n),t=a.map((t=>Uh(t[i]))),n=[i]}n&&(yield n)}}function eU(t){return!0===t?t="frame":!1===t?t=null:null!=t&&(t=ch(t,"clip",["frame","sphere"])),t}function nU(t,e,n,i){!function(t,e,n,i){let s;const{clip:c=i.clip}=e;switch(c){case"frame":{const{width:e,height:c,marginLeft:a,marginRight:l,marginTop:r,marginBottom:o}=n,g=Ob();s=`url(#${g})`,t=QU("svg:g",i).call((t=>t.append("svg:clipPath").attr("id",g).append("rect").attr("x",a).attr("y",r).attr("width",e-l-a).attr("height",c-r-o))).each((function(){this.appendChild(t.node()),t.node=()=>this}));break}case"sphere":{const{projection:e}=i;if(!e)throw new Error('the "sphere" clip option requires a projection');const n=Ob();s=`url(#${n})`,t.append("clipPath").attr("id",n).append("path").attr("d",Ar(e)({type:"Sphere"}));break}}cU(t,"aria-label",e.ariaLabel),cU(t,"aria-description",e.ariaDescription),cU(t,"aria-hidden",e.ariaHidden),cU(t,"clip-path",s)}(t,e,n,i),cU(t,"fill",e.fill),cU(t,"fill-opacity",e.fillOpacity),cU(t,"stroke",e.stroke),cU(t,"stroke-width",e.strokeWidth),cU(t,"stroke-opacity",e.strokeOpacity),cU(t,"stroke-linejoin",e.strokeLinejoin),cU(t,"stroke-linecap",e.strokeLinecap),cU(t,"stroke-miterlimit",e.strokeMiterlimit),cU(t,"stroke-dasharray",e.strokeDasharray),cU(t,"stroke-dashoffset",e.strokeDashoffset),cU(t,"shape-rendering",e.shapeRendering),cU(t,"filter",e.imageFilter),cU(t,"paint-order",e.paintOrder);const{pointerEvents:s=(!1===i.pointerSticky?"none":void 0)}=e;cU(t,"pointer-events",s)}function iU(t,e){!function(t,e,n){null!=n&&t.style(e,n)}(t,"mix-blend-mode",e.mixBlendMode),cU(t,"opacity",e.opacity)}function sU(t,e,n){t.each((function(t){const i=e(t);if(null!=i){const t=this.ownerDocument.createElementNS(Ne.svg,"a");t.setAttribute("fill","inherit"),t.setAttributeNS(Ne.xlink,"href",i),null!=n&&t.setAttribute("target",n),this.parentNode.insertBefore(t,this).appendChild(this)}}))}function cU(t,e,n){null!=n&&t.attr(e,n)}function aU(t,e,{x:n,y:i},s=zb,c=zb){s+=e.dx,c+=e.dy,n?.bandwidth&&(s+=n.bandwidth()/2),i?.bandwidth&&(c+=i.bandwidth()/2),(s||c)&&t.attr("transform",`translate(${s},${c})`)}function lU(t,e){if((t=KF(t))!==e)return t}function rU(t,e){if((t=OF(t))!==e)return t}const oU=/^-?([_a-z]|[\240-\377]|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])([_a-z0-9-]|[\240-\377]|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])*$/i;function gU(t){if(void 0===t)return"plot-d6a7b5";if(t=`${t}`,!oU.test(t))throw new Error(`invalid class name: ${t}`);return t}function BU(t,e){if("string"==typeof e)t.property("style",e);else if(null!=e)for(const n of t)Object.assign(n.style,e)}function dU({frameAnchor:t},{width:e,height:n,marginTop:i,marginRight:s,marginBottom:c,marginLeft:a}){return[/left$/.test(t)?a:/right$/.test(t)?e-s:(a+e-s)/2,/^top/.test(t)?i:/^bottom/.test(t)?n-c:(i+n-c)/2]}function IU(t={}){const{document:e=("undefined"!=typeof window?window.document:void 0),clip:n}=t;return{document:e,clip:eU(n)}}function QU(t,{document:e}){return Tn(we(t).call(e.documentElement))}const uU=Math.PI,FU=2*uU,hU=.618;function bU({projection:t,inset:e=0,insetTop:n=e,insetRight:i=e,insetBottom:s=e,insetLeft:c=e}={},a){if(null==t)return;if("function"==typeof t.stream)return t;let l,r,o="frame";if(gh(t)){let e;if(({type:t,domain:r,inset:e,insetTop:n=(void 0!==e?e:n),insetRight:i=(void 0!==e?e:i),insetBottom:s=(void 0!==e?e:s),insetLeft:c=(void 0!==e?e:c),clip:o=o,...l}=t),null==t)return}"function"!=typeof t&&({type:t}=UU(t));const{width:g,height:B,marginLeft:d,marginRight:I,marginTop:Q,marginBottom:u}=a,F=g-d-I-c-i,h=B-Q-u-n-s;if(t=t?.({width:F,height:h,clip:o,...l}),null==t)return;o=function(t,e,n,i,s){if(!1===t||null==t||"number"==typeof t)return t=>t;!0===t&&(t="frame");if("frame"===`${t}`.toLowerCase())return Ul(e,n,i,s);throw new Error(`unknown projection clip type: ${t}`)}(o,d,Q,g-I,B-u);let b,U=d+c,C=Q+n;if(null!=r){const[[e,n],[i,s]]=Ar(t).bounds(r),c=Math.min(F/(i-e),h/(s-n));c>0?(U-=(c*(e+i)-F)/2,C-=(c*(n+s)-h)/2,b=xr({point(t,e){this.stream.point(t*c+U,e*c+C)}})):Tb("Warning: the projection could not be fit to the specified domain; using the default scale.")}return b??=0===U&&0===C?fU():xr({point(t,e){this.stream.point(t+U,e+C)}}),{stream:e=>t.stream(b.stream(o(e)))}}function UU(t){switch(`${t}`.toLowerCase()){case"albers-usa":return CU(zr,.7463,.4673);case"albers":return yU(Tr,.7463,.4673);case"azimuthal-equal-area":return CU(Pr,4,4);case"azimuthal-equidistant":return CU($r,FU,FU);case"conic-conformal":return yU(so,FU,FU);case"conic-equal-area":return yU(Mr,6.1702,2.9781);case"conic-equidistant":return yU(ro,7.312,3.6282);case"equal-earth":return CU(Fo,5.4133,2.6347);case"equirectangular":return CU(ao,FU,uU);case"gnomonic":return CU(bo,3.4641,3.4641);case"identity":return{type:fU};case"reflect-y":return{type:GU};case"mercator":return CU(to,FU,FU);case"orthographic":return CU(Co,2,2);case"stereographic":return CU(fo,2,2);case"transverse-mercator":return CU(po,FU,FU);default:throw new Error(`unknown projection type: ${t}`)}}function CU(t,e,n){return{type:({width:i,height:s,rotate:c,precision:a=.15,clip:l})=>{const r=t();return null!=a&&r.precision?.(a),null!=c&&r.rotate?.(c),"number"==typeof l&&r.clipAngle?.(l),r.scale(Math.min(i/e,s/n)),r.translate([i/2,s/2]),r},aspectRatio:n/e}}function yU(t,e,n){const{type:i,aspectRatio:s}=CU(t,e,n);return{type:t=>{const{parallels:e,domain:n,width:s,height:c}=t,a=i(t);return null!=e&&(a.parallels(e),void 0===n&&a.fitSize([s,c],{type:"Sphere"})),a},aspectRatio:s}}const fU=jF({stream:t=>t}),GU=jF(xr({point(t,e){this.stream.point(t,-e)}}));function pU(t,e,n,i){const s=n[t],c=n[e],a=s.length,l=n[t]=new Float64Array(a).fill(NaN),r=n[e]=new Float64Array(a).fill(NaN);let o;const g=i.stream({point(t,e){l[o]=t,r[o]=e}});for(o=0;o<a;++o)g.point(s[o],c[o])}function mU({projection:t}={}){return null!=t&&("function"==typeof t.stream||(gh(t)&&(t=t.type),null!=t))}function AU(t){const e=[],n=[],i={scale:"x",value:e},s={scale:"y",value:n},c={point(t,i){e.push(t),n.push(i)},lineStart(){},lineEnd(){},polygonStart(){},polygonEnd(){},sphere(){}};for(const e of t.value)Ta(e,c);return[i,s]}const xU=new Map([["accent",Ed],["category10",Zd],["dark2",Vd],["paired",wd],["pastel1",Wd],["pastel2",Hd],["set1",Dd],["set2",Yd],["set3",kd],["tableau10",Jd]]);const LU=new Map([...xU,["brbg",RU(Td,zd)],["prgn",RU(Kd,Od)],["piyg",RU(_d,Pd)],["puor",RU(jd,$d)],["rdbu",RU(qd,tI)],["rdgy",RU(eI,nI)],["rdylbu",RU(iI,sI)],["rdylgn",RU(cI,aI)],["spectral",RU(lI,rI)],["burd",XU(qd,tI)],["buylrd",XU(iI,sI)],["blues",SU(NI,ZI)],["greens",SU(EI,VI)],["greys",SU(wI,WI)],["oranges",SU(JI,MI)],["purples",SU(HI,DI)],["reds",SU(YI,kI)],["turbo",vU(eQ)],["viridis",vU(iQ)],["magma",vU(sQ)],["inferno",vU(cQ)],["plasma",vU(aQ)],["cividis",vU(TI)],["cubehelix",vU(zI)],["warm",vU(KI)],["cool",vU(OI)],["bugn",SU(oI,gI)],["bupu",SU(BI,dI)],["gnbu",SU(II,QI)],["orrd",SU(uI,FI)],["pubu",SU(UI,CI)],["pubugn",SU(hI,bI)],["purd",SU(yI,fI)],["rdpu",SU(GI,pI)],["ylgn",SU(xI,LI)],["ylgnbu",SU(mI,AI)],["ylorbr",SU(SI,RI)],["ylorrd",SU(XI,vI)],["rainbow",NU(PI)],["sinebow",NU(tQ)]]);function SU(t,e){return({length:n})=>1===n?[t[3][1]]:2===n?[t[3][1],t[3][2]]:(n=Math.max(3,Math.floor(n)))>9?Ts(e,n):t[n]}function RU(t,e){return({length:n})=>2===n?[t[3][0],t[3][2]]:(n=Math.max(3,Math.floor(n)))>11?Ts(e,n):t[n]}function XU(t,e){return({length:n})=>2===n?[t[3][2],t[3][0]]:(n=Math.max(3,Math.floor(n)))>11?Ts((t=>e(1-t)),n):t[n].slice().reverse()}function vU(t){return({length:e})=>Ts(t,Math.max(2,Math.floor(e)))}function NU(t){return({length:e})=>Ts(t,Math.floor(e)+1).slice(0,-1)}function ZU(t){const e=`${t}`.toLowerCase();if(!LU.has(e))throw new Error(`unknown ordinal scheme: ${e}`);return LU.get(e)}function EU(t,e){const n=ZU(t),i="function"==typeof n?n({length:e}):n;return i.length!==e?i.slice(0,e):i}const VU=new Map([["brbg",zd],["prgn",Od],["piyg",Pd],["puor",$d],["rdbu",tI],["rdgy",nI],["rdylbu",sI],["rdylgn",aI],["spectral",rI],["burd",t=>tI(1-t)],["buylrd",t=>sI(1-t)],["blues",ZI],["greens",VI],["greys",WI],["purples",DI],["reds",kI],["oranges",MI],["turbo",eQ],["viridis",iQ],["magma",sQ],["inferno",cQ],["plasma",aQ],["cividis",TI],["cubehelix",zI],["warm",KI],["cool",OI],["bugn",gI],["bupu",dI],["gnbu",QI],["orrd",FI],["pubugn",bI],["pubu",CI],["purd",fI],["rdpu",pI],["ylgnbu",AI],["ylgn",LI],["ylorbr",RI],["ylorrd",vI],["rainbow",PI],["sinebow",tQ]]);function wU(t){const e=`${t}`.toLowerCase();if(!VU.has(e))throw new Error(`unknown quantitative scheme: ${e}`);return VU.get(e)}const WU=new Set(["brbg","prgn","piyg","puor","rdbu","rdgy","rdylbu","rdylgn","spectral","burd","buylrd"]);const HU=t=>e=>t(1-e),DU=[0,1],YU=new Map([["number",As],["rgb",Cs],["hsl",Ds],["hcl",Ys],["lab",function(t,e){var n=Us((t=Pi(t)).l,(e=Pi(e)).l),i=Us(t.a,e.a),s=Us(t.b,e.b),c=Us(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=i(e),t.b=s(e),t.opacity=c(e),t+""}}]]);function kU(t){const e=`${t}`.toLowerCase();if(!YU.has(e))throw new Error(`unknown interpolator: ${e}`);return YU.get(e)}function JU(t,e,n,{type:i,nice:s,clamp:c,zero:a,domain:l=PU(t,n),unknown:r,round:o,scheme:g,interval:B,range:d=(qh.get(t)===Oh?$U(n,l):qh.get(t)===_h?qU(n,l):qh.get(t)===Ph?DU:void 0),interpolate:I=(qh.get(t)===Kh?null==g&&void 0!==d?Cs:wU(void 0!==g?g:"cyclical"===i?"rainbow":"turbo"):o?vs:As),reverse:Q}){if(B=xh(B,i),"cyclical"!==i&&"sequential"!==i||(i="linear"),"function"!=typeof I&&(I=kU(I)),Q=!!Q,void 0!==d){if((l=ah(l)).length!==(d=ah(d)).length){if(1===I.length)throw new Error("invalid piecewise interpolator");I=Ms(I,d),d=void 0}}if(1===I.length?(Q&&(I=HU(I),Q=!1),void 0===d&&(d=Float64Array.from(l,((t,e)=>e/(l.length-1))),2===d.length&&(d=DU)),e.interpolate((d===DU?jF:nC)(I))):e.interpolate(I),a){const[t,e]=pt(l);(t>0||e<0)&&(Mh(l=rh(l))!==Math.sign(t)?l[l.length-1]=0:l[0]=0)}return Q&&(l=Ie(l)),e.domain(l).unknown(r),s&&(e.nice(function(t,e){return!0===t?void 0:"number"==typeof t?t:function(t,e){if((t=xh(t,e))&&"function"!=typeof t.ceil)throw new Error("invalid interval: missing ceil method");return t}(t,e)}(s,i)),l=e.domain()),void 0!==d&&e.range(d),c&&e.clamp(c),{type:i,domain:l,range:d,scale:e,interpolate:I,interval:B}}function MU(t,e,{exponent:n=1,...i}){return JU(t,rg().exponent(n),e,{...i,type:"pow"})}function TU(t,e,{base:n=10,domain:i=tC(e),...s}){return JU(t,qo().base(n),e,{...s,domain:i})}function zU(t,e,{constant:n=1,...i}){return JU(t,ig().constant(n),e,i)}function KU(t,e,{range:n,quantiles:i=(void 0===n?5:(n=[...n]).length),n:s=i,scheme:c="rdylbu",domain:a=eC(e),unknown:l,interpolate:r,reverse:o}){return void 0===n&&(n=void 0!==r?Ts(r,s):qh.get(t)===Kh?EU(c,s):void 0),a.length>0&&(a=og(a,void 0===n?{length:s}:n).quantiles()),OU(t,e,{domain:a,range:n,reverse:o,unknown:l})}function OU(t,e,{domain:n=[0],unknown:i,scheme:s="rdylbu",interpolate:c,range:a=(void 0!==c?Ts(c,n.length+1):qh.get(t)===Kh?EU(s,n.length+1):void 0),reverse:l}){const r=Mh(n=ah(n));if(!isNaN(r)&&!function(t,e){for(let n=1,i=t.length,s=t[0];n<i;++n){const i=Bt(s,s=t[n]);if(0!==i&&i!==e)return!1}return!0}(n,r))throw new Error(`the ${t} scale has a non-monotonic domain`);return l&&(a=Ie(a)),{type:"threshold",scale:gg(r<0?Ie(n):n,void 0===a?[]:a).unknown(i),domain:n,range:a}}function _U(t,e=lF){return t.length?[jt(t,(({value:t})=>void 0===t?t:jt(t,e))),_t(t,(({value:t})=>void 0===t?t:_t(t,e)))]:[0,1]}function PU(t,e){const n=qh.get(t);return(n===Oh||n===Ph||n===_h?jU:_U)(e)}function jU(t){return[0,t.length?_t(t,(({value:t})=>void 0===t?t:_t(t,lF))):1]}function $U(t,e){const n=t.find((({radius:t})=>void 0!==t));if(void 0!==n)return[0,n.radius];const i=ne(t,.5,(({value:t})=>void 0===t?NaN:ne(t,.25,rF))),s=e.map((t=>3*Math.sqrt(t/i))),c=30/_t(s);return c<1?s.map((t=>t*c)):s}function qU(t,e){const n=le(t,(({value:t})=>void 0===t?NaN:le(t,Math.abs))),i=e.map((t=>12*t/n)),s=60/_t(i);return s<1?i.map((t=>t*s)):i}function tC(t){for(const{value:e}of t)if(void 0!==e)for(let n of e){if(n>0)return _U(t,rF);if(n<0)return _U(t,oF)}return[1,10]}function eC(t){const e=[];for(const{value:n}of t)if(void 0!==n)for(const t of n)e.push(t);return e}function nC(t){return(e,n)=>i=>t(e+i*(n-e))}function iC(t,e,n,i,{type:s,nice:c,clamp:a,domain:l=_U(i),unknown:r,pivot:o=0,scheme:g,range:B,symmetric:d=!0,interpolate:I=(qh.get(t)===Kh?null==g&&void 0!==B?Cs:wU(void 0!==g?g:"rdbu"):As),reverse:Q}){o=+o,l=ah(l);let[u,F]=l;if(l.length>2&&Tb(`Warning: the diverging ${t} scale domain contains extra elements.`),Bt(u,F)<0&&([u,F]=[F,u],Q=!Q),u=Math.min(u,o),F=Math.max(F,o),"function"!=typeof I&&(I=kU(I)),void 0!==B&&(I=1===I.length?nC(I)(...B):Ms(I,B)),Q&&(I=HU(I)),d){const t=n.apply(o),e=t-n.apply(u),i=n.apply(F)-t;e<i?u=n.invert(t-i):e>i&&(F=n.invert(t+e))}return e.domain([u,o,F]).unknown(r).interpolator(I),a&&e.clamp(a),c&&e.nice(c),{type:s,domain:[u,F],pivot:o,interpolate:I,scale:e}}function sC(t,e,n){return iC(t,Sd(),rC,e,n)}function cC(t,e,{exponent:n=1,...i}){return iC(t,vd().exponent(n=+n),function(t){return.5===t?gC:{apply:e=>Math.sign(e)*Math.pow(Math.abs(e),t),invert:e=>Math.sign(e)*Math.pow(Math.abs(e),1/t)}}(n),e,{...i,type:"diverging-pow"})}function aC(t,e,{base:n=10,pivot:i=1,domain:s=_U(e,i<0?oF:rF),...c}){return iC(t,Rd().base(n=+n),oC,e,{domain:s,pivot:i,...c})}function lC(t,e,{constant:n=1,...i}){return iC(t,Xd().constant(n=+n),function(t){return{apply:e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),invert:e=>Math.sign(e)*Math.expm1(Math.abs(e))*t}}(n),e,i)}const rC={apply:t=>t,invert:t=>t},oC={apply:Math.log,invert:Math.exp},gC={apply:t=>Math.sign(t)*Math.sqrt(Math.abs(t)),invert:t=>Math.sign(t)*(t*t)};function BC(t,e,n,i){return JU(t,e,n,i)}function dC(t,e,n){return BC(t,function(){return mo.apply(Ad(qg,tB,Og,zg,Xg,xg,mg,Gg,fg,cB).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}(),e,n)}function IC(t,e,n){return BC(t,function(){return mo.apply(Ad(jg,$g,_g,Kg,Hg,Lg,Ag,pg,fg,aB).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}(),e,n)}const QC=Symbol("ordinal");function uC(t,e,n,{type:i,interval:s,domain:c,range:a,reverse:l,hint:r}){return s=xh(s,i),void 0===c&&(c=bC(n,s,t)),"categorical"!==i&&i!==QC||(i="ordinal"),l&&(c=Ie(c)),c=e.domain(c).domain(),void 0!==a&&("function"==typeof a&&(a=a(c)),e.range(a)),{type:i,domain:c,range:a,scale:e,hint:r,interval:s}}function FC(t,e,{type:n,interval:i,domain:s,range:c,scheme:a,unknown:l,...r}){let o;if(i=xh(i,n),void 0===s&&(s=bC(e,i,t)),qh.get(t)===jh)o=function(t){return{fill:UC(t,"fill"),stroke:UC(t,"stroke")}}(e),c=void 0===c?function(t){return Dh(t.fill)?zQ:TQ}(o):lh(c,sb);else if(qh.get(t)===Kh&&(void 0!==c||"ordinal"!==n&&n!==QC||(c=function(t,e="greys"){const n=new Set,[i,s]=EU(e,2);for(const e of t)if(null!=e)if(!0===e)n.add(s);else{if(!1!==e)return;n.add(i)}return[...n]}(s,a),void 0!==c&&(a=void 0)),void 0===a&&void 0===c&&(a="ordinal"===n?"turbo":"tableau10"),void 0!==a))if(void 0!==c){const t=wU(a),e=c[0],n=c[1]-c[0];c=({length:i})=>Ts((i=>t(e+n*i)),i)}else c=ZU(a);if(l===xo)throw new Error(`implicit unknown on ${t} scale is not supported`);return uC(t,Lo().unknown(l),e,{...r,type:n,domain:s,range:c,hint:o})}function hC(t,e,n,i){let{round:s}=n;return void 0!==s&&t.round(s=!!s),(t=uC(i,t,e,n)).round=s,t}function bC(t,e,n){const i=new xt;for(const{value:e,domain:n}of t){if(void 0!==n)return n();if(void 0!==e)for(const t of e)i.add(t)}if(void 0!==e){const[t,n]=pt(i).map(e.floor,e);return e.range(t,e.offset(n))}if(i.size>1e4&&qh.get(n)===zh)throw new Error(`implicit ordinal domain of ${n} scale has more than 10,000 values`);return wt(i,sF)}function UC(t,e){let n;for(const{hint:i}of t){const t=i?.[e];if(void 0!==t)if(void 0===n)n=t;else if(n!==t)return}return n}function CC(t,{label:e,inset:n=0,insetTop:i=n,insetRight:s=n,insetBottom:c=n,insetLeft:a=n,round:l,nice:r,clamp:o,zero:g,align:B,padding:d,projection:I,facet:{label:Q=e}={},...u}={}){const F={};for(const[n,h]of t){const t=u[n],b=SC(n,h,{round:qh.get(n)===zh?l:void 0,nice:r,clamp:o,zero:g,align:B,padding:d,projection:I,...t});if(b){let{label:l=("fx"===n||"fy"===n?Q:e),percent:r,transform:o,inset:g,insetTop:B=(void 0!==g?g:"y"===n?i:0),insetRight:d=(void 0!==g?g:"x"===n?s:0),insetBottom:I=(void 0!==g?g:"y"===n?c:0),insetLeft:u=(void 0!==g?g:"x"===n?a:0)}=t||{};if(null==o)o=void 0;else if("function"!=typeof o)throw new Error("invalid scale transform; not a function");b.percent=!!r,b.label=void 0===l?fC(h,b):l,b.transform=o,"x"===n||"fx"===n?(b.insetLeft=+u,b.insetRight=+d):"y"!==n&&"fy"!==n||(b.insetTop=+B,b.insetBottom=+I),F[n]=b}}return F}function yC(t){const e={},n={scales:e};for(const[i,s]of Object.entries(t)){const{scale:t,type:c,interval:a,label:l}=s;e[i]=WC(s),n[i]=t,t.type=c,null!=a&&(t.interval=a),null!=l&&(t.label=l)}return n}function fC(t=[],e){let n;for(const{label:e}of t)if(void 0!==e)if(void 0===n)n=e;else if(n!==e)return;if(void 0!==n)return!NC(e)&&e.percent&&(n=`${n} (%)`),{inferred:!0,toString:()=>n}}function GC(t){const{marginTop:e,marginRight:n,marginBottom:i,marginLeft:s,width:c,height:a,facet:{marginTop:l,marginRight:r,marginBottom:o,marginLeft:g}}=t;return{marginTop:Math.max(e,l),marginRight:Math.max(n,r),marginBottom:Math.max(i,o),marginLeft:Math.max(s,g),width:c,height:a}}function pC({fx:t,fy:e},n){const{marginTop:i,marginRight:s,marginBottom:c,marginLeft:a,width:l,height:r}=GC(n);return{marginTop:i,marginRight:s,marginBottom:c,marginLeft:a,width:t?t.scale.bandwidth()+a+s:l,height:e?e.scale.bandwidth()+i+c:r,facet:{width:l,height:r}}}function mC(t,e){if(void 0===t.range){const{insetLeft:n,insetRight:i}=t,{width:s,marginLeft:c=0,marginRight:a=0}=e,l=c+n,r=s-a-i;t.range=[l,Math.max(l,r)],NC(t)||(t.range=LC(t)),t.scale.range(t.range)}xC(t)}function AC(t,e){if(void 0===t.range){const{insetTop:n,insetBottom:i}=t,{height:s,marginTop:c=0,marginBottom:a=0}=e,l=c+n,r=s-a-i;t.range=[Math.max(l,r),l],NC(t)?t.range.reverse():t.range=LC(t),t.scale.range(t.range)}xC(t)}function xC(t){void 0===t.round&&function({type:t}){return"point"===t||"band"===t}(t)&&function({scale:t}){const e=t.domain().length,[n,i]=t.range(),s=t.paddingInner?t.paddingInner():1,c=t.paddingOuter?t.paddingOuter():t.padding(),a=e-s,l=Math.abs(i-n)/Math.max(1,a+2*c);return(l-Math.floor(l))*a}(t)<=30&&t.scale.round(!0)}function LC(t){const e=t.scale.domain().length+ZC(t);if(!(e>2))return t.range;const[n,i]=t.range;return Array.from({length:e},((t,s)=>n+s/(e-1)*(i-n)))}function SC(t,e=[],n={}){const i=function(t,e,{type:n,domain:i,range:s,scheme:c,pivot:a,projection:l}){if("fx"===t||"fy"===t)return"band";"x"!==t&&"y"!==t||null==l||(n=XC);for(const{type:t}of e)if(void 0!==t)if(void 0===n)n=t;else if(n!==t)throw new Error(`scale incompatible with channel: ${n} !== ${t}`);if(n===XC)return;if(void 0!==n)return n;if(void 0===i&&!e.some((({value:t})=>void 0!==t)))return;const r=qh.get(t);if(r===Oh)return"sqrt";if(r===Ph||r===_h)return"linear";if(r===jh)return"ordinal";if((i||s||[]).length>2)return vC(r);if(void 0!==i){if(vh(i))return vC(r);if(Nh(i))return"utc"}else{const t=e.map((({value:t})=>t)).filter((t=>void 0!==t));if(t.some(vh))return vC(r);if(t.some(Nh))return"utc"}if(r===Kh){if(null!=a||function(t){return null!=t&&WU.has(`${t}`.toLowerCase())}(c))return"diverging";if(function(t){return null!=t&&xU.has(`${t}`.toLowerCase())}(c))return"categorical"}return"linear"}(t,e,n);if(void 0===n.type&&void 0===n.domain&&void 0===n.range&&null==n.interval&&"fx"!==t&&"fy"!==t&&NC({type:i})){const n=e.map((({value:t})=>t)).filter((t=>void 0!==t));n.some(Nh)?Tb(`Warning: some data associated with the ${t} scale are dates. Dates are typically associated with a "utc" or "time" scale rather than a "${RC(i)}" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can specify the interval of the ${t} scale (e.g., d3.utcDay), or you can suppress this warning by setting the type of the ${t} scale to "${RC(i)}".`):n.some(Zh)?Tb(`Warning: some data associated with the ${t} scale are strings that appear to be dates (e.g., YYYY-MM-DD). If these strings represent dates, you should parse them to Date objects. Dates are typically associated with a "utc" or "time" scale rather than a "${RC(i)}" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can suppress this warning by setting the type of the ${t} scale to "${RC(i)}".`):n.some(Eh)&&Tb(`Warning: some data associated with the ${t} scale are strings that appear to be numbers. If these strings represent numbers, you should parse or coerce them to numbers. Numbers are typically associated with a "linear" scale rather than a "${RC(i)}" scale. If you want to treat this data as ordinal, you can specify the interval of the ${t} scale (e.g., 1 for integers), or you can suppress this warning by setting the type of the ${t} scale to "${RC(i)}".`)}switch(n.type=i,i){case"diverging":case"diverging-sqrt":case"diverging-pow":case"diverging-log":case"diverging-symlog":case"cyclical":case"sequential":case"linear":case"sqrt":case"threshold":case"quantile":case"pow":case"log":case"symlog":n=VC(e,n,$F);break;case"identity":switch(qh.get(t)){case zh:n=VC(e,n,$F);break;case jh:n=VC(e,n,wC)}break;case"utc":case"time":n=VC(e,n,th)}switch(i){case"diverging":return sC(t,e,n);case"diverging-sqrt":return function(t,e,n){return cC(t,e,{...n,exponent:.5})}(t,e,n);case"diverging-pow":return cC(t,e,n);case"diverging-log":return aC(t,e,n);case"diverging-symlog":return lC(t,e,n);case"categorical":case"ordinal":case QC:return FC(t,e,n);case"cyclical":case"sequential":case"linear":return function(t,e,n){return JU(t,Jo(),e,n)}(t,e,n);case"sqrt":return function(t,e,n){return MU(t,e,{...n,exponent:.5})}(t,e,n);case"threshold":return OU(t,0,n);case"quantile":return KU(t,e,n);case"quantize":return function(t,e,{range:n,n:i=(void 0===n?5:(n=[...n]).length),scheme:s="rdylbu",domain:c=PU(t,e),unknown:a,interpolate:l,reverse:r}){const[o,g]=pt(c);let B;return void 0===n?(B=Tt(o,g,i),B[0]<=o&&B.splice(0,1),B[B.length-1]>=g&&B.pop(),i=B.length+1,n=void 0!==l?Ts(l,i):qh.get(t)===Kh?EU(s,i):void 0):(B=Ts(As(o,g),i+1).slice(1,-1),o instanceof Date&&(B=B.map((t=>new Date(t))))),Mh(ah(c))<0&&B.reverse(),OU(t,0,{domain:B,range:n,reverse:r,unknown:a})}(t,e,n);case"pow":return MU(t,e,n);case"log":return TU(t,e,n);case"symlog":return zU(t,e,n);case"utc":return IC(t,e,n);case"time":return dC(t,e,n);case"point":return function(t,e,{align:n=.5,padding:i=.5,...s}){return hC(Xo().align(n).padding(i),e,s,t)}(t,e,n);case"band":return function(t,e,{align:n=.5,padding:i=.1,paddingInner:s=i,paddingOuter:c=("fx"===t||"fy"===t?0:i),...a}){return hC(So().align(n).paddingInner(s).paddingOuter(c),e,a,t)}(t,e,n);case"identity":return function(t){return{type:"identity",scale:(e=qh.get(t),e===zh||e===Oh||e===_h||e===Ph?Mo():t=>t)};var e}(t);case void 0:return;default:throw new Error(`unknown scale type: ${i}`)}}function RC(t){return"symbol"==typeof t?t.description:t}const XC={toString:()=>"projection"};function vC(t){switch(t){case zh:return"point";case Kh:return QC;default:return"ordinal"}}function NC({type:t}){return"ordinal"===t||"point"===t||"band"===t||t===QC}function ZC({type:t}){return"threshold"===t}function EC(t){if(void 0===t)return!0;const e=t.domain(),n=t(e[0]);for(let i=1,s=e.length;i<s;++i)if(t(e[i])-n)return!1;return!0}function VC(t,{domain:e,...n},i){for(const e of t)void 0!==e.value&&(e.value=i(e.value));return{domain:void 0===e?e:i(e),...n}}function wC(t){return lh(t,sb)}function WC({scale:t,type:e,domain:n,range:i,interpolate:s,interval:c,transform:a,percent:l,pivot:r}){if("identity"===e)return{type:"identity",apply:t=>t,invert:t=>t};const o=t.unknown?t.unknown():void 0;return{type:e,domain:rh(n),...void 0!==i&&{range:rh(i)},...void 0!==a&&{transform:a},...l&&{percent:l},...void 0!==o&&{unknown:o},...void 0!==c&&{interval:c},...void 0!==s&&{interpolate:s},...t.clamp&&{clamp:t.clamp()},...void 0!==r&&{pivot:r,symmetric:!1},...t.base&&{base:t.base()},...t.exponent&&{exponent:t.exponent()},...t.constant&&{constant:t.constant()},...t.align&&{align:t.align(),round:t.round()},...t.padding&&(t.paddingInner?{paddingInner:t.paddingInner(),paddingOuter:t.paddingOuter()}:{padding:t.padding()}),...t.bandwidth&&{bandwidth:t.bandwidth(),step:t.step()},apply:e=>t(e),...t.invert&&{invert:e=>t.invert(e)}}}function HC({x:t,y:e,fy:n,fx:i},{projection:s,aspectRatio:c},{width:a,marginTopDefault:l,marginRightDefault:r,marginBottomDefault:o,marginLeftDefault:g}){const B=n?n.scale.domain().length:1,d=function(t){if("function"==typeof t?.stream)return hU;if(gh(t)&&(t=t.type),null!=t){if("function"!=typeof t){const{aspectRatio:e}=UU(t);if(e)return e}return hU}}(s);if(d){const t=(1.1*B-.1)/(1.1*(i?i.scale.domain().length:1)-.1)*d,e=Math.max(.1,Math.min(10,t));return Math.round((a-g-r)*e+l+o)}const I=e?NC(e)?e.scale.domain().length:Math.max(7,17/B):1;if(null!=c){if(c=+c,!(isFinite(c)&&c>0))throw new Error(`invalid aspectRatio: ${c}`);const s=DC("y",e)/(DC("x",t)*c),B=i?i.scale.bandwidth():1,d=n?n.scale.bandwidth():1;return(s*(B*(a-g-r)-t.insetLeft-t.insetRight)+e.insetTop+e.insetBottom)/d+l+o}return!(!e&&!n)*Math.max(1,Math.min(60,I*B))*20+30*!!i+60}function DC(t,e){if(!e)throw new Error(`aspectRatio requires ${t} scale`);const{type:n,domain:i}=e;let s;switch(n){case"linear":case"utc":case"time":s=Number;break;case"pow":{const t=e.scale.exponent();s=e=>Math.pow(e,t);break}case"log":s=Math.log;break;case"point":case"band":return i.length;default:throw new Error(`unsupported ${t} scale for aspectRatio: ${n}`)}const[c,a]=pt(i);return Math.abs(s(a)-s(c))}function YC(t,e){const{fx:n,fy:i}=CC(t,e),s=n?.scale.domain(),c=i?.scale.domain();return s&&c?function(...t){const e="function"==typeof t[t.length-1]&&function(t){return e=>t(...e)}(t.pop()),n=(t=t.map(Ct)).map(bt),i=t.length-1,s=new Array(i+1).fill(0),c=[];if(i<0||n.some(Ut))return c;for(;;){c.push(s.map(((e,n)=>t[n][e])));let a=i;for(;++s[a]===n[a];){if(0===a)return e?c.map(e):c;s[a--]=0}}}(s,c).map((([t,e],n)=>({x:t,y:e,i:n}))):s?s.map(((t,e)=>({x:t,i:e}))):c?c.map(((t,e)=>({y:t,i:e}))):void 0}function kC(t,{fx:e,fy:n}){const i=Fh(t),s=e?.value,c=n?.value;return e&&n?Zt(i,(t=>(t.fx=s[t[0]],t.fy=c[t[0]],t)),(t=>s[t]),(t=>c[t])):e?Zt(i,(t=>(t.fx=s[t[0]],t)),(t=>s[t])):Zt(i,(t=>(t.fy=c[t[0]],t)),(t=>c[t]))}function JC(t){const e=[],n=new Uint32Array(de(t,(t=>t.length)));for(const i of t){let s=0;for(const e of t)i!==e&&(n.set(e,s),s+=e.length);e.push(n.slice(0,s))}return e}const MC=new Map([["top",_C],["right",$C],["bottom",PC],["left",jC],["top-left",qC(_C,jC)],["top-right",qC(_C,$C)],["bottom-left",qC(PC,jC)],["bottom-right",qC(PC,$C)],["top-empty",function(t,{y:e},{x:n,y:i,empty:s}){if(s)return!1;if(!e)return;const c=KC(e,i);if(c>0)return OC(t,n,e[c-1])}],["right-empty",function(t,{x:e},{x:n,y:i,empty:s}){if(s)return!1;if(!e)return;const c=KC(e,n);if(c<e.length-1)return OC(t,e[c+1],i)}],["bottom-empty",function(t,{y:e},{x:n,y:i,empty:s}){if(s)return!1;if(!e)return;const c=KC(e,i);if(c<e.length-1)return OC(t,n,e[c+1])}],["left-empty",function(t,{x:e},{x:n,y:i,empty:s}){if(s)return!1;if(!e)return;const c=KC(e,n);if(c>0)return OC(t,e[c-1],i)}],["empty",function(t,e,{empty:n}){return n}]]);const TC=new WeakMap;function zC(t){let e=TC.get(t);return e||TC.set(t,e=new At(lh(t,((t,e)=>[t,e])))),e}function KC(t,e){return zC(t).get(e)}function OC(t,e,n){return function(t,e,n){return e=Uh(e),n=Uh(n),t.find((t=>Object.is(Uh(t.x),e)&&Object.is(Uh(t.y),n)))}(t,e,n)?.empty}function _C(t,{y:e},{y:n}){return!e||0===KC(e,n)}function PC(t,{y:e},{y:n}){return!e||KC(e,n)===e.length-1}function jC(t,{x:e},{x:n}){return!e||0===KC(e,n)}function $C(t,{x:e},{x:n}){return!e||KC(e,n)===e.length-1}function qC(t,e){return function(){return t.apply(null,arguments)&&e.apply(null,arguments)}}function ty(t,{channels:{fx:e,fy:n},groups:i}){return e&&n?t.map((({x:t,y:e})=>i.get(t)?.get(e)??[])):e?t.map((({x:t})=>i.get(t)??[])):t.map((({y:t})=>i.get(t)??[]))}class ey{constructor(t,e={},n={},i){const{facet:s="auto",facetAnchor:c,fx:a,fy:l,sort:r,dx:o=0,dy:g=0,margin:B=0,marginTop:d=B,marginRight:I=B,marginBottom:Q=B,marginLeft:u=B,clip:F=i?.clip,channels:h,tip:b,render:U}=n;if(this.data=t,this.sort=Ih(r)?r:null,this.initializer=ab(n).initializer,this.transform=this.initializer?n.transform:cb(n).transform,null===s||!1===s?this.facet=null:(this.facet=ch(!0===s?"include":s,"facet",["auto","include","exclude","super"]),this.fx=t===YF&&"string"==typeof a?[a]:a,this.fy=t===YF&&"string"==typeof l?[l]:l),this.facetAnchor=function(t){if(null==t)return null;const e=MC.get(`${t}`.toLowerCase());if(e)return e;throw new Error(`invalid facet anchor: ${t}`)}(c),e=Th(e),void 0!==h&&(e={...sy(h),...e}),void 0!==i&&(e={..._b(this,n,i),...e}),this.channels=Object.fromEntries(Object.entries(e).map((([e,n])=>{if(dh(n.value)){const{value:t,label:e=n.label,scale:i=n.scale}=n.value;n={...n,label:e,scale:i,value:t}}if(t===YF&&"string"==typeof n.value){const{value:t}=n;n={...n,value:[t]}}return[e,n]})).filter((([t,{value:e,optional:n}])=>{if(null!=e)return!0;if(n)return!1;throw new Error(`missing channel value: ${t}`)}))),this.dx=+o,this.dy=+g,this.marginTop=+d,this.marginRight=+I,this.marginBottom=+Q,this.marginLeft=+u,this.clip=eU(F),this.tip=function(t){return!0===t?"xy":!1===t||null==t?null:"string"==typeof t?ch(t,"tip",["x","y","xy"]):t}(b),"super"===this.facet){if(a||l)throw new Error("super-faceting cannot use fx or fy");for(const t in this.channels){const{scale:n}=e[t];if("x"===n||"y"===n)throw new Error("super-faceting cannot use x or y")}}null!=U&&(this.render=iy(U,this.render))}initialize(t,e,n){let i=ah(this.data);void 0===t&&null!=i&&(t=[Fh(i)]);const s=t;null!=this.transform&&(({facets:t,data:i}=this.transform(i,t,n)),i=ah(i)),void 0!==t&&(t.original=s);const c=function(t,e){return Object.fromEntries(Object.entries(t).map((([t,n])=>[t,Rb(e,n,t)])))}(this.channels,i);return null!=this.sort&&function(t,e,n,i,s){const{order:c,reverse:a,reduce:l=!0,limit:r}=s;for(const o in s){if(!qh.has(o))continue;let{value:g,order:B=c,reverse:d=a,reduce:I=l,limit:Q=r}=Sh(s[o]);const u=g?.startsWith("-");if(u&&(g=g.slice(1)),B=void 0===B?u!==("width"===g||"height"===g)?Wb:wb:Vb(B),null==I||!1===I)continue;const F="fx"===o||"fy"===o?Nb(e,i[o]):vb(n,o);if(!F)throw new Error(`missing channel for scale: ${o}`);const h=F.value,[b=0,U=1/0]=Rh(Q)?Q:Q<0?[Q]:[0,Q];if(null==g)F.domain=()=>{let t=Array.from(new xt(h));return d&&(t=t.reverse()),0===b&&U===1/0||(t=t.slice(b,U)),t};else{const e="data"===g?t:"height"===g?Zb(n,"y1","y2"):"width"===g?Zb(n,"x1","x2"):Eb(n,g,"y"===g?"y2":"x"===g?"x2":void 0),i=bb(!0===I?"max":I,e);F.domain=()=>{let t=Et(Fh(h),(t=>i.reduceIndex(t,e)),(t=>h[t]));return B&&t.sort(B),d&&t.reverse(),0===b&&U===1/0||(t=t.slice(b,U)),t.map(_F)}}}}(i,t,c,e,this.sort),{data:i,facets:t,channels:c}}filter(t,e,n){for(const i in e){const{filter:s=iF}=e[i];if(null!==s){const e=n[i];t=t.filter((t=>s(e[t])))}}return t}project(t,e,n){for(const i in t)if("x"===t[i].scale&&/^x|x$/.test(i)){const s=i.replace(/^x|x$/,"y");s in t&&"y"===t[s].scale&&pU(i,s,e,n.projection)}}scale(t,e,n){const i=function(t,e){const n=Object.fromEntries(Object.entries(t).map((([t,{scale:n,value:i}])=>{const s=null==n?null:e[n];return[t,null==s?i:lh(i,s)]})));return n.channels=t,n}(t,e);return n.projection&&this.project(t,i,n),i}}function ny(...t){return t.plot=ey.prototype.plot,t}function iy(t,e){if(null==t)return null===e?void 0:e;if(null==e)return null===t?void 0:t;if("function"!=typeof t)throw new TypeError(`invalid render transform: ${t}`);if("function"!=typeof e)throw new TypeError(`invalid render transform: ${e}`);return function(n,i,s,c,a,l){return t.call(this,n,i,s,c,a,((t,n,i,s,c)=>e.call(this,t,n,i,s,c,l)))}}function sy(t){return Object.fromEntries(Object.entries(Th(t)).map((([t,e])=>(void 0===(e="string"==typeof e?{value:e,label:t}:Sh(e)).filter&&null==e.scale&&(e={...e,filter:null}),[t,e]))))}function cy(t,e){return!0===t?.tip?{...t,tip:e}:gh(t?.tip)&&void 0===t.tip.pointer?{...t,tip:{...t.tip,pointer:e}}:t}const ay=new WeakMap;function ly(t,e,{x:n,y:i,px:s,py:c,maxRadius:a=40,channels:l,render:r,...o}={}){return a=+a,null!=s&&(n??=null,l={...l,px:{value:s,scale:"x"}}),null!=c&&(i??=null,l={...l,py:{value:c,scale:"y"}}),{x:n,y:i,channels:l,...o,render:iy((function(n,i,s,c,l,r){const o=(l={...l,pointerSticky:!1}).ownerSVGElement,{data:g}=l.getMarkState(this);let B=ay.get(o);B||ay.set(o,B={sticky:!1,roots:[],renders:[]});let d=B.renders.push(v)-1;const{x:I,y:Q,fx:u,fy:F}=i;let h=u?u(n.fx)-c.marginLeft:0,b=F?F(n.fy)-c.marginTop:0;I?.bandwidth&&(h+=I.bandwidth()/2),Q?.bandwidth&&(b+=Q.bandwidth()/2);const U=null!=n.fi;let C;if(U){let t=B.facetStates;t||(B.facetStates=t=new Map),C=t.get(this),C||t.set(this,C=new Map)}const[y,f]=dU(this,c),{px:G,py:p}=s,m=G?t=>G[t]:By(s,y),A=p?t=>p[t]:dy(s,f);let x,L,S,R;function X(t,e){if(U){if(R&&(R=cancelAnimationFrame(R)),null!=t)return C.set(n.fi,e),void(R=requestAnimationFrame((()=>{R=null;for(const[i,s]of C)if(s<e||s===e&&i<n.fi){t=null;break}v(t)})));C.delete(n.fi)}v(t)}function v(t){if(x===t&&S===B.sticky)return;x=t,S=l.pointerSticky=B.sticky;const e=null==x?[]:[x];U&&(e.fx=n.fx,e.fy=n.fy,e.fi=n.fi);const a=r(e,i,s,c,l);if(L){if(U){const t=L.parentNode,e=L.getAttribute("transform"),n=a.getAttribute("transform");e?a.setAttribute("transform",e):a.removeAttribute("transform"),n?t.setAttribute("transform",n):t.removeAttribute("transform"),a.removeAttribute("aria-label"),a.removeAttribute("aria-description"),a.removeAttribute("aria-hidden")}L.replaceWith(a)}return B.roots[d]=L=a,null==x&&C?.size>1||l.dispatchValue(null==x?null:g[x]),a}function N(i){if(B.sticky||"mouse"===i.pointerType&&1===i.buttons)return;let[s,l]=zn(i);s-=h,l-=b;const r=s<c.marginLeft||s>c.width-c.marginRight?1:t,o=l<c.marginTop||l>c.height-c.marginBottom?1:e;let g=null,d=a*a;for(const t of n){const e=r*(m(t)-s),n=o*(A(t)-l),i=e*e+n*n;i<=d&&(g=t,d=i)}if(null!=g&&(1!==t||1!==e)){const t=m(g)-s,e=A(g)-l;d=t*t+e*e}X(g,d)}return o.addEventListener("pointerenter",N),o.addEventListener("pointermove",N),o.addEventListener("pointerdown",(function(t){"mouse"===t.pointerType&&null!=x&&(B.sticky&&B.roots.some((e=>e?.contains(t.target)))||(B.sticky?(B.sticky=!1,B.renders.forEach((t=>t(null)))):(B.sticky=!0,v(x)),t.stopImmediatePropagation()))})),o.addEventListener("pointerleave",(function(t){"mouse"===t.pointerType&&(B.sticky||X(null))})),v(null)}),r)}}function ry(t){return ly(1,1,t)}function oy(t){return ly(1,.01,t)}function gy(t){return ly(.01,1,t)}function By({x1:t,x2:e,x:n=t},i){return t&&e?n=>(t[n]+e[n])/2:n?t=>n[t]:()=>i}function dy({y1:t,y2:e,y:n=t},i){return t&&e?n=>(t[n]+e[n])/2:n?t=>n[t]:()=>i}function Iy(t){return NC(t)&&void 0===t.interval?void 0:"tabular-nums"}const Qy=Math.PI/180;function uy(t,{marker:e,markerStart:n=e,markerMid:i=e,markerEnd:s=e}={}){t.markerStart=Fy(n),t.markerMid=Fy(i),t.markerEnd=Fy(s)}function Fy(t){if(null==t||!1===t)return null;if(!0===t)return Uy;if("function"==typeof t)return t;switch(`${t}`.toLowerCase()){case"none":return null;case"arrow":return hy("auto");case"arrow-reverse":return hy("auto-start-reverse");case"dot":return by;case"circle":case"circle-fill":return Uy;case"circle-stroke":return Cy}throw new Error(`invalid marker: ${t}`)}function hy(t){return(e,n)=>QU("svg:marker",n).attr("viewBox","-5 -5 10 10").attr("markerWidth",6.67).attr("markerHeight",6.67).attr("orient",t).attr("fill","none").attr("stroke",e).attr("stroke-width",1.5).attr("stroke-linecap","round").attr("stroke-linejoin","round").call((t=>t.append("path").attr("d","M-1.5,-3l3,3l-3,3"))).node()}function by(t,e){return QU("svg:marker",e).attr("viewBox","-5 -5 10 10").attr("markerWidth",6.67).attr("markerHeight",6.67).attr("fill",t).attr("stroke","none").call((t=>t.append("circle").attr("r",2.5))).node()}function Uy(t,e){return QU("svg:marker",e).attr("viewBox","-5 -5 10 10").attr("markerWidth",6.67).attr("markerHeight",6.67).attr("fill",t).attr("stroke","white").attr("stroke-width",1.5).call((t=>t.append("circle").attr("r",3))).node()}function Cy(t,e){return QU("svg:marker",e).attr("viewBox","-5 -5 10 10").attr("markerWidth",6.67).attr("markerHeight",6.67).attr("fill","white").attr("stroke",t).attr("stroke-width",1.5).call((t=>t.append("circle").attr("r",3))).node()}let yy=0;function fy(t,e,{stroke:n},i){return py(t,e,n&&(t=>n[t]),i)}function Gy(t,e,{stroke:n},i){return py(t,e,n&&(([t])=>n[t]),i)}function py(t,{markerStart:e,markerMid:n,markerEnd:i,stroke:s},c=(()=>s),a){const l=new Map;function r(t){return function(e){const n=c(e);let i=l.get(t);i||l.set(t,i=new Map);let s=i.get(n);if(!s){const e=this.parentNode.insertBefore(t(n,a),this),c="plot-marker-"+ ++yy;e.setAttribute("id",c),i.set(n,s=`url(#${c})`)}return s}}e&&t.attr("marker-start",r(e)),n&&t.attr("marker-mid",r(n)),i&&t.attr("marker-end",r(i))}function my({inset:t,insetLeft:e,insetRight:n,...i}={}){return[e,n]=xy(t,e,n),{inset:t,insetLeft:e,insetRight:n,...i}}function Ay({inset:t,insetTop:e,insetBottom:n,...i}={}){return[e,n]=xy(t,e,n),{inset:t,insetTop:e,insetBottom:n,...i}}function xy(t,e,n){return void 0===t&&void 0===e&&void 0===n?zb?[1,0]:[.5,.5]:[e,n]}function Ly(t,{interval:e}){return(t={...Sh(t)}).interval=Ah(void 0===t.interval?e:t.interval),t}function Sy(t,e,n,i){const{[t]:s,[`${t}1`]:c,[`${t}2`]:a}=n,{value:l,interval:r}=Ly(s,n);if(null==l||null==r&&!i)return n;const o=fh(s);if(null==r){let e;const i={transform:t=>e||(e=WF(t,l)),label:o};return{...n,[t]:void 0,[`${t}1`]:void 0===c?i:c,[`${t}2`]:void 0===a?i:a}}let g,B;function d(t){return void 0!==B&&t===g?B:B=lh(WF(g=t,l),(t=>r.floor(t)))}return e({...n,[t]:void 0,[`${t}1`]:void 0===c?{transform:d,label:o}:c,[`${t}2`]:void 0===a?{transform:t=>d(t).map((t=>r.offset(t))),label:o}:a})}function Ry(t,e,n){const{[t]:i}=n,{value:s,interval:c}=Ly(i,n);return null==s||null==c?n:e({...n,[t]:{label:fh(i),transform:t=>{const e=lh(WF(t,s),(t=>c.floor(t))),n=e.map((t=>c.offset(t)));return e.map(Nh(e)?(t,e)=>null==t||isNaN(t=+t)||null==(e=n[e])||isNaN(e=+e)?void 0:new Date((t+e)/2):(t,e)=>null==t||null==(e=n[e])?NaN:(+t+ +e)/2)}}})}const Xy={ariaLabel:"rule",fill:null,stroke:"currentColor"};class vy extends ey{constructor(t,e={}){const{x:n,y1:i,y2:s,inset:c=0,insetTop:a=c,insetBottom:l=c}=e;super(t,{x:{value:n,scale:"x",optional:!0},y1:{value:i,scale:"y",optional:!0},y2:{value:s,scale:"y",optional:!0}},cy(e,"x"),Xy),this.insetTop=OF(a),this.insetBottom=OF(l),uy(this,e)}render(t,e,n,i,s){const{x:c,y:a}=e,{x:l,y1:r,y2:o}=n,{width:g,height:B,marginTop:d,marginRight:I,marginLeft:Q,marginBottom:u}=i,{insetTop:F,insetBottom:h}=this;return QU("svg:g",s).call(nU,this,i,s).call(aU,this,{x:l&&c},zb,0).call((e=>e.selectAll().data(t).enter().append("line").call(iU,this).attr("x1",l?t=>l[t]:(Q+g-I)/2).attr("x2",l?t=>l[t]:(Q+g-I)/2).attr("y1",r&&!EC(a)?t=>r[t]+F:d+F).attr("y2",o&&!EC(a)?a.bandwidth?t=>o[t]+a.bandwidth()-h:t=>o[t]-h:B-u-h).call($b,this,n).call(fy,this,n,s))).node()}}class Ny extends ey{constructor(t,e={}){const{x1:n,x2:i,y:s,inset:c=0,insetRight:a=c,insetLeft:l=c}=e;super(t,{y:{value:s,scale:"y",optional:!0},x1:{value:n,scale:"x",optional:!0},x2:{value:i,scale:"x",optional:!0}},cy(e,"y"),Xy),this.insetRight=OF(a),this.insetLeft=OF(l),uy(this,e)}render(t,e,n,i,s){const{x:c,y:a}=e,{y:l,x1:r,x2:o}=n,{width:g,height:B,marginTop:d,marginRight:I,marginLeft:Q,marginBottom:u}=i,{insetLeft:F,insetRight:h}=this;return QU("svg:g",s).call(nU,this,i,s).call(aU,this,{y:l&&a},0,zb).call((e=>e.selectAll().data(t).enter().append("line").call(iU,this).attr("x1",r&&!EC(c)?t=>r[t]+F:Q+F).attr("x2",o&&!EC(c)?c.bandwidth?t=>o[t]+c.bandwidth()-h:t=>o[t]-h:g-I-h).attr("y1",l?t=>l[t]:(d+B-u)/2).attr("y2",l?t=>l[t]:(d+B-u)/2).call($b,this,n).call(fy,this,n,s))).node()}}function Zy(t,e){let{x:n=MF,y:i,y1:s,y2:c,...a}=function(t={}){return Sy("y",Ay,t)}(e);return[s,c]=Vy(i,s,c),new vy(t,{...a,x:n,y1:s,y2:c})}function Ey(t,e){let{y:n=MF,x:i,x1:s,x2:c,...a}=function(t={}){return Sy("x",my,t)}(e);return[s,c]=Vy(i,s,c),new Ny(t,{...a,y:n,x1:s,x2:c})}function Vy(t,e,n){if(null==t){if(void 0===e){if(void 0!==n)return[0,n]}else if(void 0===n)return[0,e]}else{if(void 0===e)return void 0===n?[0,t]:[t,n];if(void 0===n)return[t,e]}return[e,n]}function wy(t,...e){let n=e.length;for(let i=0,s=!0;i<n;++i)"function"!=typeof e[i]&&(s&&(t=t.slice(),s=!1),t.splice(i,2,t[i]+e[i]+t[i+1]),e.splice(i,1),--i,--n);return i=>{let s=t[0];for(let c=0;c<n;++c)s+=e[c](i)+t[c+1];return s}}const Wy={ariaLabel:"text",strokeLinejoin:"round",strokeWidth:3,paintOrder:"stroke"},Hy="­";class Dy extends ey{constructor(t,e={}){const{x:n,y:i,text:s=(Rh(t)&&Xh(t)?MF:JF),frameAnchor:c,textAnchor:a=(/right$/i.test(c)?"end":/left$/i.test(c)?"start":"middle"),lineAnchor:l=(/^top/i.test(c)?"top":/^bottom/i.test(c)?"bottom":"middle"),lineHeight:r=1,lineWidth:o=1/0,textOverflow:g,monospace:B,fontFamily:d=(B?"ui-monospace, monospace":void 0),fontSize:I,fontStyle:Q,fontVariant:u,fontWeight:F,rotate:h}=e,[b,U]=ih(h,0),[C,y]=function(t){return null==t||"number"==typeof t?[void 0,t]:"string"!=typeof t?[t,void 0]:(t=t.trim().toLowerCase(),Ky.has(t)||/^[+-]?\d*\.?\d+(e[+-]?\d+)?(\w*|%)$/.test(t)?[void 0,t]:[t,void 0])}(I);var f;if(super(t,{x:{value:n,scale:"x",optional:!0},y:{value:i,scale:"y",optional:!0},fontSize:{value:C,optional:!0},rotate:{value:(f=b,null==f?null:{transform:t=>WF(t,f,Float64Array),label:fh(f)}),optional:!0},text:{value:s,filter:aF,optional:!0}},e,Wy),this.rotate=U,this.textAnchor=lU(a,"middle"),this.lineAnchor=ch(l,"lineAnchor",["top","middle","bottom"]),this.lineHeight=+r,this.lineWidth=+o,this.textOverflow=Yy(g),this.monospace=!!B,this.fontFamily=KF(d),this.fontSize=y,this.fontStyle=KF(Q),this.fontVariant=KF(u),this.fontWeight=KF(F),this.frameAnchor=Jh(c),!(this.lineWidth>=0))throw new Error(`invalid lineWidth: ${o}`);this.splitLines=$y(this),this.clipLine=qy(this)}render(t,e,n,i,s){const{x:c,y:a}=e,{x:l,y:r,rotate:o,text:g,title:B,fontSize:d}=n,{rotate:I}=this,[Q,u]=dU(this,i);return QU("svg:g",s).call(nU,this,i,s).call(zy,this,g,i).call(aU,this,{x:l&&c,y:r&&a}).call((e=>e.selectAll().data(t).enter().append("text").call(iU,this).call(ky,this,g,B).attr("transform",wy`translate(${l?t=>l[t]:Q},${r?t=>r[t]:u})${o?t=>` rotate(${o[t]})`:I?` rotate(${I})`:""}`).call(cU,"font-size",d&&(t=>d[t])).call($b,this,n))).node()}}function Yy(t){return null==t?null:ch(t,"textOverflow",["clip","ellipsis","clip-start","clip-end","ellipsis-start","ellipsis-middle","ellipsis-end"]).replace(/^(clip|ellipsis)$/,"$1-end")}function ky(t,e,n,i){if(!n)return;const{lineAnchor:s,lineHeight:c,textOverflow:a,splitLines:l,clipLine:r}=e;t.each((function(t){const e=l(kb(n[t])??"").map(r),o=e.length,g="top"===s?.71:"bottom"===s?1-o:(164-100*o)/200;if(o>1){let t=0;for(let n=0;n<o;++n){if(++t,!e[n])continue;const i=this.ownerDocument.createElementNS(Ne.svg,"tspan");i.setAttribute("x",0),n===t-1?i.setAttribute("y",(g+n)*c+"em"):i.setAttribute("dy",t*c+"em"),i.textContent=e[n],this.appendChild(i),t=0}}else g&&this.setAttribute("y",g*c+"em"),this.textContent=e[0];if(a&&!i&&e[0]!==n[t]){const e=this.ownerDocument.createElementNS(Ne.svg,"title");e.textContent=n[t],this.appendChild(e)}}))}function Jy(t,{x:e,y:n,...i}={}){return void 0===i.frameAnchor&&([e,n]=Qh(e,n)),new Dy(t,{...i,x:e,y:n})}function My(t,{x:e=MF,...n}={}){return new Dy(t,function(t={}){return Ry("y",Ay,t)}({...n,x:e}))}function Ty(t,{y:e=MF,...n}={}){return new Dy(t,function(t={}){return Ry("x",my,t)}({...n,y:e}))}function zy(t,e,n){cU(t,"text-anchor",e.textAnchor),cU(t,"font-family",e.fontFamily),cU(t,"font-size",e.fontSize),cU(t,"font-style",e.fontStyle),cU(t,"font-variant",void 0===e.fontVariant?function(t){return t&&(function(t){for(const e of t)if(null!=e)return"number"==typeof e}(t)||Nh(t))?"tabular-nums":void 0}(n):e.fontVariant),cU(t,"font-weight",e.fontWeight)}const Ky=new Set(["inherit","initial","revert","unset","xx-small","x-small","small","medium","large","x-large","xx-large","xxx-large","larger","smaller"]);function Oy(t,e,n){const i=[];let s,c=0;for(const[a,l,r]of function*(t){let e=0,n=0;const i=t.length;for(;n<i;){let i=1;switch(t[n]){case Hy:case"-":++n,yield[e,n,!1],e=n;break;case" ":for(yield[e,n,!1];" "===t[++n];);e=n;break;case"\r":"\n"===t[n+1]&&++i;case"\n":yield[e,n,!0],n+=i,e=n;break;default:++n}}yield[e,n,!0]}(t))void 0===s&&(s=a),c>s&&n(t,s,l)>e&&(i.push(t.slice(s,c)+(t[c-1]===Hy?"-":"")),s=a),r?(i.push(t.slice(s,l)),s=void 0):c=l;return i}const _y={a:56,b:63,c:57,d:63,e:58,f:37,g:62,h:60,i:26,j:26,k:55,l:26,m:88,n:60,o:60,p:62,q:62,r:39,s:54,t:38,u:60,v:55,w:79,x:54,y:55,z:55,A:69,B:67,C:73,D:74,E:61,F:58,G:76,H:75,I:28,J:55,K:67,L:58,M:89,N:75,O:78,P:65,Q:78,R:67,S:65,T:65,U:75,V:69,W:98,X:69,Y:67,Z:67,0:64,1:48,2:62,3:64,4:66,5:63,6:65,7:58,8:65,9:65," ":29,"!":32,'"':49,"'":31,"(":39,")":39,",":31,"-":48,".":31,"/":32,":":31,";":31,"?":52,"‘":31,"’":31,"“":47,"”":47,"…":82};function Py(t,e=0,n=t.length){let i=0;for(let s=e;s<n;s=lf(t,s))i+=_y[t[s]]??(of(t,s)?120:_y.e);return i}function jy(t,e=0,n=t.length){let i=0;for(let s=e;s<n;s=lf(t,s))i+=of(t,s)?200:100;return i}function $y({monospace:t,lineWidth:e,textOverflow:n}){if(null!=n||e==1/0)return t=>t.split(/\r\n?|\n/g);const i=t?jy:Py,s=100*e;return t=>Oy(t,s,i)}function qy({monospace:t,lineWidth:e,textOverflow:n}){if(null==n||e==1/0)return t=>t;const i=t?jy:Py,s=100*e;switch(n){case"clip-start":return t=>sf(t,s,i,"");case"clip-end":return t=>nf(t,s,i,"");case"ellipsis-start":return t=>sf(t,s,i,tf);case"ellipsis-middle":return t=>function(t,e,n,i){t=t.trim();const s=n(t);if(s<=e)return t;const c=n(i)/2,[a,l]=ef(t,e/2,n,c),[r]=ef(t,s-e/2-l+c,n,-c);return r<0?i:t.slice(0,a).trimEnd()+i+t.slice(lf(t,r)).trimStart()}(t,s,i,tf);case"ellipsis-end":return t=>nf(t,s,i,tf)}}const tf="…";function ef(t,e,n,i){const s=[];let c=0;for(let a=0,l=0,r=t.length;a<r;a=l){l=lf(t,a);const r=n(t,a,l);if(c+r>e){for(c+=i;c>e&&a>0;)l=a,a=s.pop(),c-=n(t,a,l);return[a,e-c]}c+=r,s.push(a)}return[-1,0]}function nf(t,e,n,i){t=t.trim();const s=n(i),[c]=ef(t,e,n,s);return c<0?t:t.slice(0,c).trimEnd()+i}function sf(t,e,n,i){const s=n(t=t.trim());if(s<=e)return t;const c=n(i),[a]=ef(t,s-e+c,n,-c);return a<0?i:i+t.slice(lf(t,a)).trimStart()}const cf=/[\p{Combining_Mark}\p{Emoji_Modifier}]+/uy,af=/\p{Extended_Pictographic}/uy;function lf(t,e){return e+=function(t,e){const n=t.charCodeAt(e);if(n>=55296&&n<56320){const n=t.charCodeAt(e+1);return n>=56320&&n<57344}return!1}(t,e)?2:1,function(t,e){return!rf(t,e)&&(cf.lastIndex=e,cf.test(t))}(t,e)&&(e=cf.lastIndex),function(t,e){return 8205===t.charCodeAt(e)}(t,e)?lf(t,e+1):e}function rf(t,e){return t.charCodeAt(e)<128}function of(t,e){return!rf(t,e)&&(af.lastIndex=e,af.test(t))}const gf={ariaLabel:"vector",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinejoin:"round",strokeLinecap:"round"},Bf=3.5,df=5*Bf,If={draw(t,e,n){const i=e*n/df;t.moveTo(0,0),t.lineTo(0,-e),t.moveTo(-i,i-e),t.lineTo(0,-e),t.lineTo(i,i-e)}},Qf={draw(t,e,n){t.moveTo(-n,0),t.lineTo(0,-e),t.lineTo(n,0)}},uf=new Map([["arrow",If],["spike",Qf]]);class Ff extends ey{constructor(t,e={}){const{x:n,y:i,r:s=Bf,length:c,rotate:a,shape:l=If,anchor:r="middle",frameAnchor:o}=e,[g,B]=ih(c,12),[d,I]=ih(a,0);super(t,{x:{value:n,scale:"x",optional:!0},y:{value:i,scale:"y",optional:!0},length:{value:g,scale:"length",optional:!0},rotate:{value:d,optional:!0}},e,gf),this.r=+s,this.length=B,this.rotate=I,this.shape=function(t){if(function(t){return t&&"function"==typeof t.draw}(t))return t;const e=uf.get(`${t}`.toLowerCase());if(e)return e;throw new Error(`invalid shape: ${t}`)}(l),this.anchor=ch(r,"anchor",["start","middle","end"]),this.frameAnchor=Jh(o)}render(t,e,n,i,s){const{x:c,y:a}=e,{x:l,y:r,length:o,rotate:g}=n,{length:B,rotate:d,anchor:I,shape:Q,r:u}=this,[F,h]=dU(this,i);return QU("svg:g",s).call(nU,this,i,s).call(aU,this,{x:l&&c,y:r&&a}).call((e=>e.selectAll().data(t).enter().append("path").call(iU,this).attr("transform",wy`translate(${l?t=>l[t]:F},${r?t=>r[t]:h})${g?t=>` rotate(${g[t]})`:d?` rotate(${d})`:""}${"start"===I?"":"end"===I?o?t=>` translate(0,${o[t]})`:` translate(0,${B})`:o?t=>` translate(0,${o[t]/2})`:` translate(0,${B/2})`}`).attr("d",o?t=>{const e=na();return Q.draw(e,o[t],u),e}:(()=>{const t=na();return Q.draw(t,B,u),t})()).call($b,this,n))).node()}}function hf(t,e={}){const{x:n=MF,...i}=e;return new Ff(t,{...i,x:n})}function bf(t,e={}){const{y:n=MF,...i}=e;return new Ff(t,{...i,y:n})}function Uf(t,e){return arguments.length<2&&!Rh(t)&&(e=t,t=null),void 0===e&&(e={}),[t,e]}function Cf({anchor:t}={},e){return void 0===t?e[0]:ch(t,"anchor",e)}function yf(t){return Cf(t,["left","right"])}function ff(t){return Cf(t,["right","left"])}function Gf(t){return Cf(t,["bottom","top"])}function pf(t){return Cf(t,["top","bottom"])}function mf(){const[t,e]=Uf(...arguments);return Sf("y",yf(e),t,e)}function Af(){const[t,e]=Uf(...arguments);return Sf("fy",ff(e),t,e)}function xf(){const[t,e]=Uf(...arguments);return Rf("x",Gf(e),t,e)}function Lf(){const[t,e]=Uf(...arguments);return Rf("fx",pf(e),t,e)}function Sf(t,e,n,{color:i="currentColor",opacity:s=1,stroke:c=i,strokeOpacity:a=s,strokeWidth:l=1,fill:r=i,fillOpacity:o=s,textAnchor:g,textStroke:B,textStrokeOpacity:d,textStrokeWidth:I,tickSize:Q=("y"===t?6:0),tickPadding:u,tickRotate:F,x:h,margin:b,marginTop:U=(void 0===b?20:b),marginRight:C=(void 0===b?"right"===e?40:0:b),marginBottom:y=(void 0===b?20:b),marginLeft:f=(void 0===b?"left"===e?40:0:b),label:G,labelAnchor:p,labelArrow:m,labelOffset:A,...x}){return Q=OF(Q),u=OF(u),F=OF(F),void 0!==p&&(p=ch(p,"labelAnchor",["center","top","bottom"])),m=_f(m),ny(Q&&!Dh(c)?function(t,e,n,{strokeWidth:i=1,strokeLinecap:s=null,strokeLinejoin:c=null,facetAnchor:a=e+("y"===t?"-empty":""),frameAnchor:l=e,tickSize:r,inset:o=0,insetLeft:g=o,insetRight:B=o,dx:d=0,y:I=("y"===t?void 0:null),...Q}){return Hf(bf,t,e,`${t}-axis tick`,n,{strokeWidth:i,strokeLinecap:s,strokeLinejoin:c,facetAnchor:a,frameAnchor:l,y:I,...Q,dx:"left"===e?+d-zb+ +g:+d+zb-B,anchor:"start",length:r,shape:"left"===e?Tf:zf})}(t,e,n,{stroke:c,strokeOpacity:a,strokeWidth:l,tickSize:Q,tickPadding:u,tickRotate:F,x:h,...x}):null,Dh(r)?null:function(t,e,n,{facetAnchor:i=e+("y"===t?"-empty":""),frameAnchor:s=e,tickSize:c,tickRotate:a=0,tickPadding:l=Math.max(3,9-c)+(Math.abs(a)>60?4*Math.cos(a*Qy):0),text:r,textAnchor:o=(Math.abs(a)>60?"middle":"left"===e?"end":"start"),lineAnchor:g=(a>60?"top":a<-60?"bottom":"middle"),fontVariant:B,inset:d=0,insetLeft:I=d,insetRight:Q=d,dx:u=0,y:F=("y"===t?void 0:null),...h}){return Hf(Ty,t,e,`${t}-axis tick label`,n,{facetAnchor:i,frameAnchor:s,text:r,textAnchor:o,lineAnchor:g,fontVariant:B,rotate:a,y:F,...h,dx:"left"===e?+u-c-l+ +I:+u+ +c+ +l-Q},(function(t,n,i,s,c){void 0===B&&(this.fontVariant=Kf(t)),void 0===r&&(c.text=Df(t,n,i,s,e))}))}(t,e,n,{fill:r,fillOpacity:o,stroke:B,strokeOpacity:d,strokeWidth:I,textAnchor:g,tickSize:Q,tickPadding:u,tickRotate:F,x:h,marginTop:U,marginRight:C,marginBottom:y,marginLeft:f,...x}),Dh(r)||null===G?null:Jy([],Wf({fill:r,fillOpacity:o,...x},(function(n,i,s,c,a){const l=c[t],{marginTop:r,marginRight:o,marginBottom:g,marginLeft:B}="y"===t&&a.inset||a,d=p??(l.bandwidth?"center":"top"),I=A??("right"===e?o:B)-3;return"center"===d?(this.textAnchor=void 0,this.lineAnchor="right"===e?"bottom":"top",this.frameAnchor=e,this.rotate=-90):(this.textAnchor="right"===e?"end":"start",this.lineAnchor=d,this.frameAnchor=`${d}-${e}`,this.rotate=0),this.dy="top"===d?3-r:"bottom"===d?g-3:0,this.dx="right"===e?I:-I,this.ariaLabel=`${t}-axis label`,{facets:[[0]],channels:{text:{value:[Of(t,l,{anchor:e,label:G,labelAnchor:d,labelArrow:m})]}}}}))))}function Rf(t,e,n,{color:i="currentColor",opacity:s=1,stroke:c=i,strokeOpacity:a=s,strokeWidth:l=1,fill:r=i,fillOpacity:o=s,textAnchor:g,textStroke:B,textStrokeOpacity:d,textStrokeWidth:I,tickSize:Q=("x"===t?6:0),tickPadding:u,tickRotate:F,y:h,margin:b,marginTop:U=(void 0===b?"top"===e?30:0:b),marginRight:C=(void 0===b?20:b),marginBottom:y=(void 0===b?"bottom"===e?30:0:b),marginLeft:f=(void 0===b?20:b),label:G,labelAnchor:p,labelArrow:m,labelOffset:A,...x}){return Q=OF(Q),u=OF(u),F=OF(F),void 0!==p&&(p=ch(p,"labelAnchor",["center","left","right"])),m=_f(m),ny(Q&&!Dh(c)?function(t,e,n,{strokeWidth:i=1,strokeLinecap:s=null,strokeLinejoin:c=null,facetAnchor:a=e+("x"===t?"-empty":""),frameAnchor:l=e,tickSize:r,inset:o=0,insetTop:g=o,insetBottom:B=o,dy:d=0,x:I=("x"===t?void 0:null),...Q}){return Hf(hf,t,e,`${t}-axis tick`,n,{strokeWidth:i,strokeLinejoin:c,strokeLinecap:s,facetAnchor:a,frameAnchor:l,x:I,...Q,dy:"bottom"===e?+d-zb-B:+d+zb+ +g,anchor:"start",length:r,shape:"bottom"===e?Jf:Mf})}(t,e,n,{stroke:c,strokeOpacity:a,strokeWidth:l,tickSize:Q,tickPadding:u,tickRotate:F,y:h,...x}):null,Dh(r)?null:function(t,e,n,{facetAnchor:i=e+("x"===t?"-empty":""),frameAnchor:s=e,tickSize:c,tickRotate:a=0,tickPadding:l=Math.max(3,9-c)+(Math.abs(a)>=10?4*Math.cos(a*Qy):0),text:r,textAnchor:o=(Math.abs(a)>=10?a<0^"bottom"===e?"start":"end":"middle"),lineAnchor:g=(Math.abs(a)>=10?"middle":"bottom"===e?"top":"bottom"),fontVariant:B,inset:d=0,insetTop:I=d,insetBottom:Q=d,dy:u=0,x:F=("x"===t?void 0:null),...h}){return Hf(My,t,e,`${t}-axis tick label`,n,{facetAnchor:i,frameAnchor:s,text:void 0===r?null:r,textAnchor:o,lineAnchor:g,fontVariant:B,rotate:a,x:F,...h,dy:"bottom"===e?+u+ +c+ +l-Q:+u-c-l+ +I},(function(t,n,i,s,c){void 0===B&&(this.fontVariant=Kf(t)),void 0===r&&(c.text=Df(t,n,i,s,e))}))}(t,e,n,{fill:r,fillOpacity:o,stroke:B,strokeOpacity:d,strokeWidth:I,textAnchor:g,tickSize:Q,tickPadding:u,tickRotate:F,y:h,marginTop:U,marginRight:C,marginBottom:y,marginLeft:f,...x}),Dh(r)||null===G?null:Jy([],Wf({fill:r,fillOpacity:o,...x},(function(n,i,s,c,a){const l=c[t],{marginTop:r,marginRight:o,marginBottom:g,marginLeft:B}="x"===t&&a.inset||a,d=p??(l.bandwidth?"center":"right"),I=A??("top"===e?r:g)-3;return"center"===d?(this.frameAnchor=e,this.textAnchor=void 0):(this.frameAnchor=`${e}-${d}`,this.textAnchor="right"===d?"end":"start"),this.lineAnchor=e,this.dy="top"===e?-I:I,this.dx="right"===d?o-3:"left"===d?3-B:0,this.ariaLabel=`${t}-axis label`,{facets:[[0]],channels:{text:{value:[Of(t,l,{anchor:e,label:G,labelAnchor:d,labelArrow:m})]}}}}))))}function Xf(){const[t,e]=Uf(...arguments);return Ef("y",yf(e),t,e)}function vf(){const[t,e]=Uf(...arguments);return Ef("fy",ff(e),t,e)}function Nf(){const[t,e]=Uf(...arguments);return Vf("x",Gf(e),t,e)}function Zf(){const[t,e]=Uf(...arguments);return Vf("fx",pf(e),t,e)}function Ef(t,e,n,{y:i=("y"===t?void 0:null),x:s=null,x1:c=("left"===e?s:null),x2:a=("right"===e?s:null),...l}){return Hf(Ey,t,e,`${t}-grid`,n,{y:i,x1:c,x2:a,...wf(l)})}function Vf(t,e,n,{x:i=("x"===t?void 0:null),y:s=null,y1:c=("top"===e?s:null),y2:a=("bottom"===e?s:null),...l}){return Hf(Zy,t,e,`${t}-grid`,n,{x:i,y1:c,y2:a,...wf(l)})}function wf({color:t="currentColor",opacity:e=.1,stroke:n=t,strokeOpacity:i=e,strokeWidth:s=1,...c}){return{stroke:n,strokeOpacity:i,strokeWidth:s,...c}}function Wf({fill:t,fillOpacity:e,fontFamily:n,fontSize:i,fontStyle:s,fontVariant:c,fontWeight:a,monospace:l,pointerEvents:r,shapeRendering:o,clip:g=!1},B){return[,t]=nh(t),[,e]=ih(e),{facet:"super",x:null,y:null,fill:t,fillOpacity:e,fontFamily:n,fontSize:i,fontStyle:s,fontVariant:c,fontWeight:a,monospace:l,pointerEvents:r,shapeRendering:o,clip:g,initializer:B}}function Hf(t,e,n,i,s,c,a){let l;const r=ab(c).initializer,o=t(s,ab({...c,initializer:function(t,n,i,s,r,o){const g=null==t&&("fx"===e||"fy"===e),{[e]:B}=s;if(!B)throw new Error(`missing scale: ${e}`);const d=B.domain();let{interval:I,ticks:Q,tickFormat:u,tickSpacing:F=("x"===e?80:35)}=c;if("string"==typeof Q&&Pf(B)&&(I=Q,Q=void 0),void 0===Q&&(Q=xh(I,B.type)??function(t,e){const[n,i]=pt(t.range());return(i-n)/e}(B,F)),null==t){if(Rh(Q))t=ah(Q);else if(Lh(Q))t=kf(Q,...pt(d));else if(B.interval){let e=B.interval;if(B.ticks){const[n,i]=pt(d);e=XF(e,(i-n)/e[mF]/Q)??e,t=kf(e,n,i)}else{e=XF(e,(t=d).length/Q)??e,e!==B.interval&&(t=kf(e,...pt(t)))}if(e===B.interval){const e=Math.round(t.length/Q);e>1&&(t=t.filter(((t,n)=>n%e==0)))}}else t=B.ticks?B.ticks(Q):d;if(!B.ticks&&t.length&&t!==d){const n=new xt(d);t=t.filter((t=>n.has(t))),t.length||Tb(`Warning: the ${e}-axis ticks appear to not align with the scale domain, resulting in no ticks. Try different ticks?`)}"y"===e||"x"===e?n=[Fh(t)]:l[e]={scale:e,value:MF}}a?.call(this,B,t,Q,u,l);const h=Object.fromEntries(Object.entries(l).map((([e,n])=>[e,{...n,value:WF(t,n.value)}])));return g&&(n=o.filterFacets(t,h)),{data:t,facets:n,channels:h}}},r));return null==s?(l=o.channels,o.channels={}):l={},o.ariaLabel=i,void 0===o.clip&&(o.clip=!1),o}function Df(t,e,n,i,s){return{value:Yf(t,e,n,i,s)}}function Yf(t,e,n,i,s){return"function"==typeof i?i:void 0===i&&e&&Nh(e)?NF(e,s)??kb:t.tickFormat?t.tickFormat("number"==typeof n?n:null,i):void 0===i?kb:"string"==typeof i?(Nh(t.domain())?aB:Ia)(i):jF(i)}function kf(t,e,n){return t.range(e,t.offset(t.floor(n)))}const Jf={draw(t,e){t.moveTo(0,0),t.lineTo(0,e)}},Mf={draw(t,e){t.moveTo(0,0),t.lineTo(0,-e)}},Tf={draw(t,e){t.moveTo(0,0),t.lineTo(-e,0)}},zf={draw(t,e){t.moveTo(0,0),t.lineTo(e,0)}};function Kf(t){return t.bandwidth&&!t.interval?void 0:"tabular-nums"}function Of(t,e,{anchor:n,label:i=e.label,labelAnchor:s,labelArrow:c}={}){if(!(null==i||i.inferred&&Pf(e)&&/^(date|time|year)$/i.test(i))){if(i=String(i),"auto"===c&&(c=(!e.bandwidth||e.interval)&&!/[↑↓→←]/.test(i)),!c)return i;if(!0===c){const n=function(t){return Math.sign(Mh(t.domain()))*Math.sign(Mh(t.range()))}(e);n&&(c=/x$/.test(t)||"center"===s?/x$/.test(t)===n<0?"left":"right":n<0?"up":"down")}switch(c){case"left":return`← ${i}`;case"right":return`${i} →`;case"up":return"right"===n?`${i} ↑`:`↑ ${i}`;case"down":return"right"===n?`${i} ↓`:`↓ ${i}`}return i}}function _f(t="auto"){return!Dh(t)&&("boolean"==typeof t?t:ch(t,"labelArrow",["auto","up","right","down","left"]))}function Pf(t){return Nh(t.domain())}function jf(t,e){if(null==e)return e;const n=t(e);if(!n)throw new Error(`scale not found: ${e}`);return n}function $f(t,e={},n){let{columns:i,tickFormat:s,fontVariant:c=Iy(t),swatchSize:a=15,swatchWidth:l=a,swatchHeight:r=a,marginLeft:o=0,className:g,style:B,width:d}=e;const I=IU(e);g=gU(g),s=Yf(t.scale,t.domain,void 0,s);const Q=QU("div",I).attr("class",`${g}-swatches ${g}-swatches-${null!=i?"columns":"wrap"}`);let u;return null!=i?(u=`.${g}-swatches-columns .${g}-swatch {\n display: flex;\n align-items: center;\n break-inside: avoid;\n padding-bottom: 1px;\n}\n.${g}-swatches-columns .${g}-swatch::before {\n flex-shrink: 0;\n}\n.${g}-swatches-columns .${g}-swatch-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}`,Q.style("columns",i).selectAll().data(t.domain).enter().append("div").attr("class",`${g}-swatch`).call(n,t,l,r).call((t=>t.append("div").attr("class",`${g}-swatch-label`).attr("title",s).text(s)))):(u=`.${g}-swatches-wrap {\n display: flex;\n align-items: center;\n min-height: 33px;\n flex-wrap: wrap;\n}\n.${g}-swatches-wrap .${g}-swatch {\n display: inline-flex;\n align-items: center;\n margin-right: 1em;\n}`,Q.selectAll().data(t.domain).enter().append("span").attr("class",`${g}-swatch`).call(n,t,l,r).append((function(){return this.ownerDocument.createTextNode(s.apply(this,arguments))}))),Q.call((t=>t.insert("style","*").text(`.${g}-swatches {\n font-family: system-ui, sans-serif;\n font-size: 10px;\n margin-bottom: 0.5em;\n}\n.${g}-swatch > svg {\n margin-right: 0.5em;\n overflow: visible;\n}\n${u}`))).style("margin-left",o?+o+"px":null).style("width",void 0===d?null:+d+"px").style("font-variant",lU(c,"normal")).call(BU,B).node()}const qf=new Map([["symbol",function(t,{fill:e=(void 0!==t.hint?.fill?t.hint.fill:"none"),fillOpacity:n=1,stroke:i=(void 0!==t.hint?.stroke?t.hint.stroke:Dh(e)?"currentColor":"none"),strokeOpacity:s=1,strokeWidth:c=1.5,r:a=4.5,...l}={},r){const[o,g]=nh(e),[B,d]=nh(i),I=jf(r,o),Q=jf(r,B),u=a*a*Math.PI;return n=ih(n)[1],s=ih(s)[1],c=ih(c)[1],$f(t,l,((e,i,a,l)=>e.append("svg").attr("viewBox","-8 -8 16 16").attr("width",a).attr("height",l).attr("fill","color"===o?t=>I.scale(t):g).attr("fill-opacity",n).attr("stroke","color"===B?t=>Q.scale(t):d).attr("stroke-opacity",s).attr("stroke-width",c).append("path").attr("d",(e=>{const n=na();return t.scale(e).draw(n,u),n}))))}],["color",eG],["opacity",function({type:t,interpolate:e,...n},{legend:i=!0,color:s=Ai(0,0,0),...c}){if(!e)throw new Error(`${t} opacity scales are not supported`);!0===i&&(i="ramp");if("ramp"!==`${i}`.toLowerCase())throw new Error(`${i} opacity legends are not supported`);return eG({type:t,...n,interpolate:nG(s)},{legend:i,...c})}]]);function tG({className:t,...e},{label:n,ticks:i,tickFormat:s}={},c){return function(t={},...e){let n=t;for(const i of e)for(const e in i)if(void 0===n[e]){const s=i[e];n===t?n={...n,[e]:s}:n[e]=s}return n}(c,{className:t,...e},{label:n,ticks:i,tickFormat:s})}function eG(t,{legend:e=!0,...n}){if(!0===e&&(e="ordinal"===t.type?"swatches":"ramp"),void 0!==t.domain)switch(`${e}`.toLowerCase()){case"swatches":return function(t,{opacity:e,...n}={}){if(!NC(t)&&!ZC(t))throw new Error(`swatches legend requires ordinal or threshold color scale (not ${t.type})`);return $f(t,n,((t,n,i,s)=>t.append("svg").attr("width",i).attr("height",s).attr("fill",n.scale).attr("fill-opacity",ih(e)[1]).append("rect").attr("width","100%").attr("height","100%")))}(t,n);case"ramp":return function(t,e){let{label:n=t.label,tickSize:i=6,width:s=240,height:c=44+i,marginTop:a=18,marginRight:l=0,marginBottom:r=16+i,marginLeft:o=0,style:g,ticks:B=(s-o-l)/64,tickFormat:d,fontVariant:I=Iy(t),round:Q=!0,opacity:u,className:F}=e;const h=IU(e);F=gU(F),u=ih(u)[1],null===d&&(d=()=>null);const b=QU("svg",h).attr("class",`${F}-ramp`).attr("font-family","system-ui, sans-serif").attr("font-size",10).attr("width",s).attr("height",c).attr("viewBox",`0 0 ${s} ${c}`).call((t=>t.append("style").text(`.${F}-ramp {\n display: block;\n background: white;\n height: auto;\n height: intrinsic;\n max-width: 100%;\n overflow: visible;\n}\n.${F}-ramp text {\n white-space: pre;\n}`))).call(BU,g);let U,C=t=>t.selectAll(".tick line").attr("y1",a+r-c);const y=Q?(t,e)=>t.rangeRound(e):(t,e)=>t.range(e),{type:f,domain:G,range:p,interpolate:m,scale:A,pivot:x}=t;if(m){const t=void 0===p?m:Ms(1===m.length?nC(m):m,p);U=y(A.copy(),Ts(As(o,s-l),Math.min(G.length+(void 0!==x),void 0===p?1/0:p.length)));const e=256,n=h.document.createElement("canvas");n.width=e,n.height=1;const i=n.getContext("2d");for(let n=0,s=e-1;n<e;++n)i.fillStyle=t(n/s),i.fillRect(n,0,1,1);b.append("image").attr("opacity",u).attr("x",o).attr("y",a).attr("width",s-o-l).attr("height",c-a-r).attr("preserveAspectRatio","none").attr("xlink:href",n.toDataURL())}else if("threshold"===f){const t=G,e=void 0===d?t=>t:"string"==typeof d?Ia(d):d;U=y(Jo().domain([-1,p.length-1]),[o,s-l]),b.append("g").attr("fill-opacity",u).selectAll().data(p).enter().append("rect").attr("x",((t,e)=>U(e-1))).attr("y",a).attr("width",((t,e)=>U(e)-U(e-1))).attr("height",c-a-r).attr("fill",(t=>t)),B=lh(t,((t,e)=>e)),d=n=>e(t[n],n)}else U=y(So().domain(G),[o,s-l]),b.append("g").attr("fill-opacity",u).selectAll().data(G).enter().append("rect").attr("x",U).attr("y",a).attr("width",Math.max(0,U.bandwidth()-1)).attr("height",c-a-r).attr("fill",A),C=()=>{};return b.append("g").attr("transform",`translate(0,${c-r})`).call(Ae(U).ticks(Array.isArray(B)?null:B,"string"==typeof d?d:void 0).tickFormat("function"==typeof d?d:void 0).tickSize(i).tickValues(Array.isArray(B)?B:null)).attr("font-size",null).attr("font-family",null).attr("font-variant",lU(I,"normal")).call(C).call((t=>t.select(".domain").remove())),void 0!==n&&b.append("text").attr("x",o).attr("y",a-6).attr("fill","currentColor").attr("font-weight","bold").text(n),b.node()}(t,n);default:throw new Error(`unknown legend type: ${e}`)}}function nG(t){const{r:e,g:n,b:i}=Ai(t)||Ai(0,0,0);return t=>`rgba(${e},${n},${i},${t})`}const iG={ariaLabel:"frame",fill:"none",stroke:"currentColor",clip:!1},sG={ariaLabel:"frame",fill:null,stroke:"currentColor",strokeLinecap:"square",clip:!1};class cG extends ey{constructor(t={}){const{anchor:e=null,inset:n=0,insetTop:i=n,insetRight:s=n,insetBottom:c=n,insetLeft:a=n,rx:l,ry:r}=t;super(YF,void 0,t,null==e?iG:sG),this.anchor=sh(e,"anchor",["top","right","bottom","left"]),this.insetTop=OF(i),this.insetRight=OF(s),this.insetBottom=OF(c),this.insetLeft=OF(a),this.rx=OF(l),this.ry=OF(r)}render(t,e,n,i,s){const{marginTop:c,marginRight:a,marginBottom:l,marginLeft:r,width:o,height:g}=i,{anchor:B,insetTop:d,insetRight:I,insetBottom:Q,insetLeft:u,rx:F,ry:h}=this,b=r+u,U=o-a-I,C=c+d,y=g-l-Q;return QU(B?"svg:line":"svg:rect",s).datum(0).call(nU,this,i,s).call(iU,this).call($b,this,n).call(aU,this,{}).call("left"===B?t=>t.attr("x1",b).attr("x2",b).attr("y1",C).attr("y2",y):"right"===B?t=>t.attr("x1",U).attr("x2",U).attr("y1",C).attr("y2",y):"top"===B?t=>t.attr("x1",b).attr("x2",U).attr("y1",C).attr("y2",C):"bottom"===B?t=>t.attr("x1",b).attr("x2",U).attr("y1",y).attr("y2",y):t=>t.attr("x",b).attr("y",C).attr("width",U-b).attr("height",y-C).attr("rx",F).attr("ry",h)).node()}}const aG={ariaLabel:"tip",fill:"white",stroke:"currentColor"},lG=new Set(["geometry","href","src","ariaLabel","scales"]);class rG extends ey{constructor(t,e={}){e.tip&&(e={...e,tip:!1}),void 0===e.title&&Rh(t)&&Xh(t)&&(e={...e,title:MF});const{x:n,y:i,x1:s,x2:c,y1:a,y2:l,anchor:r,monospace:o,fontFamily:g=(o?"ui-monospace, monospace":void 0),fontSize:B,fontStyle:d,fontVariant:I,fontWeight:Q,lineHeight:u=1,lineWidth:F=20,frameAnchor:h,format:b,textAnchor:U="start",textOverflow:C,textPadding:y=8,title:f,pointerSize:G=12,pathFilter:p="drop-shadow(0 3px 4px rgba(0,0,0,0.2))"}=e;super(t,{x:{value:null!=s&&null!=c?null:n,scale:"x",optional:!0},y:{value:null!=a&&null!=l?null:i,scale:"y",optional:!0},x1:{value:s,scale:"x",optional:null==c},y1:{value:a,scale:"y",optional:null==l},x2:{value:c,scale:"x",optional:null==s},y2:{value:l,scale:"y",optional:null==a},title:{value:f,optional:!0}},e,aG),this.anchor=kh(r,"anchor"),this.previousAnchor=this.anchor??"top-left",this.frameAnchor=Jh(h),this.textAnchor=lU(U,"middle"),this.textPadding=+y,this.pointerSize=+G,this.pathFilter=KF(p),this.lineHeight=+u,this.lineWidth=+F,this.textOverflow=Yy(C),this.monospace=!!o,this.fontFamily=KF(g),this.fontSize=OF(B),this.fontStyle=KF(d),this.fontVariant=KF(I),this.fontWeight=KF(Q);for(const t in aG)t in this.channels&&(this[t]=aG[t]);this.splitLines=$y(this),this.clipLine=qy(this),this.format={...b}}render(t,e,n,i,s){const c=this,{x:a,y:l,fx:r,fy:o}=e,{ownerSVGElement:g,document:B}=s,{anchor:d,monospace:I,lineHeight:Q,lineWidth:u}=this,{textPadding:F,pointerSize:h,pathFilter:b}=this,{marginTop:U,marginLeft:C}=i,{x1:y,y1:f,x2:G,y2:p,x:m=y??G,y:A=f??p}=n,x=r?r(t.fx)-C:0,L=o?o(t.fy)-U:0,[S,R]=dU(this,i),X=By(n,S),v=dy(n,R),N=I?jy:Py,Z=N(tf);let E,V;"title"in n?(E=n.channels,V=dG):(E=gG.call(this,n,e),V=IG);const w=QU("svg:g",s).call(nU,this,i,s).call(zy,this).call(aU,this,{x:m&&a,y:A&&l}).call((i=>i.selectAll().data(t).enter().append("g").attr("transform",(t=>`translate(${Math.round(X(t))},${Math.round(v(t))})`)).call(iU,this).call((t=>t.append("path").attr("filter",b))).call((i=>i.append("text").each((function(i){const s=Tn(this);this.setAttribute("fill","currentColor"),this.setAttribute("fill-opacity",1),this.setAttribute("stroke","none");const a=V.call(c,i,t,E,e,n);if("string"==typeof a)for(const t of c.splitLines(a))W(s,{value:c.clipLine(t)});else{const t=new Set;for(const e of a){const{label:n=""}=e;n&&t.has(n)||(t.add(n),W(s,e))}}}))))));function W(t,{label:e,value:n,color:i,opacity:s}){e??="",n??="";const c=null!=i||null!=s;let a,l=100*u;const[r]=ef(e,l,N,Z);if(r>=0)e=e.slice(0,r).trimEnd()+tf,a=n.trim(),n="";else{(e||!n&&!c)&&(n=" "+n);const[t]=ef(n,l-N(e),N,Z);t>=0&&(a=(n=n.slice(0,t).trimEnd()+tf).trim())}const o=t.append("tspan").attr("x",0).attr("dy",`${Q}em`).text("​");e&&o.append("tspan").attr("font-weight","bold").text(e),n&&o.append((()=>B.createTextNode(n))),c&&o.append("tspan").text(" ■").attr("fill",i).attr("fill-opacity",s).style("user-select","none"),a&&o.append("title").text(a)}function H(){const{width:t,height:e}=i.facet??i;w.selectChildren().each((function(n){let{x:i,width:s,height:a}=this.getBBox();s=Math.round(s),a=Math.round(a);let l=d;if(void 0===l){l=c.previousAnchor;const i=X(n)+x,r=v(n)+L,o=i+s+2*F<t,g=i-s-2*F>0,B=r+a+h+2*F+7<e,d=r-a-h-2*F>0,I=(/-left$/.test(l)?o||!g:o&&!g)?"left":"right",Q=(/^top-/.test(l)?B||!d:B&&!d)?"top":"bottom";l=c.previousAnchor=`${Q}-${I}`}const r=this.firstChild,o=this.lastChild;if(r.setAttribute("d",function(t,e,n,i,s){const c=i+2*n,a=s+2*n;switch(t){case"middle":return`M${-c/2},${-a/2}h${c}v${a}h${-c}z`;case"top-left":return`M0,0l${e},${e}h${c-e}v${a}h${-c}z`;case"top":return`M0,0l${e/2},${e/2}h${(c-e)/2}v${a}h${-c}v${-a}h${(c-e)/2}z`;case"top-right":return`M0,0l${-e},${e}h${e-c}v${a}h${c}z`;case"right":return`M0,0l${-e/2},${-e/2}v${e/2-a/2}h${-c}v${a}h${c}v${e/2-a/2}z`;case"bottom-left":return`M0,0l${e},${-e}h${c-e}v${-a}h${-c}z`;case"bottom":return`M0,0l${e/2},${-e/2}h${(c-e)/2}v${-a}h${-c}v${a}h${(c-e)/2}z`;case"bottom-right":return`M0,0l${-e},${-e}h${e-c}v${-a}h${c}z`;case"left":return`M0,0l${e/2},${-e/2}v${e/2-a/2}h${c}v${a}h${-c}v${e/2-a/2}z`}}(l,h,F,s,a)),i)for(const t of o.childNodes)t.setAttribute("x",-i);o.setAttribute("y",+function(t,e,n){return/^top(?:-|$)/.test(t)?.94-n:-.29-e*n}(l,o.childNodes.length,Q).toFixed(6)+"em"),o.setAttribute("transform",`translate(${function(t,e,n,i,s){switch(t){case"middle":return[-i/2,s/2];case"top-left":return[n,e+n];case"top":return[-i/2,e/2+n];case"top-right":return[-i-n,e+n];case"right":return[-e/2-i-n,s/2];case"bottom-left":return[n,-e-n];case"bottom":return[-i/2,-e/2-n];case"bottom-right":return[-i-n,-e-n];case"left":return[n+e/2,s/2]}}(l,h,F,s,a)})`)})),w.attr("visibility",null)}return t.length&&(w.attr("visibility","hidden"),g.isConnected?Promise.resolve().then(H):"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(H)),w.node()}}function oG(t,{x:e,y:n,...i}={}){return void 0===i.frameAnchor&&([e,n]=Qh(e,n)),new rG(t,{...i,x:e,y:n})}function gG({channels:t},e){const n={};let i=this.format;i=BG(i,t,"x"),i=BG(i,t,"y"),this.format=i;for(const e in i){const s=i[e];if(null!==s&&!1!==s)if("fx"===e||"fy"===e)n[e]=!0;else{const i=Hb(t,e);i&&(n[e]=i)}}for(const e in t){if(e in n||e in i||lG.has(e))continue;const s=Hb(t,e);s&&(n[e]=s)}this.facet&&(e.fx&&!("fx"in i)&&(n.fx=!0),e.fy&&!("fy"in i)&&(n.fy=!0));for(const t in n){const i=this.format[t];if("string"==typeof i){const s=n[t]?.value??e[t]?.domain()??[];this.format[t]=(Nh(s)?aB:Ia)(i)}else if(void 0===i||!0===i){const n=e[t];this.format[t]=n?.bandwidth?Yf(n,n.domain()):kb}}return n}function BG(t,e,n){if(!(n in t))return t;const i=`${n}1`,s=`${n}2`;if(!(!(i in t)&&i in e||!(s in t)&&s in e))return t;const c=Object.entries(t),a=t[n];return c.splice(c.findIndex((([t])=>t===n))+1,0,[i,a],[s,a]),Object.fromEntries(c)}function dG(t,e,{title:n}){return kb(n.value[t],t)}function*IG(t,e,n,i,s){for(const c in n){if("fx"===c||"fy"===c){yield{label:FG(i,n,c),value:this.format[c](e[c],t)};continue}if("x1"===c&&"x2"in n)continue;if("y1"===c&&"y2"in n)continue;const a=n[c];if("x2"===c&&"x1"in n)yield{label:uG(i,n,"x"),value:QG(this.format.x2,n.x1,a,t)};else if("y2"===c&&"y1"in n)yield{label:uG(i,n,"y"),value:QG(this.format.y2,n.y1,a,t)};else{const e=a.value[t],l=a.scale;if(!iF(e)&&null==l)continue;yield{label:FG(i,n,c),value:this.format[c](e,t),color:"color"===l?s[c][t]:null,opacity:"opacity"===l?s[c][t]:null}}}}function QG(t,e,n,i){return n.hint?.length?`${t(n.value[i]-e.value[i],i)}`:`${t(e.value[i],i)}–${t(n.value[i],i)}`}function uG(t,e,n){const i=FG(t,e,`${n}1`,n),s=FG(t,e,`${n}2`,n);return i===s?i:`${i}–${s}`}function FG(t,e,n,i=n){const s=e[n],c=t[s?.scale??n];return String(c?.label??s?.label??i)}function hG(t={}){const{facet:e,style:n,title:i,subtitle:s,caption:c,ariaLabel:a,ariaDescription:l}=t,r=gU(t.className),o=void 0===t.marks?[]:UG(t.marks);o.push(...function(t){const e=[];for(const n of t){let t=n.tip;if(t){!0===t?t={}:"string"==typeof t&&(t={pointer:t});let{pointer:i}=t;i=/^x$/i.test(i)?oy:/^y$/i.test(i)?gy:ry,t=i(LG(n,t)),t.title=null;const s=oG(n.data,t);s.facet=n.facet,s.facetAnchor=n.facetAnchor,e.push(s)}}return e}(o));const g=function(t,e){if(null==t)return;const{x:n,y:i}=t;if(null==n&&null==i)return;const s=ah(t.data);if(null==s)throw new Error("missing facet data");const c={};null!=n&&(c.fx=Rb(s,{value:n,scale:"fx"}));null!=i&&(c.fy=Rb(s,{value:i,scale:"fy"}));fG(c,e);const a=kC(s,c);return{channels:c,groups:a,data:t.data}}(e,t),B=new Map;for(const e of o){const n=xG(e,g,t);n&&B.set(e,n)}const d=new Map;g&&mG(d,[g],t),mG(d,B,t);const I=UG(function(t,e,n){let{projection:i,x:s={},y:c={},fx:a={},fy:l={},axis:r,grid:o,facet:g={},facet:{axis:B=r,grid:d}=g,x:{axis:I=r,grid:Q=(null===I?null:o)}=s,y:{axis:u=r,grid:F=(null===u?null:o)}=c,fx:{axis:h=B,grid:b=(null===h?null:d)}=a,fy:{axis:U=B,grid:C=(null===U?null:d)}=l}=n;(i||!Bh(s)&&!NG("x",t))&&(I=Q=null);(i||!Bh(c)&&!NG("y",t))&&(u=F=null);e.has("fx")||(h=b=null);e.has("fy")||(U=C=null);void 0===I&&(I=!vG(t,"x"));void 0===u&&(u=!vG(t,"y"));void 0===h&&(h=!vG(t,"fx"));void 0===U&&(U=!vG(t,"fy"));!0===I&&(I="bottom");!0===u&&(u="left");!0===h&&(h="top"===I||null===I?"bottom":"top");!0===U&&(U="right"===u||null===u?"left":"right");const y=[];return RG(y,C,vf,l),SG(y,U,Af,"right","left",g,l),RG(y,b,Zf,a),SG(y,h,Lf,"top","bottom",g,a),RG(y,F,Xf,c),SG(y,u,mf,"left","right",n,c),RG(y,Q,Nf,s),SG(y,I,xf,"bottom","top",n,s),y}(o,d,t));for(const e of I){const n=xG(e,g,t);n&&B.set(e,n)}o.unshift(...I);let Q=YC(d,t);if(void 0!==Q){const t=g?ty(Q,g):void 0;for(const e of o){if(null===e.facet||"super"===e.facet)continue;const n=B.get(e);void 0!==n&&(n.facetsIndex=null!=e.fx||null!=e.fy?ty(Q,n):t)}const e=new Set;for(const{facetsIndex:t}of B.values())t?.forEach(((t,n)=>{t?.length>0&&e.add(n)}));Q.forEach(0<e.size&&e.size<Q.length?(t,n)=>t.empty=!e.has(n):t=>t.empty=!1);for(const t of o)if("exclude"===t.facet){const e=B.get(t);void 0!==e&&(e.facetsIndex=JC(e.facetsIndex))}}for(const e of qh.keys())Bh(t[e])&&"fx"!==e&&"fy"!==e&&d.set(e,[]);const u=new Map;for(const e of o){if(u.has(e))throw new Error("duplicate mark; each mark must be unique");const{facetsIndex:n,channels:i}=B.get(e)??{},{data:s,facets:c,channels:a}=e.initialize(n,i,t);fG(a,t),u.set(e,{data:s,facets:c,channels:a})}const F=CC(mG(d,u,t),t),h=function(t,e,n={}){let i=.5-zb,s=.5+zb,c=.5+zb,a=.5-zb;for(const{marginTop:t,marginRight:n,marginBottom:l,marginLeft:r}of e)t>i&&(i=t),n>s&&(s=n),l>c&&(c=l),r>a&&(a=r);let{margin:l,marginTop:r=(void 0!==l?l:i),marginRight:o=(void 0!==l?l:s),marginBottom:g=(void 0!==l?l:c),marginLeft:B=(void 0!==l?l:a)}=n;r=+r,o=+o,g=+g,B=+B;let{width:d=640,height:I=HC(t,n,{width:d,marginTopDefault:i,marginRightDefault:s,marginBottomDefault:c,marginLeftDefault:a})+Math.max(0,r-i+g-c)}=n;d=+d,I=+I;const Q={width:d,height:I,marginTop:r,marginRight:o,marginBottom:g,marginLeft:B};if(t.fx||t.fy){let{margin:t,marginTop:e=(void 0!==t?t:r),marginRight:i=(void 0!==t?t:o),marginBottom:s=(void 0!==t?t:g),marginLeft:c=(void 0!==t?t:B)}=n.facet??{};e=+e,i=+i,s=+s,c=+c,Q.facet={marginTop:e,marginRight:i,marginBottom:s,marginLeft:c}}return Q}(F,o,t);!function(t,e){const{x:n,y:i,fx:s,fy:c}=t,a=s||c?GC(e):e;s&&mC(s,a),c&&AC(c,a);const l=s||c?pC(t,e):e;n&&mC(n,l),i&&AC(i,l)}(F,h);const b=yC(F),{fx:U,fy:C}=b,y=U||C?pC(F,h):h,f=U||C?function({fx:t,fy:e},n){const{marginTop:i,marginRight:s,marginBottom:c,marginLeft:a,width:l,height:r}=GC(n),o=t&&ZG(t),g=e&&ZG(e);return{marginTop:e?g[0]:i,marginRight:t?l-o[1]:s,marginBottom:e?r-g[1]:c,marginLeft:t?o[0]:a,inset:{marginTop:n.marginTop,marginRight:n.marginRight,marginBottom:n.marginBottom,marginLeft:n.marginLeft},width:l,height:r}}(b,h):h,G=IU(t),p=G.document,m=we("svg").call(p.documentElement);let A=m;G.ownerSVGElement=m,G.className=r,G.projection=bU(t,y),G.filterFacets=(t,e)=>ty(Q,{channels:e,groups:kC(t,e)}),G.getMarkState=t=>{const e=u.get(t),n=B.get(t);return{...e,channels:{...e.channels,...n?.channels}}},G.dispatchValue=t=>{A.value!==t&&(A.value=t,A.dispatchEvent(new Event("input",{bubbles:!0})))};const x=new Set;for(const[e,n]of u)if(null!=e.initializer){const i="super"===e.facet?f:y,s=e.initializer(n.data,n.facets,n.channels,b,i,G);if(void 0!==s.data&&(n.data=s.data),void 0!==s.facets&&(n.facets=s.facets),void 0!==s.channels){const{fx:i,fy:c,...a}=s.channels;pG(a),Object.assign(n.channels,a);for(const e of Object.values(a)){const{scale:n}=e;null!=n&&((L=qh.get(n))!==zh&&L!==$h)&&(GG(e,t),x.add(n))}null==i&&null==c||B.set(e,!0)}}var L;if(x.size){const e=new Map;mG(e,u,t,(t=>x.has(t))),mG(d,u,t,(t=>x.has(t)));const n=function(t,e){for(const n in t){const i=t[n],s=e[n];void 0===i.label&&s&&(i.label=s.label)}return t}(CC(e,t),F),{scales:i,...s}=yC(n);Object.assign(F,n),Object.assign(b,s),Object.assign(b.scales,i)}let S,R;void 0!==Q&&(S={x:U?.domain(),y:C?.domain()},Q=function(t,{x:e,y:n}){return e&&=zC(e),n&&=zC(n),t.filter(e&&n?t=>e.has(t.x)&&n.has(t.y):e?t=>e.has(t.x):t=>n.has(t.y)).sort(e&&n?(t,i)=>e.get(t.x)-e.get(i.x)||n.get(t.y)-n.get(i.y):e?(t,n)=>e.get(t.x)-e.get(n.x):(t,e)=>n.get(t.y)-n.get(e.y))}(Q,S),R=function(t,e,{marginTop:n,marginLeft:i}){return t&&e?({x:s,y:c})=>`translate(${t(s)-i},${e(c)-n})`:t?({x:e})=>`translate(${t(e)-i},0)`:({y:t})=>`translate(0,${e(t)-n})`}(U,C,h));for(const[t,e]of u)e.values=t.scale(e.channels,b,G);const{width:X,height:v}=h;Tn(m).attr("class",r).attr("fill","currentColor").attr("font-family","system-ui, sans-serif").attr("font-size",10).attr("text-anchor","middle").attr("width",X).attr("height",v).attr("viewBox",`0 0 ${X} ${v}`).attr("aria-label",a).attr("aria-description",l).call((t=>t.append("style").text(`.${r} {\n display: block;\n background: white;\n height: auto;\n height: intrinsic;\n max-width: 100%;\n}\n.${r} text,\n.${r} tspan {\n white-space: pre;\n}`))).call(BU,n);for(const t of o){const{channels:e,values:n,facets:i}=u.get(t);if(void 0===Q||"super"===t.facet){let s=null;if(i&&(s=i[0],s=t.filter(s,e,n),0===s.length))continue;const c=t.render(s,b,n,f,G);if(null==c)continue;m.appendChild(c)}else{let s;for(const c of Q){if(!(t.facetAnchor?.(Q,S,c)??!c.empty))continue;let a=null;if(i){const s=B.has(t);if(a=i[s?c.i:0],a=t.filter(a,e,n),0===a.length)continue;s||a!==i[0]||(a=bh(a)),a.fx=c.x,a.fy=c.y,a.fi=c.i}const l=t.render(a,b,n,y,G);if(null!=l){(s??=Tn(m).append("g")).append((()=>l)).datum(c);for(const t of["aria-label","aria-description","aria-hidden","transform"])l.hasAttribute(t)&&(s.attr(t,l.getAttribute(t)),l.removeAttribute(t))}}s?.selectChildren().attr("transform",R)}}const N=function(t,e,n){const i=[];for(const[s,c]of qf){const a=n[s];if(a?.legend&&s in t){const n=c(t[s],tG(e,t[s],a),(e=>t[e]));null!=n&&i.push(n)}}return i}(F,G,t),{figure:Z=null!=i||null!=s||null!=c||N.length>0}=t;Z&&(A=p.createElement("figure"),A.className=`${r}-figure`,A.style.maxWidth="initial",null!=i&&A.append(bG(p,i,"h2")),null!=s&&A.append(bG(p,s,"h3")),A.append(...N,m),null!=c&&A.append(function(t,e){const n=t.createElement("figcaption");return n.append(e),n}(p,c))),A.scale=function(t){return e=>{if(!qh.has(e=`${e}`))throw new Error(`unknown scale: ${e}`);return t[e]}}(b.scales),A.legend=function(t,e,n={}){return(i,s)=>{if(!qf.has(i))throw new Error(`unknown legend type: ${i}`);if(i in t)return qf.get(i)(t[i],tG(e,n[i],s),(e=>t[e]))}}(F,G,t);const E=function(){const t=Mb;return Mb=0,Jb=void 0,t}();return E>0&&Tn(m).append("text").attr("x",X).attr("y",20).attr("dy","-1em").attr("text-anchor","end").attr("font-family","initial").text("⚠️").append("title").text(`${E.toLocaleString("en-US")} warning${1===E?"":"s"}. Please check the console.`),A}function bG(t,e,n){if(e.ownerDocument)return e;const i=t.createElement(n);return i.append(e),i}function UG(t){return t.flat(1/0).filter((t=>null!=t)).map(CG)}function CG(t){return"function"==typeof t.render?t:new yG(t)}ey.prototype.plot=function({marks:t=[],...e}={}){return hG({...e,marks:[...t,this]})};class yG extends ey{constructor(t){if("function"!=typeof t)throw new TypeError("invalid mark; missing render function");super(),this.render=t}render(){}}function fG(t,e){for(const n in t)GG(t[n],e);return t}function GG(t,e){const{scale:n,transform:i=!0}=t;if(null==n||!i)return;const{type:s,percent:c,interval:a,transform:l=(c?t=>100*t:mh(a,s))}=e[n]??{};null!=l&&(t.value=lh(t.value,l),t.transform=!1)}function pG(t){for(const e in t)Xb(e,t[e])}function mG(t,e,n,i=zF){for(const{channels:s}of e.values())for(const e in s){const c=s[e],{scale:a}=c;if(null!=a&&i(a))if("projection"===a){if(!mU(n)){const e=void 0===n.x?.domain,i=void 0===n.y?.domain;if(e||i){const[n,s]=AU(c);e&&AG(t,"x",n),i&&AG(t,"y",s)}}}else AG(t,a,c)}return t}function AG(t,e,n){const i=t.get(e);void 0!==i?i.push(n):t.set(e,[n])}function xG(t,e,n){if(null===t.facet||"super"===t.facet)return;const{fx:i,fy:s}=t;if(null!=i||null!=s){const e=ah(t.data??i??s);if(void 0===e)throw new Error(`missing facet data in ${t.ariaLabel}`);if(null===e)return;const c={};return null!=i&&(c.fx=Rb(e,{value:i,scale:"fx"})),null!=s&&(c.fy=Rb(e,{value:s,scale:"fy"})),fG(c,n),{channels:c,groups:kC(e,c)}}if(void 0===e)return;const{channels:c,groups:a,data:l}=e;if("auto"!==t.facet||t.data===l)return{channels:c,groups:a};l.length>0&&(a.size>1||1===a.size&&c.fx&&c.fy&&[...a][0][1].size>1)&&ah(t.data)?.length===l.length&&Tb(`Warning: the ${t.ariaLabel} mark appears to use faceted data, but isn’t faceted. The mark data has the same length as the facet data and the mark facet option is "auto", but the mark data and facet data are distinct. If this mark should be faceted, set the mark facet option to true; otherwise, suppress this warning by setting the mark facet option to false.`)}function LG(t,e={}){return ab({...e,x:null,y:null},((e,n,i,s,c,a)=>a.getMarkState(t)))}function SG(t,e,n,i,s,c,a){if(!e)return;const l=/^\s*both\s*$/i.test(e);a=function(t,e,{line:n=e.line,ticks:i,tickSize:s,tickSpacing:c,tickPadding:a,tickFormat:l,tickRotate:r,fontVariant:o,ariaLabel:g,ariaDescription:B,label:d=e.label,labelAnchor:I,labelArrow:Q=e.labelArrow,labelOffset:u}){return{anchor:t,line:n,ticks:i,tickSize:s,tickSpacing:c,tickPadding:a,tickFormat:l,tickRotate:r,fontVariant:o,ariaLabel:g,ariaDescription:B,label:d,labelAnchor:I,labelArrow:Q,labelOffset:u}}(l?i:e,c,a);const{line:r}=a;n!==mf&&n!==xf||!r||Yh(r)||t.push(function(t){return new cG(t)}(function(t){const{anchor:e,line:n}=t;return{anchor:e,facetAnchor:e+"-empty",stroke:!0===n?void 0:n}}(a))),t.push(n(a)),l&&t.push(n({...a,anchor:s,label:null}))}function RG(t,e,n,i){e&&!Yh(e)&&t.push(n(function(t,{stroke:e=(Wh(t)?t:void 0),ticks:n=(XG(t)?t:void 0),tickSpacing:i,ariaLabel:s,ariaDescription:c}){return{stroke:e,ticks:n,tickSpacing:i,ariaLabel:s,ariaDescription:c}}(e,i)))}function XG(t){switch(typeof t){case"number":return!0;case"string":return!Wh(t)}return Rh(t)||"function"==typeof t?.range}function vG(t,e){const n=`${e}-axis `;return t.some((t=>t.ariaLabel?.startsWith(n)))}function NG(t,e){for(const n of e)for(const e in n.channels){const{scale:i}=n.channels[e];if(i===t||"projection"===i)return!0}return!1}function ZG(t){const e=t.domain();let n=t(e[0]),i=t(e[e.length-1]);return i<n&&([n,i]=[i,n]),[n,i+t.bandwidth()]}const EG=new Map([["basis",function(t){return new _Q(t)}],["basis-closed",function(t){return new PQ(t)}],["basis-open",function(t){return new jQ(t)}],["bundle",qQ],["bump-x",function(t){return new UQ(t,!0)}],["bump-y",function(t){return new UQ(t,!1)}],["cardinal",nu],["cardinal-closed",su],["cardinal-open",au],["catmull-rom",ou],["catmull-rom-closed",Bu],["catmull-rom-open",Iu],["linear",uQ],["linear-closed",function(t){return new Qu(t)}],["monotone-x",function(t){return new Uu(t)}],["monotone-y",function(t){return new Cu(t)}],["natural",function(t){return new fu(t)}],["step",function(t){return new pu(t,.5)}],["step-after",function(t){return new pu(t,1)}],["step-before",function(t){return new pu(t,0)}]]);function VG(t=wG,e){return"function"!=typeof t&&"auto"===`${t}`.toLowerCase()?wG:function(t=uQ,e){if("function"==typeof t)return t;const n=EG.get(`${t}`.toLowerCase());if(!n)throw new Error(`unknown curve: ${t}`);if(void 0!==e){if("beta"in n)return n.beta(e);if("tension"in n)return n.tension(e);if("alpha"in n)return n.alpha(e)}return n}(t,e)}function wG(t){return uQ(t)}function WG(t={y:"count"},e={}){[t,e]=function({cumulative:t,domain:e,thresholds:n,interval:i,...s},c){return[s,{cumulative:t,domain:e,thresholds:n,interval:i,...c}]}(t,e);const{x:n,y:i}=e;return function(t,e,n,i,{data:s=fb,filter:c=Ab,sort:a,reverse:l,...r}={},o={}){t=DG(t),e=DG(e),r=function(t,e){return function(t,e,n=ub){const i=Object.entries(t);return null!=e.title&&void 0===t.title&&i.push(["title",pb]),null!=e.href&&void 0===t.href&&i.push(["href",Gb]),i.filter((([,t])=>void 0!==t)).map((([t,i])=>null===i?function(t){return{name:t,initialize(){},scope(){},reduce(){}}}(t):n(t,i,e)))}(t,e,YG)}(r,o),s=JG(s,MF),a=null==a?void 0:YG("sort",a,o),c=null==c?void 0:kG("filter",c,o),null!=n&&Qb(r,"x","x1","x2")&&(n=null);null!=i&&Qb(r,"y","y1","y2")&&(i=null);const[g,B]=yh(t),[d,I]=yh(t),[Q,u]=yh(e),[F,h]=yh(e),[b,U]=null!=n?[n,"x"]:null!=i?[i,"y"]:[],[C,y]=yh(b),{x:f,y:G,z:p,fill:m,stroke:A,x1:x,x2:L,y1:S,y2:R,domain:X,cumulative:v,thresholds:N,interval:Z,...E}=o,[V,w]=yh(p),[W]=nh(m),[H]=nh(A),[D,Y]=yh(W),[k,J]=yh(H);return{..."z"in o&&{z:V||p},..."fill"in o&&{fill:D||m},..."stroke"in o&&{stroke:k||A},...cb(E,((n,i,o)=>{const g=ph(WF(n,b),o?.[U]),d=WF(n,p),Q=WF(n,W),F=WF(n,H),C=function(t,e){for(const n in e){const i=e[n];if(void 0!==i&&!t.some((t=>t.name===n)))return i}}(r,{z:d,fill:Q,stroke:F}),f=[],G=[],m=g&&y([]),A=d&&w([]),x=Q&&Y([]),L=F&&J([]),S=t&&B([]),R=t&&I([]),X=e&&u([]),v=e&&h([]),N=(Z=t?.(n),E=e?.(n),Z&&E?function*(t){const e=Z.bin(t);for(const[t,[n,i]]of Z.entries()){const s=E.bin(e[t]);for(const[t,[e,c]]of E.entries())yield[s[t],{x1:n,y1:e,x2:i,y2:c}]}}:Z?function*(t){const e=Z.bin(t);for(const[t,[n,i]]of Z.entries())yield[e[t],{x1:n,x2:i}]}:function*(t){const e=E.bin(t);for(const[t,[n,i]]of E.entries())yield[e[t],{y1:n,y2:i}]});var Z,E;let V=0;for(const t of r)t.initialize(n);a&&a.initialize(n),c&&c.initialize(n);for(const t of i){const e=[];for(const e of r)e.scope("facet",t);a&&a.scope("facet",t),c&&c.scope("facet",t);for(const[i,l]of hb(t,C))for(const[t,o]of hb(l,g))for(const[l,B]of N(o))if(!c||c.reduce(l,B)){e.push(V++),G.push(s.reduceIndex(l,n,B)),g&&m.push(t),d&&A.push(C===d?i:d[(l.length>0?l:o)[0]]),Q&&x.push(C===Q?i:Q[(l.length>0?l:o)[0]]),F&&L.push(C===F?i:F[(l.length>0?l:o)[0]]),S&&(S.push(B.x1),R.push(B.x2)),X&&(X.push(B.y1),v.push(B.y2));for(const t of r)t.reduce(l,B);a&&a.reduce(l)}f.push(e)}return function(t,e,n){if(e){const n=e.output.transform(),i=(t,e)=>sF(n[t],n[e]);t.forEach((t=>t.sort(i)))}n&&t.forEach((t=>t.reverse()))}(f,a,l),{data:G,facets:f}})),...!Qb(r,"x")&&(g?{x1:g,x2:d,x:Gh(g,d)}:{x:f,x1:x,x2:L}),...!Qb(r,"y")&&(Q?{y1:Q,y2:F,y:Gh(Q,F)}:{y:G,y1:S,y2:R}),...C&&{[U]:C},...Object.fromEntries(r.map((({name:t,output:e})=>[t,e])))}}(function(t,{cumulative:e,domain:n,thresholds:i,interval:s},c){void 0===(t={...Sh(t)}).domain&&(t.domain=n);void 0===t.cumulative&&(t.cumulative=e);void 0===t.thresholds&&(t.thresholds=i);void 0===t.interval&&(t.interval=s);void 0===t.value&&(t.value=c);return t.thresholds=function(t,e,n=TG){if(void 0===t)return void 0===e?n:xh(e);if("string"==typeof t){switch(t.toLowerCase()){case"freedman-diaconis":return se;case"scott":return ce;case"sturges":return Ot;case"auto":return TG}return RF(t)}return t}(t.thresholds,t.interval),t}(n,e,MF),null,null,i,t,my(e))}function HG(t={}){return function(t,e,n={}){if(null==n?.interval)return n;const{reduce:i=Gb}=n,s={filter:null};return null!=n[e]&&(s[e]=i),null!=n[`${e}1`]&&(s[`${e}1`]=i),null!=n[`${e}2`]&&(s[`${e}2`]=i),t(s,n)}(WG,"y",cy(t,"x"))}function DG(t){if(null==t)return;const{value:e,cumulative:n,domain:i=pt,thresholds:s}=t,c=t=>{let c,a=WF(t,e);if(Nh(a)||function(t){return function(t){return Lh(t)&&"function"==typeof t?.floor&&t.floor()instanceof Date}(t)||Rh(t)&&Nh(t)}(s)){a=lh(a,eh,Float64Array);let[t,e]="function"==typeof i?i(a):i,n="function"!=typeof s||Lh(s)?s:s(a,t,e);"number"==typeof n&&(n=$g(t,e,n)),Lh(n)&&(i===pt&&(t=n.floor(t),e=n.offset(n.floor(e))),n=n.range(t,n.offset(e))),c=n}else{a=$F(a);let[t,e]="function"==typeof i?i(a):i,n="function"!=typeof s||Lh(s)?s:s(a,t,e);if("number"==typeof n)if(i===pt){let i=zt(t,e,n);if(isFinite(i))if(i>0){let s=Math.round(t/i),c=Math.round(e/i);s*i<=t||--s,c*i>e||++c;let a=c-s+1;n=new Float64Array(a);for(let t=0;t<a;++t)n[t]=(s+t)*i}else if(i<0){i=-i;let s=Math.round(t*i),c=Math.round(e*i);s/i<=t||--s,c/i>e||++c;let a=c-s+1;n=new Float64Array(a);for(let t=0;t<a;++t)n[t]=(s+t)/i}else n=[t];else n=[t]}else n=Tt(t,e,n);else Lh(n)&&(i===pt&&(t=n.floor(t),e=n.offset(n.floor(e))),n=n.range(t,n.offset(e)));c=n}const l=[];if(1===c.length)l.push([c[0],c[0]]);else for(let t=1;t<c.length;++t)l.push([c[t-1],c[t]]);return l.bin=(n<0?OG:n>0?KG:zG)(l,c,a),l};return c.label=fh(e),c}function YG(t,e,n){return ub(t,e,n,kG)}function kG(t,e,n){return Fb(t,e,n,JG)}function JG(t,e){return bb(t,e,MG)}function MG(t){switch(`${t}`.toLowerCase()){case"x":return PG;case"x1":return $G;case"x2":return qG;case"y":return jG;case"y1":return tp;case"y2":return ep}throw new Error(`invalid bin reduce: ${t}`)}function TG(t,e,n){return Math.min(200,ce(t,e,n))}function zG(t,e,n){return e=$F(e),i=>{const s=t.map((()=>[]));for(const t of i)s[Ft(e,n[t])-1]?.push(t);return s}}function KG(t,e,n){const i=zG(t,e,n);return t=>{const e=i(t);for(let t=1,n=e.length;t<n;++t){const n=e[t-1],i=e[t];for(const t of n)i.push(t)}return e}}function OG(t,e,n){const i=zG(t,e,n);return t=>{const e=i(t);for(let t=e.length-2;t>=0;--t){const n=e[t+1],i=e[t];for(const t of n)i.push(t)}return e}}function _G(t,e){const n=(+t+ +e)/2;return t instanceof Date?new Date(n):n}const PG={reduceIndex:(t,e,{x1:n,x2:i})=>_G(n,i)},jG={reduceIndex:(t,e,{y1:n,y2:i})=>_G(n,i)},$G={reduceIndex:(t,e,{x1:n})=>n},qG={reduceIndex:(t,e,{x2:n})=>n},tp={reduceIndex:(t,e,{y1:n})=>n},ep={reduceIndex:(t,e,{y2:n})=>n};function np(t={},e={}){1===arguments.length&&([t,e]=function(t){const{offset:e,order:n,reverse:i,...s}=t;return[{offset:e,order:n,reverse:i},s]}(t));const{x1:n,x:i=n,y:s,...c}=e,[a,l,r,o]=function(t,e=TF,n,i,{offset:s,order:c,reverse:a},l){if(null===e)throw new Error(`stack requires ${i}`);const r=uh(l),[o,g]=yh(t),[B,d]=Ch(e),[I,Q]=Ch(e);return B.hint=I.hint=sp,s=function(t){if(null==t)return;if("function"==typeof t)return t;switch(`${t}`.toLowerCase()){case"expand":case"normalize":return ap;case"center":case"silhouette":return lp;case"wiggle":return rp}throw new Error(`unknown offset: ${t}`)}(s),c=function(t,e,n){if(void 0===t&&e===rp)return Bp(sF);if(null==t)return;if("string"==typeof t){const e=t.startsWith("-"),i=e?cF:sF;switch((e?t.slice(1):t).toLowerCase()){case"value":case n:return function(t){return(e,n,i)=>(e,n)=>t(i[e],i[n])}(i);case"z":return function(t){return(e,n,i,s)=>(e,n)=>t(s[e],s[n])}(i);case"sum":return function(t){return Qp(t,((t,e,n,i)=>Dt(Fh(t),(t=>de(t,(t=>n[t]))),(t=>i[t]))))}(i);case"appearance":return function(t){return Qp(t,((t,e,n,i)=>Dt(Fh(t),(t=>e[ee(t,(t=>n[t]))]),(t=>i[t]))))}(i);case"inside-out":return Bp(i)}return dp(kF(t))}if("function"==typeof t)return(1===t.length?dp:Ip)(t);if(Array.isArray(t))return i=t,Qp(sF,(()=>i));var i;throw new Error(`invalid order: ${t}`)}(c,s,i),[cb(l,((i,l,o)=>{({data:i,facets:l}=function(t,e){if(1===e.length)return{data:t,facets:e};const n=t.length,i=new Uint8Array(n);let s=0;for(const t of e)for(const e of t)i[e]&&++s,i[e]=1;if(0===s)return{data:t,facets:e};const c=(t=rh(t))[wF]=new Uint32Array(n+s);e=e.map((t=>rh(t,Uint32Array)));let a=n;i.fill(0);for(const n of e)for(let e=0,s=n.length;e<s;++e){const s=n[e];i[s]?(n[e]=a,t[a]=t[s],c[a]=s,++a):c[s]=s,i[s]=1}return{data:t,facets:e}}(i,l));const B=null==t?void 0:g(ph(WF(i,t),o?.[n])),I=WF(i,e,Float64Array),u=WF(i,r),F=c&&c(i,B,I,u),h=i.length,b=d(new Float64Array(h)),U=Q(new Float64Array(h)),C=[];for(const t of l){const e=B?Array.from(Nt(t,(t=>B[t])).values()):[t];if(F)for(const t of e)t.sort(F);for(const t of e){let e=0,n=0;a&&t.reverse();for(const i of t){const t=I[i];t<0?e=U[i]=(b[i]=e)+t:t>0?n=U[i]=(b[i]=n)+t:U[i]=b[i]=n}}C.push(e)}return s&&s(C,b,U,u),{data:i,facets:l}})),o,B,I]}(i,s,"x","y",t,c);return{...a,x1:n,x:l,y1:r,y2:o,y:Gh(r,o)}}function ip({y:t,y1:e,y2:n,...i}={}){return i=cy(i,"x"),void 0===e&&void 0===n?np({y:t,...i}):([e,n]=function(t,e,n,i=MF){return void 0===e&&void 0===n?(e=0,n=void 0===t?i:t):void 0===e?e=void 0===t?0:t:void 0===n&&(n=void 0===t?0:t),[e,n]}(t,e,n),{...i,y1:e,y2:n})}const sp={length:!0};function cp(t,e){let n=0,i=0;for(const s of t){const t=e[s];t<n&&(n=t),t>i&&(i=t)}return[n,i]}function ap(t,e,n){for(const i of t)for(const t of i){const[i,s]=cp(t,n);for(const c of t){const t=1/(s-i||1);e[c]=t*(e[c]-i),n[c]=t*(n[c]-i)}}}function lp(t,e,n){for(const i of t){for(const t of i){const[i,s]=cp(t,n);for(const c of t){const t=(s+i)/2;e[c]-=t,n[c]-=t}}op(i,e,n)}gp(t,e,n)}function rp(t,e,n,i){for(const s of t){const t=new At;let c=0;for(const a of s){let s=-1;const l=a.map((t=>Math.abs(n[t]-e[t]))),r=a.map((c=>{s=i?i[c]:++s;const a=n[c]-e[c],l=t.has(s)?a-t.get(s):0;return t.set(s,a),l})),o=[0,...yt(r)];for(const t of a)e[t]+=c,n[t]+=c;const g=de(l);g&&(c-=de(l,((t,e)=>(r[e]/2+o[e])*t))/g)}op(s,e,n)}gp(t,e,n)}function op(t,e,n){const i=jt(t,(t=>jt(t,(t=>e[t]))));for(const s of t)for(const t of s)e[t]-=i,n[t]-=i}function gp(t,e,n){const i=t.length;if(1===i)return;const s=t.map((t=>t.flat())),c=s.map((t=>(jt(t,(t=>e[t]))+_t(t,(t=>n[t])))/2)),a=jt(c);for(let t=0;t<i;t++){const i=a-c[t];for(const c of s[t])e[c]+=i,n[c]+=i}}function Bp(t){return Qp(t,((t,e,n,i)=>{const s=Fh(t),c=Dt(s,(t=>e[ee(t,(t=>n[t]))]),(t=>i[t])),a=Zt(s,(t=>de(t,(t=>n[t]))),(t=>i[t])),l=[],r=[];let o=0;for(const t of c)o<0?(o+=a.get(t),l.push(t)):(o-=a.get(t),r.push(t));return r.reverse().concat(l)}))}function dp(t){return e=>{const n=WF(e,t);return(t,e)=>sF(n[t],n[e])}}function Ip(t){return e=>(n,i)=>t(e[n],e[i])}function Qp(t,e){return(n,i,s,c)=>{if(!c)throw new Error("missing channel: z");const a=new At(e(n,i,s,c).map(((t,e)=>[t,e])));return(e,n)=>t(a.get(c[e]),a.get(c[n]))}}const up={ariaLabel:"line",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",strokeMiterlimit:1};class Fp extends ey{constructor(t,e={}){const{x:n,y:i,z:s,curve:c,tension:a}=e;super(t,{x:{value:n,scale:"x"},y:{value:i,scale:"y"},z:{value:uh(e),optional:!0}},e,up),this.z=s,this.curve=VG(c,a),uy(this,e)}filter(t){return t}project(t,e,n){this.curve!==wG&&super.project(t,e,n)}render(t,e,n,i,s){const{x:c,y:a}=n,{curve:l}=this;return QU("svg:g",s).call(nU,this,i,s).call(aU,this,e).call((e=>e.selectAll().data(tU(t,[c,a],this,n)).enter().append("path").call(iU,this).call(qb,this,n).call(Gy,this,n,s).attr("d",l===wG&&s.projection?function(t,e,n){const i=Ar(t);return e=$F(e),n=$F(n),t=>{let s=[];const c=[s];for(const i of t)-1===i?(s=[],c.push(s)):s.push([e[i],n[i]]);return i({type:"MultiLineString",coordinates:c})}}(s.projection,c,a):bQ().curve(l).defined((t=>t>=0)).x((t=>c[t])).y((t=>a[t]))))).node()}}function hp(t,{x:e=JF,y:n=MF,...i}={}){return new Fp(t,HG({...i,x:e,y:n}))}const bp={ariaLabel:"rect"};class Up extends ey{constructor(t,e={}){const{x1:n,y1:i,x2:s,y2:c,inset:a=0,insetTop:l=a,insetRight:r=a,insetBottom:o=a,insetLeft:g=a,rx:B,ry:d}=e;super(t,{x1:{value:n,scale:"x",optional:!0},y1:{value:i,scale:"y",optional:!0},x2:{value:s,scale:"x",optional:!0},y2:{value:c,scale:"y",optional:!0}},e,bp),this.insetTop=OF(l),this.insetRight=OF(r),this.insetBottom=OF(o),this.insetLeft=OF(g),this.rx=lU(B,"auto"),this.ry=lU(d,"auto")}render(t,e,n,i,s){const{x:c,y:a}=e,{x1:l,y1:r,x2:o,y2:g}=n,{marginTop:B,marginRight:d,marginBottom:I,marginLeft:Q,width:u,height:F}=i,{projection:h}=s,{insetTop:b,insetRight:U,insetBottom:C,insetLeft:y,rx:f,ry:G}=this;return QU("svg:g",s).call(nU,this,i,s).call(aU,this,{x:l&&o&&c,y:r&&g&&a},0,0).call((e=>e.selectAll().data(t).enter().append("rect").call(iU,this).attr("x",l&&o&&(h||!EC(c))?t=>Math.min(l[t],o[t])+y:Q+y).attr("y",r&&g&&(h||!EC(a))?t=>Math.min(r[t],g[t])+b:B+b).attr("width",l&&o&&(h||!EC(c))?t=>Math.max(0,Math.abs(o[t]-l[t])-y-U):u-d-Q-U-y).attr("height",r&&g&&(h||!EC(a))?t=>Math.max(0,Math.abs(r[t]-g[t])-b-C):F-B-I-b-C).call(cU,"rx",f).call(cU,"ry",G).call($b,this,n))).node()}}function Cp(t,e={}){return function(t){return function({x:t,x1:e,x2:n}){return void 0!==t||void 0!==e||void 0!==n}(t)||oh(t)||void 0!==t.interval}(e)||(e={...e,x:JF,y2:MF,interval:1}),new Up(t,ip(function(t={}){return Sy("x",my,t,!0)}(function(t={}){return oh(t)?t:{...t,y:MF}}(e))))}function yp(t,e,n){var i=void 0===e?null:e,s=function(t,e){var n=atob(t);if(e){for(var i=new Uint8Array(n.length),s=0,c=n.length;s<c;++s)i[s]=n.charCodeAt(s);return String.fromCharCode.apply(null,new Uint16Array(i.buffer))}return n}(t,void 0!==n&&n),c=s.indexOf("\n",10)+1,a=s.substring(c)+(i?"//# sourceMappingURL="+i:""),l=new Blob([a],{type:"application/javascript"});return URL.createObjectURL(l)}var fp,Gp,pp,mp,Ap=(fp="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewoJJ3VzZSBzdHJpY3QnOwoKCXZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9OwoKCXZhciBkaXN0cmlidXRpb25zID0ge2V4cG9ydHM6IHt9fTsKCgkoZnVuY3Rpb24gKG1vZHVsZSkgewoKCSAgLy8gQSBudW1iZXIgb2YgbG9nIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb25zIChQREYpLiBOYW1pbmcgYW5kIHBhcmFtZXRlcml6YXRpb24KCSAgLy8gc2hvdWxkIG1hdGNoIFIncywgZXhjZXB0IGZvciB0aGF0IGFsbCBmdW5jdGlvbnMgcmVzaWRlIGluIGFuIGxkIG9iamVjdCAoCgkgIC8vIGFzIGluICJsb2cgZGVuc2l0eSIpLCBzbyB0byBnZXQgYSBub3JtYWwgbG9nIGRlbnNpdHkgeW91IHdvdWxkIHdyaXRlCgkgIC8vIGxkLm5vcm0oLi4uKS4KCSAgLy8gTW9zdCBvZiB0aGUgY29kZSBiZWxvdyBpcyBkaXJlY3RseSB0YWtlbiBmcm9tIHRoZSBncmVhdCBKc3RhdCBwcm9qZWN0CgkgIC8vIChodHRwczovL2dpdGh1Yi5jb20vanN0YXQvKSB3aGljaCBpbmNsdWRlcyBQREYgZm9yIG1hbnkgY29tbW9uIHByb2JhYmlsaXR5CgkgIC8vIGRpc3RyaWJ1dGlvbnMuIFdoYXQgSSBoYXZlIGRvbmUgaXMgb25seSB0byBjb252ZXJ0IHRoZXNlIHRvIGxvZyBQREZzLgoKCSAgLyoKCSAgT3JpZ2luYWwgd29yayBDb3B5cmlnaHQgKGMpIDIwMTMgalN0YXQKCSAgTW9kaWZpZWQgd29yayBDb3B5cmlnaHQgKGMpIDIwMTUgUmFzbXVzIELDpcOldGggCgkgIAlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CgkgIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCgkgIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKCSAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAoJICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKCSAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCSAgCVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCgkgIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoJICAJVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKCSAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCgkgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQoJICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCgkgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCgkgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KCSAgVEhFIFNPRlRXQVJFLgoJICAJKi8KCgkgIC8vIFRoaXMgYm9pbGVyIHBsYXRlIGNvZGUgaGVyZSBpcyB0YWtlbiBmcm9tOgoJICAvLyBodHRwczovL2dpdGh1Yi5jb20vdW1kanMvdW1kL2Jsb2IvbWFzdGVyL3RlbXBsYXRlcy9yZXR1cm5FeHBvcnRzLmpzCgkgIC8vIEl0IHNob3VsZCBtYWtlIHNodXJlIHRoYXQgbW9kdWxlIGNhbiBiZSBpbXBvcnRlZCBib3RoIGluIHRoZSBicm93c2VyLAoJICAvLyBOb2RlLCBhbmQgYnkgdXNpbmcgdGhlIEFzeW5jaHJvbm91cyBNb2R1bGUgRGVmaW5pdGlvbiBzdGFuZGFyZC4KCSAgLy8gSWYgdGhpcyBtb2R1bGUgaXMgbG9hZGVkIGluIHRoZSBicm93c2VyIGl0IHdpbGwgY3JlYXRlZCB0aGUgZ2xvYmFsCgkgIC8vIG9iamVjdCBsZCAuCgkgIChmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgewoJICAgIGlmIChtb2R1bGUuZXhwb3J0cykgewoJICAgICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0CgkgICAgICAvLyBvbmx5IENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cywKCSAgICAgIC8vIGxpa2UgTm9kZS4KCSAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpOwoJICAgIH0gZWxzZSB7CgkgICAgICAvLyBCcm93c2VyIGdsb2JhbHMgKHJvb3QgaXMgd2luZG93KQoJICAgICAgcm9vdC5sZCA9IGZhY3RvcnkoKTsKCSAgICB9CgkgIH0pKGNvbW1vbmpzR2xvYmFsLCBmdW5jdGlvbiAoKSB7CgkgICAgLy8gT2JqZWN0IHRvIGhvbGQgdGhlIGZ1bmN0aW9ucyB0byBiZSBleHBvcnRlZC4KCSAgICB2YXIgbGQgPSB7fTsKCgkgICAgLy8vLy8vLy8vLyBIZWxwZXIgZnVuY3Rpb25zIC8vLy8vLy8vLy8KCSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCSAgICB2YXIgbGdhbW1hID0gZnVuY3Rpb24gKHgpIHsKCSAgICAgIHZhciBqID0gMDsKCSAgICAgIHZhciBjb2YgPSBbNzYuMTgwMDkxNzI5NDcxNDYsIC04Ni41MDUzMjAzMjk0MTY3NywgMjQuMDE0MDk4MjQwODMwOTEsIC0xLjIzMTczOTU3MjQ1MDE1NSwgMC4xMjA4NjUwOTczODY2MTc5ZS0yLCAtMC41Mzk1MjM5Mzg0OTUzZS01XTsKCSAgICAgIHZhciBzZXIgPSAxLjAwMDAwMDAwMDE5MDAxNTsKCSAgICAgIHZhciB4eCwgeSwgdG1wOwoJICAgICAgdG1wID0gKHkgPSB4eCA9IHgpICsgNS41OwoJICAgICAgdG1wIC09ICh4eCArIDAuNSkgKiBsb2codG1wKTsKCSAgICAgIGZvciAoOyBqIDwgNjsgaisrKSBzZXIgKz0gY29mW2pdIC8gKyt5OwoJICAgICAgcmV0dXJuIGxvZygyLjUwNjYyODI3NDYzMTAwMDUgKiBzZXIgLyB4eCkgLSB0bXA7CgkgICAgfTsKCSAgICBsZC5sZ2FtbWEgPSBsZ2FtbWE7CgkgICAgdmFyIGxmYWN0b3JpYWwgPSBmdW5jdGlvbiAobikgewoJICAgICAgcmV0dXJuIG4gPCAwID8gTmFOIDogbGdhbW1hKG4gKyAxKTsKCSAgICB9OwoJICAgIGxkLmxmYWN0b3JpYWwgPSBsZmFjdG9yaWFsOwoJICAgIHZhciBsY2hvb3NlID0gZnVuY3Rpb24gKG4sIGspIHsKCSAgICAgIHJldHVybiBsZmFjdG9yaWFsKG4pIC0gbGZhY3RvcmlhbChrKSAtIGxmYWN0b3JpYWwobiAtIGspOwoJICAgIH07CgkgICAgbGQubGNob29zZSA9IGxjaG9vc2U7CgkgICAgdmFyIGxiZXRhID0gZnVuY3Rpb24gKGEsIGIpIHsKCSAgICAgIHJldHVybiBsZ2FtbWEoYSkgKyBsZ2FtbWEoYikgLSBsZ2FtbWEoYSArIGIpOwoJICAgIH07CgkgICAgbGQubGJldGEgPSBsYmV0YTsKCSAgICB2YXIgbG9nID0gTWF0aC5sb2c7CgkgICAgdmFyIGV4cCA9IE1hdGguZXhwOwoJICAgIHZhciBhYnMgPSBNYXRoLmFiczsKCSAgICB2YXIgcG93ID0gTWF0aC5wb3c7CgkgICAgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7CgkgICAgdmFyIHBpID0gTWF0aC5QSTsKCgkgICAgLy8vLy8vLy8vLyBDb250aW5vdXMgZGlzdHJpYnV0aW9ucyAvLy8vLy8vLy8vCgkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoJICAgIGxkLmJldGEgPSBmdW5jdGlvbiAoeCwgc2hhcGUxLCBzaGFwZTIpIHsKCSAgICAgIGlmICh4ID4gMSB8fCB4IDwgMCkgewoJICAgICAgICByZXR1cm4gLUluZmluaXR5OwoJICAgICAgfQoJICAgICAgaWYgKHNoYXBlMSA9PT0gMSAmJiBzaGFwZTIgPT09IDEpIHsKCSAgICAgICAgcmV0dXJuIDA7CgkgICAgICB9IGVsc2UgewoJICAgICAgICByZXR1cm4gKHNoYXBlMSAtIDEpICogbG9nKHgpICsgKHNoYXBlMiAtIDEpICogbG9nKDEgLSB4KSAtIGxiZXRhKHNoYXBlMSwgc2hhcGUyKTsKCSAgICAgIH0KCSAgICB9OwoJICAgIGxkLmNhdWNoeSA9IGZ1bmN0aW9uICh4LCBsb2NhdGlvbiwgc2NhbGUpIHsKCSAgICAgIHJldHVybiBsb2coc2NhbGUpIC0gbG9nKHBvdyh4IC0gbG9jYXRpb24sIDIpICsgcG93KHNjYWxlLCAyKSkgLSBsb2cocGkpOwoJICAgIH07CgkgICAgbGQubm9ybSA9IGZ1bmN0aW9uICh4LCBtZWFuLCBzZCkgewoJICAgICAgcmV0dXJuIC0wLjUgKiBsb2coMiAqIHBpKSAtIGxvZyhzZCkgLSBwb3coeCAtIG1lYW4sIDIpIC8gKDIgKiBzZCAqIHNkKTsKCSAgICB9OwoKCSAgICAvLyBBIGJpdmFyaWF0ZSBOb3JtYWwgZGlzdHJpYnV0aW9uIHBhcmFtZXRlcml6ZWQgYnkgYXJyYXlzIG9mIHR3byBtZWFucyBhbmQgU0RzLCBhbmQgCgkgICAgLy8gdGhlIGNvcnJlbGF0aW9uLgoJICAgIGxkLmJpdmFybm9ybSA9IGZ1bmN0aW9uICh4LCBtZWFuLCBzZCwgY29ycikgewoJICAgICAgdmFyIHogPSBwb3coeFswXSAtIG1lYW5bMF0sIDIpIC8gcG93KHNkWzBdLCAyKSArIHBvdyh4WzFdIC0gbWVhblsxXSwgMikgLyBwb3coc2RbMV0sIDIpIC0gMiAqIGNvcnIgKiAoeFswXSAtIG1lYW5bMF0pICogKHhbMV0gLSBtZWFuWzFdKSAvIChzZFswXSAqIHNkWzFdKTsKCSAgICAgIHZhciBub3JtYWxpemluZ19mYWN0b3IgPSAtKGxvZygyKSArIGxvZyhwaSkgKyBsb2coc2RbMF0pICsgbG9nKHNkWzFdKSArIDAuNSAqIGxvZygxIC0gcG93KGNvcnIsIDIpKSk7CgkgICAgICB2YXIgYml2YXJfbG9nX2RlbnMgPSBub3JtYWxpemluZ19mYWN0b3IgLSB6IC8gKDIgKiAoMSAtIHBvdyhjb3JyLCAyKSkpOwoJICAgICAgcmV0dXJuIGJpdmFyX2xvZ19kZW5zOwoJICAgIH07CgkgICAgbGQubGFwbGFjZSA9IGZ1bmN0aW9uICh4LCBsb2NhdGlvbiwgc2NhbGUpIHsKCSAgICAgIHJldHVybiAtYWJzKHggLSBsb2NhdGlvbikgLyBzY2FsZSAtIGxvZygyICogc2NhbGUpOwoJICAgIH07CgkgICAgbGQuZGV4cCA9IGxkLmxhcGxhY2U7CgkgICAgbGQuZ2FtbWEgPSBmdW5jdGlvbiAoeCwgc2hhcGUsIHJhdGUpIHsKCSAgICAgIHZhciBzY2FsZSA9IDEgLyByYXRlOwoJICAgICAgaWYgKHggPCAwKSB7CgkgICAgICAgIHJldHVybiAtSW5maW5pdHk7CgkgICAgICB9CgkgICAgICBpZiAoeCA9PT0gMCAmJiBzaGFwZSA9PT0gMSkgewoJICAgICAgICByZXR1cm4gLWxvZyhzY2FsZSk7CgkgICAgICB9IGVsc2UgewoJICAgICAgICByZXR1cm4gKHNoYXBlIC0gMSkgKiBsb2coeCkgLSB4IC8gc2NhbGUgLSBsZ2FtbWEoc2hhcGUpIC0gc2hhcGUgKiBsb2coc2NhbGUpOwoJICAgICAgfQoJICAgIH07CgkgICAgbGQuaW52Z2FtbWEgPSBmdW5jdGlvbiAoeCwgc2hhcGUsIHNjYWxlKSB7CgkgICAgICBpZiAoeCA8PSAwKSB7CgkgICAgICAgIHJldHVybiAtSW5maW5pdHk7CgkgICAgICB9CgkgICAgICByZXR1cm4gLShzaGFwZSArIDEpICogbG9nKHgpIC0gc2NhbGUgLyB4IC0gbGdhbW1hKHNoYXBlKSArIHNoYXBlICogbG9nKHNjYWxlKTsKCSAgICB9OwoJICAgIGxkLmxub3JtID0gZnVuY3Rpb24gKHgsIG1lYW5sb2csIHNkbG9nKSB7CgkgICAgICBpZiAoeCA8PSAwKSB7CgkgICAgICAgIHJldHVybiAtSW5maW5pdHk7CgkgICAgICB9CgkgICAgICByZXR1cm4gLWxvZyh4KSAtIDAuNSAqIGxvZygyICogcGkpIC0gbG9nKHNkbG9nKSAtIHBvdyhsb2coeCkgLSBtZWFubG9nLCAyKSAvICgyICogc2Rsb2cgKiBzZGxvZyk7CgkgICAgfTsKCSAgICBsZC5wYXJldG8gPSBmdW5jdGlvbiAoeCwgc2NhbGUsIHNoYXBlKSB7CgkgICAgICBpZiAoeCA8IHNjYWxlKSB7CgkgICAgICAgIHJldHVybiAtSW5maW5pdHk7CgkgICAgICB9CgkgICAgICByZXR1cm4gbG9nKHNoYXBlKSArIHNoYXBlICogbG9nKHNjYWxlKSAtIChzaGFwZSArIDEpICogbG9nKHgpOwoJICAgIH07CgkgICAgbGQudCA9IGZ1bmN0aW9uICh4LCBsb2NhdGlvbiwgc2NhbGUsIGRmKSB7CgkgICAgICBkZiA9IGRmID4gMWUxMDAgPyAxZTEwMCA6IGRmOwoJICAgICAgcmV0dXJuIGxnYW1tYSgoZGYgKyAxKSAvIDIpIC0gbGdhbW1hKGRmIC8gMikgLSBsb2coc3FydChwaSAqIGRmKSAqIHNjYWxlKSArIGxvZyhwb3coMSArIDEgLyBkZiAqIHBvdygoeCAtIGxvY2F0aW9uKSAvIHNjYWxlLCAyKSwgLShkZiArIDEpIC8gMikpOwoJICAgIH07CgoJICAgIC8vIFRoaXMgaXMgYSBkaXJlY3QgamF2YXNjcmlwdCB0cmFuc2xhdGlvbiBvZiB0aGUgUiBjb2RlIHVzZWQgdG8gZXZhbHVhdGUKCSAgICAvLyB0aGUgbG9nIGRlbnNpdHkgb2YgYSB3ZWlidWxsIGRpc3RyaWJ1dGlvbjogCgkgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3djaC9yLXNvdXJjZS9ibG9iL2IxNTZlM2E3MTE5NjdmNTgxMzFlMjNjMWIxZGMxZWE5MGUyZjBjNDMvc3JjL25tYXRoL2R3ZWlidWxsLmMKCSAgICBsZC53ZWlidWxsID0gZnVuY3Rpb24gKHgsIHNoYXBlLCBzY2FsZSkgewoJICAgICAgaWYgKHggPCAwKSByZXR1cm4gLUluZmluaXR5OwoJICAgICAgaWYgKHggPT09IDAgJiYgc2hhcGUgPCAxKSByZXR1cm4gSW5maW5pdHk7CgkgICAgICB2YXIgdG1wMSA9IHBvdyh4IC8gc2NhbGUsIHNoYXBlIC0gMSk7CgkgICAgICB2YXIgdG1wMiA9IHRtcDEgKiAoeCAvIHNjYWxlKTsKCSAgICAgIHJldHVybiAtdG1wMiArIGxvZyhzaGFwZSAqIHRtcDEgLyBzY2FsZSk7CgkgICAgfTsKCgkgICAgLy8gVGhpcyBpcyBhIGRpcmVjdCBqYXZhc2NyaXB0IHRyYW5zbGF0aW9uIG9mIHRoZSBSIGNvZGUgdXNlZCB0byBldmFsdWF0ZQoJICAgIC8vIHRoZSBsb2cgZGVuc2l0eSBvZiBhIGxvZ2lzdGljIGRpc3RyaWJ1dGlvbjogCgkgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3djaC9yLXNvdXJjZS9ibG9iL2IxNTZlM2E3MTE5NjdmNTgxMzFlMjNjMWIxZGMxZWE5MGUyZjBjNDMvc3JjL25tYXRoL2Rsb2dpcy5jCgkgICAgbGQubG9naXMgPSBmdW5jdGlvbiAoeCwgbG9jYXRpb24sIHNjYWxlKSB7CgkgICAgICB4ID0gYWJzKCh4IC0gbG9jYXRpb24pIC8gc2NhbGUpOwoJICAgICAgdmFyIGUgPSBleHAoLXgpOwoJICAgICAgdmFyIGYgPSAxLjAgKyBlOwoJICAgICAgcmV0dXJuIC0oeCArIGxvZyhzY2FsZSAqIGYgKiBmKSk7CgkgICAgfTsKCSAgICBsZC5kaXJpY2hsZXQgPSBmdW5jdGlvbiAoeCwgYWxwaGEpIHsKCSAgICAgIHZhciBzdW1fYWxwaGEgPSAwOwoJICAgICAgdmFyIHN1bV9sZ2FtbWFfYWxwaGEgPSAwOwoJICAgICAgdmFyIHN1bV9hbHBoYV9zdWJfMV9sb2dfeCA9IDA7CgkgICAgICB2YXIgbiA9IGFscGhhLmxlbmd0aDsKCSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkgICAgICAgIHN1bV9hbHBoYSArPSBhbHBoYVtpXTsKCSAgICAgICAgc3VtX2xnYW1tYV9hbHBoYSArPSBsZ2FtbWEoYWxwaGFbaV0pOwoJICAgICAgICBzdW1fYWxwaGFfc3ViXzFfbG9nX3ggKz0gKGFscGhhW2ldIC0gMSkgKiBsb2coeFtpXSk7CgkgICAgICB9CgkgICAgICByZXR1cm4gbGdhbW1hKHN1bV9hbHBoYSkgLSBzdW1fbGdhbW1hX2FscGhhICsgc3VtX2FscGhhX3N1Yl8xX2xvZ194OwoJICAgIH07CgkgICAgbGQuZXhwID0gZnVuY3Rpb24gKHgsIHJhdGUpIHsKCSAgICAgIHJldHVybiB4IDwgMCA/IC1JbmZpbml0eSA6IGxvZyhyYXRlKSAtIHJhdGUgKiB4OwoJICAgIH07CgkgICAgbGQudW5pZiA9IGZ1bmN0aW9uICh4LCBtaW4sIG1heCkgewoJICAgICAgcmV0dXJuIHggPCBtaW4gfHwgeCA+IG1heCA/IC1JbmZpbml0eSA6IGxvZygxIC8gKG1heCAtIG1pbikpOwoJICAgIH07CgoJICAgIC8vLy8vLy8vLy8gRGlzY3JldGUgZGlzdHJpYnV0aW9ucyAvLy8vLy8vLy8vCgkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCgkgICAgbGQuYmVybiA9IGZ1bmN0aW9uICh4LCBwcm9iKSB7CgkgICAgICByZXR1cm4gISh4ID09PSAwIHx8IHggPT09IDEpID8gLUluZmluaXR5IDogbG9nKHggKiBwcm9iICsgKDEgLSB4KSAqICgxIC0gcHJvYikpOwoJICAgIH07CgkgICAgbGQuY2F0ID0gZnVuY3Rpb24gKHgsIHByb2JzKSB7CgkgICAgICBpZiAoeCA8IDEgfHwgeCA+IHByb2JzLmxlbmd0aCkgewoJICAgICAgICByZXR1cm4gLUluZmluaXR5OwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIGxvZyhwcm9ic1t4IC0gMV0pOwoJICAgICAgfQoJICAgIH07CgkgICAgbGQuYmlub20gPSBmdW5jdGlvbiAoeCwgc2l6ZSwgcHJvYikgewoJICAgICAgaWYgKHggPiBzaXplIHx8IHggPCAwKSB7CgkgICAgICAgIHJldHVybiAtSW5maW5pdHk7CgkgICAgICB9CgkgICAgICBpZiAocHJvYiA9PT0gMCB8fCBwcm9iID09PSAxKSB7CgkgICAgICAgIHJldHVybiBzaXplICogcHJvYiA9PT0geCA/IDAgOiAtSW5maW5pdHk7CgkgICAgICB9CgkgICAgICByZXR1cm4gbGNob29zZShzaXplLCB4KSArIHggKiBsb2cocHJvYikgKyAoc2l6ZSAtIHgpICogbG9nKDEgLSBwcm9iKTsKCSAgICB9OwoJICAgIGxkLm5iaW5vbSA9IGZ1bmN0aW9uICh4LCBzaXplLCBwcm9iKSB7CgkgICAgICBpZiAoeCA8IDApIHsKCSAgICAgICAgcmV0dXJuIC1JbmZpbml0eTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBsY2hvb3NlKHggKyBzaXplIC0gMSwgc2l6ZSAtIDEpICsgeCAqIGxvZygxIC0gcHJvYikgKyBzaXplICogbG9nKHByb2IpOwoJICAgIH07CgkgICAgbGQuaHlwZXIgPSBmdW5jdGlvbiAoeCwgbSwgbiwgaykgewoJICAgICAgaWYgKHggPCAwIHx8IHggPiBrKSB7CgkgICAgICAgIHJldHVybiAtSW5maW5pdHk7CgkgICAgICB9IGVsc2UgewoJICAgICAgICByZXR1cm4gbGNob29zZShtLCB4KSArIGxjaG9vc2UobiwgayAtIHgpIC0gbGNob29zZShtICsgbiwgayk7CgkgICAgICB9CgkgICAgfTsKCSAgICBsZC5wb2lzID0gZnVuY3Rpb24gKHgsIGxhbWJkYSkgewoJICAgICAgcmV0dXJuIHggPCAwID8gLUluZmluaXR5IDogbG9nKGxhbWJkYSkgKiB4IC0gbGFtYmRhIC0gbGZhY3RvcmlhbCh4KTsKCSAgICB9OwoJICAgIHJldHVybiBsZDsKCSAgfSk7Cgl9KShkaXN0cmlidXRpb25zKTsKCXZhciBkaXN0cmlidXRpb25zRXhwb3J0cyA9IGRpc3RyaWJ1dGlvbnMuZXhwb3J0czsKCgl2YXIgbWNtYyA9IHtleHBvcnRzOiB7fX07CgoJKGZ1bmN0aW9uIChtb2R1bGUpIHsKCgkgIC8vIFRoaXMgYm9pbGVyIHBsYXRlIGNvZGUgaGVyZSBpcyB0YWtlbiBmcm9tOgoJICAvLyBodHRwczovL2dpdGh1Yi5jb20vdW1kanMvdW1kL2Jsb2IvbWFzdGVyL3RlbXBsYXRlcy9yZXR1cm5FeHBvcnRzLmpzCgkgIC8vIEl0IHNob3VsZCBtYWtlIHNodXJlIHRoYXQgbW9kdWxlIGNhbiBiZSBpbXBvcnRlZCBib3RoIGluIHRoZSBicm93c2VyLAoJICAvLyBOb2RlLCBhbmQgYnkgdXNpbmcgdGhlIEFzeW5jaHJvbm91cyBNb2R1bGUgRGVmaW5pdGlvbiBzdGFuZGFyZC4KCSAgLy8gSWYgdGhpcyBtb2R1bGUgaXMgbG9hZGVkIGluIHRoZSBicm93c2VyIGl0IHdpbGwgY3JlYXRlZCB0aGUgZ2xvYmFsCgkgIC8vIG9iamVjdCBtY21jIC4KCSAgKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CgkgICAgaWYgKG1vZHVsZS5leHBvcnRzKSB7CgkgICAgICAvLyBOb2RlLiBEb2VzIG5vdCB3b3JrIHdpdGggc3RyaWN0IENvbW1vbkpTLCBidXQKCSAgICAgIC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLAoJICAgICAgLy8gbGlrZSBOb2RlLgoJICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7CgkgICAgfSBlbHNlIHsKCSAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpCgkgICAgICByb290Lm1jbWMgPSBmYWN0b3J5KCk7CgkgICAgfQoJICB9KShjb21tb25qc0dsb2JhbCwgZnVuY3Rpb24gKCkgewoJICAgIC8vLyBUaGUgYWN0dWFsIG1vZHVsZSBjb2RlIHN0YXJ0cyBoZXJlIC8vLwoJICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgCgoJICAgIC8vLy8vLy8vLy8gSGVscGVyIEZ1bmN0aW9ucyAvLy8vLy8vLy8vCgkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCgkgICAgLyoqIFJldHVybnMgYSByYW5kb20gcmVhbCBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAqLwoJICAgIHZhciBydW5pZiA9IGZ1bmN0aW9uIChtaW4sIG1heCkgewoJICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjsKCSAgICB9OwoKCSAgICAvKiogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKi8KCSAgICB2YXIgcnVuaWZfZGlzY3JldGUgPSBmdW5jdGlvbiAobWluLCBtYXgpIHsKCSAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluOwoJICAgIH07CgoJICAgIC8qKiBSZXR1cm5zIGEgcmFuZG9tIHJlYWwgbnVtYmVyIGZyb20gYSBub3JtYWwgZGlzdHJpYmJ1dGlvbiBkZWZpbmVkCgkgICAgICogIGJ5IG1lYW4gYW5kIHNkLiAKCSAgICAgKiAgQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qc3RhdC9qc3RhdC9ibG9iL21hc3Rlci9zcmMvc3BlY2lhbC5qcyAqLwoJICAgIHZhciBybm9ybSA9IGZ1bmN0aW9uIChtZWFuLCBzZCkgewoJICAgICAgdmFyIHUsIHYsIHgsIHksIHE7CgkgICAgICBkbyB7CgkgICAgICAgIHUgPSBNYXRoLnJhbmRvbSgpOwoJICAgICAgICB2ID0gMS43MTU2ICogKE1hdGgucmFuZG9tKCkgLSAwLjUpOwoJICAgICAgICB4ID0gdSAtIDAuNDQ5ODcxOwoJICAgICAgICB5ID0gTWF0aC5hYnModikgKyAwLjM4NjU5NTsKCSAgICAgICAgcSA9IHggKiB4ICsgeSAqICgwLjE5NjAwICogeSAtIDAuMjU0NzIgKiB4KTsKCSAgICAgIH0gd2hpbGUgKHEgPiAwLjI3NTk3ICYmIChxID4gMC4yNzg0NiB8fCB2ICogdiA+IC00ICogTWF0aC5sb2codSkgKiB1ICogdSkpOwoJICAgICAgcmV0dXJuIHYgLyB1ICogc2QgKyBtZWFuOwoJICAgIH07CgoJICAgIC8qKiBSZXR1cm5zIGEgZGVlcCBjbG9uZSBvZiBzcmMsIHNvcnQgb2YuLi4gSXQgb25seSBjb3BpZXMgYSBsaW1pdGVkCgkgICAgICogbnVtYmVyIG9mIHR5cGVzIGFuZCwgZm9yIGV4YW1wbGUsIGZ1bmN0aW9uIGFyZSBub3QgY29waWVkLiAKCSAgICAgKiBGcm9tIGh0dHA6Ly9kYXZpZHdhbHNoLm5hbWUvamF2YXNjcmlwdC1jbG9uZQoJICAgICAqLwoJICAgIHZhciBkZWVwX2Nsb25lID0gZnVuY3Rpb24gKHNyYykgewoJICAgICAgZnVuY3Rpb24gbWl4aW4oZGVzdCwgc291cmNlLCBjb3B5RnVuYykgewoJICAgICAgICB2YXIgbmFtZSwKCSAgICAgICAgICBzLAoJICAgICAgICAgIGVtcHR5ID0ge307CgkgICAgICAgIGZvciAobmFtZSBpbiBzb3VyY2UpIHsKCSAgICAgICAgICAvLyB0aGUgKCEobmFtZSBpbiBlbXB0eSkgfHwgZW1wdHlbbmFtZV0gIT09IHMpIGNvbmRpdGlvbiBhdm9pZHMgY29weWluZyBwcm9wZXJ0aWVzIGluICJzb3VyY2UiCgkgICAgICAgICAgLy8gaW5oZXJpdGVkIGZyb20gT2JqZWN0LnByb3RvdHlwZS4JIEZvciBleGFtcGxlLCBpZiBkZXN0IGhhcyBhIGN1c3RvbSB0b1N0cmluZygpIG1ldGhvZCwKCSAgICAgICAgICAvLyBkb24ndCBvdmVyd3JpdGUgaXQgd2l0aCB0aGUgdG9TdHJpbmcoKSBtZXRob2QgdGhhdCBzb3VyY2UgaW5oZXJpdGVkIGZyb20gT2JqZWN0LnByb3RvdHlwZQoJICAgICAgICAgIHMgPSBzb3VyY2VbbmFtZV07CgkgICAgICAgICAgaWYgKCEobmFtZSBpbiBkZXN0KSB8fCBkZXN0W25hbWVdICE9PSBzICYmICghKG5hbWUgaW4gZW1wdHkpIHx8IGVtcHR5W25hbWVdICE9PSBzKSkgewoJICAgICAgICAgICAgZGVzdFtuYW1lXSA9IGNvcHlGdW5jID8gY29weUZ1bmMocykgOiBzOwoJICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gZGVzdDsKCSAgICAgIH0KCSAgICAgIGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT0gIm9iamVjdCIgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNyYykgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKCSAgICAgICAgLy8gbnVsbCwgdW5kZWZpbmVkLCBhbnkgbm9uLW9iamVjdCwgb3IgZnVuY3Rpb24KCSAgICAgICAgcmV0dXJuIHNyYzsgLy8gYW55dGhpbmcKCSAgICAgIH0KCgkgICAgICBpZiAoc3JjLm5vZGVUeXBlICYmICJjbG9uZU5vZGUiIGluIHNyYykgewoJICAgICAgICAvLyBET00gTm9kZQoJICAgICAgICByZXR1cm4gc3JjLmNsb25lTm9kZSh0cnVlKTsgLy8gTm9kZQoJICAgICAgfQoKCSAgICAgIGlmIChzcmMgaW5zdGFuY2VvZiBEYXRlKSB7CgkgICAgICAgIC8vIERhdGUKCSAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHNyYy5nZXRUaW1lKCkpOyAvLyBEYXRlCgkgICAgICB9CgoJICAgICAgaWYgKHNyYyBpbnN0YW5jZW9mIFJlZ0V4cCkgewoJICAgICAgICAvLyBSZWdFeHAKCSAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc3JjKTsgLy8gUmVnRXhwCgkgICAgICB9CgoJICAgICAgdmFyIHIsIGksIGw7CgkgICAgICBpZiAoc3JjIGluc3RhbmNlb2YgQXJyYXkpIHsKCSAgICAgICAgLy8gYXJyYXkKCSAgICAgICAgciA9IFtdOwoJICAgICAgICBmb3IgKGkgPSAwLCBsID0gc3JjLmxlbmd0aDsgaSA8IGw7ICsraSkgewoJICAgICAgICAgIGlmIChpIGluIHNyYykgewoJICAgICAgICAgICAgci5wdXNoKGRlZXBfY2xvbmUoc3JjW2ldKSk7CgkgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICB9IGVsc2UgewoJICAgICAgICAvLyBnZW5lcmljIG9iamVjdHMKCSAgICAgICAgciA9IHNyYy5jb25zdHJ1Y3RvciA/IG5ldyBzcmMuY29uc3RydWN0b3IoKSA6IHt9OwoJICAgICAgfQoJICAgICAgcmV0dXJuIG1peGluKHIsIHNyYywgZGVlcF9jbG9uZSk7CgkgICAgfTsKCgkgICAgLyoqIFNwZWNpYWxpemVkIGNsb25lIGZ1bmN0aW9uIHRoYXQgb25seSBjbG9uZXMgc2NhbGFycyBhbmQgbmVzdGVkIGFycmF5cyB3aGVyZQoJICAgICAqIGVhY2ggYXJyYXkgZWl0aGVyIGNvbnNpc3RzIG9mIGFsbCBhcnJheXMgb3IgYWxsIG51bWJlcnMuIFRoaXMgZnVuY3Rpb24KCSAgICAgKiBpcyBtZWFudCBhcyBhIGZhc3Qgd2F5IG9mIGNsb25pbmcgcGFyYW1ldGVyIGRyYXdzIHdpdGhpbiB0aGUgbWNtYyBzYW1wbGluZwoJICAgICAqIGxvb3AuCgkgICAgICovCgkgICAgdmFyIGNsb25lX3BhcmFtX2RyYXcgPSBmdW5jdGlvbiAoeCkgewoJICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHsKCSAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeFswXSkpIHsKCSAgICAgICAgICAvLyB4IGlzIGFuIGFycmF5IG9mIGFycmF5cyBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0IHJlY3Vyc2l2ZWx5CgkgICAgICAgICAgdmFyIHhfY29weSA9IFtdOwoJICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB4Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CgkgICAgICAgICAgICB4X2NvcHkucHVzaChjbG9uZV9wYXJhbV9kcmF3KHhbaV0pKTsKCSAgICAgICAgICB9CgkgICAgICAgICAgcmV0dXJuIHhfY29weTsKCSAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAvLyBXZSdsbCBhc3N1bWUgeCBpcyBhIGFycmF5cyBvZiBzY2FsYXJzCgkgICAgICAgICAgcmV0dXJuIHguc2xpY2UoMCk7CgkgICAgICAgIH0KCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIC8vIFdlJ2xsIGFzc3VtZSB4IGlzIGEgc2NhbGFyCgkgICAgICAgIHJldHVybiB4OwoJICAgICAgfQoJICAgIH07CgoJICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgb2JqZWN0IGlzIGEgbnVtYmVyLgoJICAgICAqLwoJICAgIHZhciBpc19udW1iZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7CgkgICAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAibnVtYmVyIiB8fCB0eXBlb2Ygb2JqZWN0ID09ICJvYmplY3QiICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyOwoJICAgIH07CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgKHBvc3NpYmx5IG11bHRpZGltZW5zaW9uYWwvbmVzdGVkKSBhcnJheS4KCSAgICAgKiBAcGFyYW0gZGltIC0gQW4gYXJyYXkgZ2l2aW5nIHRoZSBkaW1lbnNpb24gb2YgdGhlIGFycmF5LiBGb3IgZXhhbXBsZSwKCSAgICAgKiAgIFs1XSB3b3VsZCB5aWVsZCBhIDUgZWxlbWVudCBhcnJheSwgYW5kIFszLDNdIHdvdWxkIHlpZWxkIGEgMyBieSAzIG1hdHJpeC4KCSAgICAgKiBAcGFyYW0gaW5pdCAtIEEgdmFsdWUgb3IgYSBmdW5jdGlvbiB1c2VkIHRvIGZpbGwgaW4gdGhlIGVhY2ggZWxlbWVudCBpbgoJICAgICAqICAgdGhlIGFycmF5LiBJZiBpdCBpcyBhIGZ1bmN0aW9uIGl0IHNob3VsZCB0YWtlIG5vIGFyZ3VtZW50cywgaXQgd2lsbCBiZSAKCSAgICAgKiAgIGV2YWx1YXRlZCBvbmNlIGZvciBlYWNoIGVsZW1lbnQsIGFuZCBpdCdzIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8KCSAgICAgKiAgIGZpbGwgaW4gZWFjaCBlbGVtZW50LgoJICAgICAqIEBleGFtcGxlIAoJICAgICAqIC8vIFRoZSBmb2xsb3dpbmcgd291bGQgcmV0dXJuIFtbMSwxXSxbMSwxXSxbMSwxXV0KCSAgICAgKiBjcmVhdGVfYXJyYXkoWzIsM10sIDEpCgkgICAgICovCgkgICAgdmFyIGNyZWF0ZV9hcnJheSA9IGZ1bmN0aW9uIChkaW0sIGluaXQpIHsKCSAgICAgIHZhciBhcnIgPSBuZXcgQXJyYXkoZGltWzBdKTsKCSAgICAgIHZhciBpOwoJICAgICAgaWYgKGRpbS5sZW5ndGggPT0gMSkgewoJICAgICAgICAvLyBGaWxsIGl0IHVwIHdpdGggaW5pdAoJICAgICAgICBpZiAodHlwZW9mIGluaXQgPT09ICJmdW5jdGlvbiIpIHsKCSAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHsKCSAgICAgICAgICAgIGFycltpXSA9IGluaXQoKTsKCSAgICAgICAgICB9CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRpbVswXTsgaSsrKSB7CgkgICAgICAgICAgICBhcnJbaV0gPSBpbml0OwoJICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgfSBlbHNlIGlmIChkaW0ubGVuZ3RoID4gMSkgewoJICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHsKCSAgICAgICAgICBhcnJbaV0gPSBjcmVhdGVfYXJyYXkoZGltLnNsaWNlKDEpLCBpbml0KTsKCSAgICAgICAgfQoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgdGhyb3cgImNyZWF0ZV9hcnJheSBjYW4ndCBjcmVhdGUgYSBkaW1lbnNpb25sZXNzIGFycmF5IjsKCSAgICAgIH0KCSAgICAgIHJldHVybiBhcnI7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogUmV0dXJuIHRoZSBkaW1lbnNpb25zIG9mIGEgcG9zc2libHkgbmVzdGVkIGFycmF5IGFzIGFuIGFycmF5LiBGb3IgCgkgICAgICogZXhhbXBsZSwgYXJyYXlfZGltKCBbWzEsIDJdLCBbMSwgMl1dICkgc2hvdWxkIHJldHVybiBbMiwgMl0KCSAgICAgKiBBc3N1bWVzIHRoYXQgYWxsIGFycmF5cyBpbnNpZGUgYW5vdGhlciBhcnJheSBhcmUgb2YgdGhlIHNhbWUgbGVuZ3RoLgoJICAgICAqIEBleGFtcGxlCgkgICAgICogLy8gU2hvdWxkIHJldHVybiBbNCwgMiwgMV0KCSAgICAgKiBhcnJheV9kaW0oY3JlYXRlX2FycmF5KFs0LCAyLCAxXSwgMCkpCgkgICAgICovCgkgICAgdmFyIGFycmF5X2RpbSA9IGZ1bmN0aW9uIChhKSB7CgkgICAgICBpZiAoQXJyYXkuaXNBcnJheShhWzBdKSkgewoJICAgICAgICByZXR1cm4gW2EubGVuZ3RoXS5jb25jYXQoYXJyYXlfZGltKGFbMF0pKTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJldHVybiBbYS5sZW5ndGhdOwoJICAgICAgfQoJICAgIH07CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiB0d28gYXJyYXlzIGFyZSBlcXVhbCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNvbnRhaW4gdGhlIHNhbWUgZWxlbWVudHMKCSAgICAgKiBhcyBqdWRnZWQgYnkgdGhlICI9PSIgb3BlcmF0b3IuIFJldHVybnMgdHJ1ZSBvciBmYWxzZS4KCSAgICAgKiBBZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTQ4NTM5NzQvMTAwMTg0OAoJICAgICAqLwoJICAgIHZhciBhcnJheV9lcXVhbCA9IGZ1bmN0aW9uIChhMSwgYTIpIHsKCSAgICAgIGlmIChhMS5sZW5ndGggIT0gYTIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CgkgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGExLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgbmVzdGVkIGFycmF5cwoJICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhMVtpXSkgJiYgQXJyYXkuaXNBcnJheShhMltpXSkpIHsKCSAgICAgICAgICAvLyByZWN1cnNlIGludG8gdGhlIG5lc3RlZCBhcnJheXMKCSAgICAgICAgICBpZiAoIWFycmF5X2VxdWFsKGExW2ldLCBhMltpXSkpIHJldHVybiBmYWxzZTsKCSAgICAgICAgfSBlbHNlIGlmIChhMVtpXSAhPSBhMltpXSkgewoJICAgICAgICAgIC8vIFdhcm5pbmcgLSB0d28gZGlmZmVyZW50IG9iamVjdCBpbnN0YW5jZXMgd2lsbCBuZXZlciBiZSBlcXVhbDoge3g6MjB9ICE9IHt4OjIwfQoJICAgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHRydWU7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogVHJhdmVyc2VzIGEgcG9zc2libHkgbmVzdGVkIGFycmF5IGEgYW5kIGFwcGxpZXMgZnVuIHRvIGFsbCAibGVhZiBub2RlcyIsIAoJICAgICAqIHRoYXQgaXMsIHZhbHVlcyB0aGF0IGFyZSBub3QgYXJyYXlzLiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBzYW1lIHNpemUgYXMKCSAgICAgKiBhLgoJICAgICAqLwoJICAgIHZhciBuZXN0ZWRfYXJyYXlfYXBwbHkgPSBmdW5jdGlvbiAoYSwgZnVuKSB7CgkgICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkgewoJICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGEubGVuZ3RoKTsKCSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgICAgcmVzdWx0W2ldID0gbmVzdGVkX2FycmF5X2FwcGx5KGFbaV0sIGZ1bik7CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJldHVybiBmdW4oYSk7CgkgICAgICB9CgkgICAgfTsKCgkgICAgLyoqIFJhbmRvbWl6aW5nIHRoZSBhcnJheSBlbGVtZW50IG9yZGVyIGluLXBsYWNlLiBVc2luZyBEdXJzdGVuZmVsZAoJICAgICAqIHNodWZmbGUgYWxnb3JpdGhtLiBBZGFwdGVkIGZyb20gaGVyZTogCgkgICAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTI2NDY4NjQvMTAwMTg0OAoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNodWZmbGVfYXJyYXkoYXJyYXkpIHsKCSAgICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7CgkgICAgICAgIHZhciBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7CgkgICAgICAgIHZhciB0ZW1wID0gYXJyYXlbaV07CgkgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07CgkgICAgICAgIGFycmF5W2pdID0gdGVtcDsKCSAgICAgIH0KCSAgICAgIHJldHVybiBhcnJheTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbmVzdGVkX2FycmF5X2FwcGx5LCB0aGF0IGlzLCB0cmF2ZXJzZXMgYSBwb3NzaWJseQoJICAgICAqIG5lc3RlZCBhcnJheSBhIGFuZCBhcHBsaWVzIGZ1biB0byBhbGwgImxlYWYgbm9kZXMiIGFuZCByZXR1cm5zIGFuIGFycmF5IAoJICAgICAqIG9mIHRoZSBzYW1lIHNpemUgYXMgYS4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBuZXN0ZWRfYXJyYXlfcmFuZG9tX2FwcGx5CgkgICAgICogYnJhbmNoZXMgcmFuZG9tbHkuCgkgICAgICovCgkgICAgdmFyIG5lc3RlZF9hcnJheV9yYW5kb21fYXBwbHkgPSBmdW5jdGlvbiAoYSwgZnVuKSB7CgkgICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkgewoJICAgICAgICB2YXIgbGVuID0gYS5sZW5ndGg7CgkgICAgICAgIHZhciBpOwoJICAgICAgICB2YXIgYXJyYXlfaXMgPSBbXTsKCSAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CgkgICAgICAgICAgYXJyYXlfaXNbaV0gPSBpOwoJICAgICAgICB9CgkgICAgICAgIHNodWZmbGVfYXJyYXkoYXJyYXlfaXMpOwoJICAgICAgICB2YXIgcmVzdWx0ID0gW107CgkgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewoJICAgICAgICAgIHZhciBhcnJheV9pID0gYXJyYXlfaXNbaV07CgkgICAgICAgICAgcmVzdWx0W2FycmF5X2ldID0gbmVzdGVkX2FycmF5X2FwcGx5KGFbYXJyYXlfaV0sIGZ1bik7CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJldHVybiBmdW4oYSk7CgkgICAgICB9CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogQWxsb3dzIGEgcHJldHR5IHdheSBvZiBzZXR0aW5nIGRlZmF1bHQgb3B0aW9ucyB3aGVyZSB0aGUgZGVmdWx0cyBjYW4gYmUKCSAgICAgKiBvdmVycmlkZGVuIGJ5IGFuIG9wdGlvbnMgb2JqZWN0LgoJICAgICAqICBAcGFyYW0gb3B0aW9uX25hbWUgLSB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uIGFzIGEgc3RyaW5nCgkgICAgICogIEBwYXJhbSBteV9vcHRpb25zIC0gYW4gb3B0aW9uIG9iamVjdCB0aGF0IGNvdWxkIGhhdmUgb3B0aW9uX25hbWUgCgkgICAgICogICAgYXMgYSBtZW1iZXIuCgkgICAgICogQHBhcmFtIGRlZmF1bF92YWx1ZSAtIGRlZnVsdCB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGlmIG9wdGlvbl9uYW1lIAoJICAgICAqICAgaXMgbm90IGRlZmluZWQgaW4gbXlfb3B0aW9ucy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqIHZhciBteV9vcHRpb25zID0ge3BpOiAzLjE0MTU5fQoJICAgICAqIHZhciBwaSA9IGdldF9vcHRpb24oInBpIiwgbXlfb3B0aW9ucywgMy4xNCkKCSAgICAgKi8KCSAgICAvLyBQcmV0dHkgd2F5IG9mIHNldHRpbmcgZGVmYXVsdCBvcHRpb25zIHdoZXJlIHRoZSBkZWZhdWx0cyBjYW4gYmUgb3ZlcnJpZGRlbgoJICAgIC8vIGJ5IGFuIG9wdGlvbnMgb2JqZWN0LiBGb3IgZXhhbXBsZToKCSAgICAvLyB2YXIgcGkgPSBnZXRfb3B0aW9uKCJwaSIsIG15X29wdGlvbnMsIDMuMTQpCgkgICAgdmFyIGdldF9vcHRpb24gPSBmdW5jdGlvbiAob3B0aW9uX25hbWUsIG9wdGlvbnMsIGRlZmF1bF92YWx1ZSkgewoJICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgkgICAgICByZXR1cm4gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHRpb25fbmFtZSkgJiYgb3B0aW9uc1tvcHRpb25fbmFtZV0gIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zW29wdGlvbl9uYW1lXSAhPT0gbnVsbCA/IG9wdGlvbnNbb3B0aW9uX25hbWVdIDogZGVmYXVsX3ZhbHVlOwoJICAgIH07CgoJICAgIC8qKiBWZXJzaW9uIG9mIGdldF9vcHRpb24gd2hlcmUgdGhlIG9wdGlvbiBzaG91bGQgYmUgYSBvbmUgb3IgbXVsdGktZGltZW5zaW9uYWwKCSAgICAgKiBhcnJheSBhbmQgd2hlcmUgdGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gZWl0aGVyIGJ5IGEgc2NhbGFyIG9yIGJ5IGFuIGFycmF5LgoJICAgICAqIElmIGl0J3MgYSBzY2FsYXIgdGhlIHRoYXQgc2NhbGFyIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBhcnJheSB3aXRoIAoJICAgICAqIGRpbSBkaW1lbnNpb25zLgoJICAgICAqIAoJICAgICAqLwoJICAgIHZhciBnZXRfbXVsdGlkaW1fb3B0aW9uID0gZnVuY3Rpb24gKG9wdGlvbl9uYW1lLCBvcHRpb25zLCBkaW0sIGRlZmF1bF92YWx1ZSkgewoJICAgICAgdmFyIHZhbHVlID0gZ2V0X29wdGlvbihvcHRpb25fbmFtZSwgb3B0aW9ucywgZGVmYXVsX3ZhbHVlKTsKCSAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKCSAgICAgICAgdmFsdWUgPSBjcmVhdGVfYXJyYXkoZGltLCB2YWx1ZSk7CgkgICAgICB9CgkgICAgICBpZiAoIWFycmF5X2VxdWFsKGFycmF5X2RpbSh2YWx1ZSksIGRpbSkpIHsKCSAgICAgICAgdGhyb3cgIlRoZSBvcHRpb24gIiArIG9wdGlvbl9uYW1lICsgIiBpcyBvZiBkaW1lbnNpb24gWyIgKyBhcnJheV9kaW0odmFsdWUpICsgIl0gYnV0IHNob3VsZCBiZSBbIiArIGRpbSArICJdLiI7CgkgICAgICB9CgkgICAgICByZXR1cm4gdmFsdWU7CgkgICAgfTsKCgkgICAgLy8vLy8vLy8vLyBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHBhcmFtZXRlciBvYmplY3RzIC8vLy8vLy8vLy8KCSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIGEgZml4ZWQgKHNhbWUgZXZlcnkgdGltZSkgbnVtYmVyIHRoYXQgY291bGQgYmUgdXNlZCB0byBpbml0aWFsaXplCgkgICAgICogYSBwYXJhbWV0ZXIgb2YgYSBjZXJ0YWluIHR5cGUsIHBvc3NpYmx5IHdpdGggbG93ZXIgYW5kIHVwcGVyIGJvdW5kcy4KCSAgICAgKiBUaGUgcG9zc2lsZSB0eXBlcyBhcmUgInJlYWwiLCAiaW50IiwgYW5kICJiaW5hcnkiLgoJICAgICAqLwoJICAgIHZhciBwYXJhbV9pbml0X2ZpeGVkID0gZnVuY3Rpb24gKHR5cGUsIGxvd2VyLCB1cHBlcikgewoJICAgICAgaWYgKGxvd2VyID4gdXBwZXIpIHsKCSAgICAgICAgdGhyb3cgIkNhbiBub3QgaW5pdGlhbGl6ZSBwYXJhbWV0ZXIgd2hlcmUgbG93ZXIgYm91bmQgPiB1cHBlciBib3VuZCI7CgkgICAgICB9CgkgICAgICBpZiAodHlwZSA9PT0gInJlYWwiKSB7CgkgICAgICAgIGlmIChsb3dlciA9PT0gLUluZmluaXR5ICYmIHVwcGVyID09PSBJbmZpbml0eSkgewoJICAgICAgICAgIHJldHVybiAwLjU7CgkgICAgICAgIH0gZWxzZSBpZiAobG93ZXIgPT09IC1JbmZpbml0eSkgewoJICAgICAgICAgIHJldHVybiB1cHBlciAtIDAuNTsKCSAgICAgICAgfSBlbHNlIGlmICh1cHBlciA9PT0gSW5maW5pdHkpIHsKCSAgICAgICAgICByZXR1cm4gbG93ZXIgKyAwLjU7CgkgICAgICAgIH0gZWxzZSBpZiAobG93ZXIgPD0gdXBwZXIpIHsKCSAgICAgICAgICByZXR1cm4gKGxvd2VyICsgdXBwZXIpIC8gMjsKCSAgICAgICAgfQoJICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAiaW50IikgewoJICAgICAgICBpZiAobG93ZXIgPT09IC1JbmZpbml0eSAmJiB1cHBlciA9PT0gSW5maW5pdHkpIHsKCSAgICAgICAgICByZXR1cm4gMTsKCSAgICAgICAgfSBlbHNlIGlmIChsb3dlciA9PT0gLUluZmluaXR5KSB7CgkgICAgICAgICAgcmV0dXJuIHVwcGVyIC0gMTsKCSAgICAgICAgfSBlbHNlIGlmICh1cHBlciA9PT0gSW5maW5pdHkpIHsKCSAgICAgICAgICByZXR1cm4gbG93ZXIgKyAxOwoJICAgICAgICB9IGVsc2UgaWYgKGxvd2VyIDw9IHVwcGVyKSB7CgkgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKGxvd2VyICsgdXBwZXIpIC8gMik7CgkgICAgICAgIH0KCSAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gImJpbmFyeSIpIHsKCSAgICAgICAgcmV0dXJuIDE7CgkgICAgICB9CgkgICAgICB0aHJvdyAiQ291bGQgbm90IGluaXRpYWxpemUgcGFyYW1ldGVyIG9mIHR5cGUgIiArIHR5cGUgKyAiWyIgKyBsb3dlciArICIsICIgKyB1cHBlciArICJdIjsKCSAgICB9OwoKCSAgICAvKioKCSAgICAgKiBDb21wbGV0ZXMgcGFyYW1zX3RvX2NvbXBsZXRlLCBhbiBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXIgZGVzY3JpcHRpb25zLCAKCSAgICAgKiBhbmQgaW5pdGlhbGl6ZXMgbm9uLWluaXRpYWxpemVkIHBhcmFtZXRlcnMuIFRoaXMgbW9kaWZpZWQgdmVyc2lvbiBvZgoJICAgICAqIHBhcmFtc190b19jb21wbGV0ZSBpcyByZXR1cm5lZCBhcyBhIGRlZXAgY29weSBhbmQgbm90IG1vZGlmaWVkIGluIHBsYWNlLgoJICAgICAqIEluaXRpYWxpemF0aW9uIGlzIGRvbmUgYnkgc3VwcGx5aW5nIGEgcGFyYW1faW5pdCBmdW5jdGlvbiB3aXRoIHNpZ25hdHVyZQoJICAgICAqIGZ1bmN0aW9uKHR5cGUsIGxvd2VyLCB1cHBlcikgdGhhdCBzaG91bGQgcmV0dXJuIGEgc2luZ2xlIG51bWJlciAKCSAgICAgKiAobGlrZSBwYXJhbV9pbml0X2ZpeGVkLCBmb3IgZXhhbXBsZSkuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKiB2YXIgcGFyYW1zID0geyAibXUiOiB7InR5cGUiOiAicmVhbCJ9IH0KCSAgICAgKiBwYXJhbXMgPSBjb21wbGV0ZV9wYXJhbXMocGFyYW1zKTsKCSAgICAgKiAvLyBwYXJhbXMgc2hvdWxkIG5vdyBiZToKCSAgICAgKiAvLyAgeyJtdSI6IHsgInR5cGUiOiAicmVhbCIsICJkaW0iOiBbMV0sICJ1cHBlciI6IEluZmluaXR5LAoJICAgICAqIC8vICAgICAgICAgICAibG93ZXIiOiAtSW5maW5pdHksICJpbml0IjogMC41IH19CgkgICAgICovCgkgICAgdmFyIGNvbXBsZXRlX3BhcmFtcyA9IGZ1bmN0aW9uIChwYXJhbXNfdG9fY29tcGxldGUsIHBhcmFtX2luaXQpIHsKCSAgICAgIHZhciBwYXJhbXMgPSBkZWVwX2Nsb25lKHBhcmFtc190b19jb21wbGV0ZSk7CgkgICAgICBmb3IgKHZhciBwYXJhbV9uYW1lIGluIHBhcmFtcykgewoJICAgICAgICBpZiAoIXBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbV9uYW1lKSkgY29udGludWU7CgkgICAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1twYXJhbV9uYW1lXTsKCSAgICAgICAgaWYgKCFwYXJhbS5oYXNPd25Qcm9wZXJ0eSgidHlwZSIpKSB7CgkgICAgICAgICAgcGFyYW0udHlwZSA9ICJyZWFsIjsKCSAgICAgICAgfQoJICAgICAgICBpZiAoIXBhcmFtLmhhc093blByb3BlcnR5KCJkaW0iKSkgewoJICAgICAgICAgIHBhcmFtLmRpbSA9IFsxXTsKCSAgICAgICAgfQoJICAgICAgICBpZiAoaXNfbnVtYmVyKHBhcmFtLmRpbSkpIHsKCSAgICAgICAgICBwYXJhbS5kaW0gPSBbcGFyYW0uZGltXTsKCSAgICAgICAgfQoJICAgICAgICBpZiAocGFyYW0udHlwZSA9PSAiYmluYXJ5IikgewoJICAgICAgICAgIHBhcmFtLnVwcGVyID0gMTsKCSAgICAgICAgICBwYXJhbS5sb3dlciA9IDA7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKCFwYXJhbS5oYXNPd25Qcm9wZXJ0eSgidXBwZXIiKSkgewoJICAgICAgICAgIHBhcmFtLnVwcGVyID0gSW5maW5pdHk7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKCFwYXJhbS5oYXNPd25Qcm9wZXJ0eSgibG93ZXIiKSkgewoJICAgICAgICAgIHBhcmFtLmxvd2VyID0gLUluZmluaXR5OwoJICAgICAgICB9CgkgICAgICAgIGlmIChwYXJhbS5oYXNPd25Qcm9wZXJ0eSgiaW5pdCIpKSB7CgkgICAgICAgICAgLy8gSWYgdGhpcyBpcyBqdXN0IGEgbnVtYmVyIG9yIGEgbmVzdGVkIGFycmF5IHdlIGxlYXZlIGl0IGFsb25lLCBidXQgaWYuLi4KCSAgICAgICAgICBpZiAoYXJyYXlfZXF1YWwocGFyYW0uZGltLCBbMV0pICYmIHR5cGVvZiBwYXJhbS5pbml0ID09PSAiZnVuY3Rpb24iKSB7CgkgICAgICAgICAgICAvLyBwYXJhbS5pbml0IGlzIGEgZnVuY3Rpb24sIHVzZSB0aGF0IHRvIGluaXRpYWxpemUgdGhlIHBhcmFtZXRlci4KCSAgICAgICAgICAgIHBhcmFtLmluaXQgPSBwYXJhbS5pbml0KCk7CgkgICAgICAgICAgfSBlbHNlIGlmICghYXJyYXlfZXF1YWwocGFyYW0uZGltLCBbMV0pICYmICFBcnJheS5pc0FycmF5KHBhcmFtLmluaXQpKSB7CgkgICAgICAgICAgICAvLyBXZSBoYXZlIGEgbXVsdGlkaW1lbnNpb25hbCBwYXJhbWV0ZXIgd2hlcmUgdGhlIHBhcmFtLmluaXQgZXhpc3QgYnV0CgkgICAgICAgICAgICAvLyBpcyBub3QgYW4gYXJyYXkuIFRoZW4gYXNzdW1lIGl0IGlzIGEgbnVtYmVyIG9yIGEgZnVuY3Rpb24gYW5kIHVzZQoJICAgICAgICAgICAgLy8gaXQgdG8gaW5pdGlhbGl6ZSB0aGUgcGFyYW1ldGVyLgoJICAgICAgICAgICAgcGFyYW0uaW5pdCA9IGNyZWF0ZV9hcnJheShwYXJhbS5kaW0sIHBhcmFtLmluaXQpOwoJICAgICAgICAgIH0KCSAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAvLyBXZSB1c2UgdGhlIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCgkgICAgICAgICAgaWYgKGFycmF5X2VxdWFsKHBhcmFtLmRpbSwgWzFdKSkgewoJICAgICAgICAgICAgcGFyYW0uaW5pdCA9IHBhcmFtX2luaXQocGFyYW0udHlwZSwgcGFyYW0ubG93ZXIsIHBhcmFtLnVwcGVyKTsKCSAgICAgICAgICB9IGVsc2UgewoJICAgICAgICAgICAgcGFyYW0uaW5pdCA9IGNyZWF0ZV9hcnJheShwYXJhbS5kaW0sIGZ1bmN0aW9uICgpIHsKCSAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtX2luaXQocGFyYW0udHlwZSwgcGFyYW0ubG93ZXIsIHBhcmFtLnVwcGVyKTsKCSAgICAgICAgICAgIH0pOwoJICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHBhcmFtczsKCSAgICB9OwoKCSAgICAvLy8vLy8vLy8vIFN0ZXBwZXIgRnVuY3Rpb25zIC8vLy8vLy8vLy8vCgkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCSAgICAvKioKCSAgICAgKiBAaW50ZXJmYWNlCgkgICAgICogQSBTdGVwcGVyIGlzIGFuIG9iamVjdCByZXNwb25zaWJsZSBmb3IgcHVzaGluZyBhcm91bmQgb25lCgkgICAgICogb3IgbW9yZSBwYXJhbWV0ZXIgdmFsdWVzIGluIGEgc3RhdGUgYWNjb3JkaW5nIHRvIHRoZSBkaXN0cmlidXRpb24KCSAgICAgKiBkZWZpbmVkIGJ5IHRoZSBsb2cgcG9zdGVyaW9yLiBUaGlzIGRlZmluZXMgdGhlIFN0ZXBwZXIgImludGVyZmFjZSIsCgkgICAgICogd2hlcmUgImludGVyZmFjZSIgbWVhbnMgdGhhdCBTdGVwcGVyIGRlZmluZXMgYSBjbGFzcyB0aGF0IGlzIG5ldmVyCgkgICAgICogbWVhbnQgdG8gYmUgaW5zdGFudGlhdGVkLCBidXQganVzdCB0byBiZSBzdWJjbGFzc2VkIGJ5IHNwZWNpYWxpemVkCgkgICAgICogc3RlcHBlciBmdW5jdGlvbnMuCgkgICAgICogQGludGVyZmFjZQoJICAgICAqIEBwYXJhbSBwYXJhbXMgLSBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMsIGZvciBleGFtcGxlOgoJICAgICAqICAgeyJtdSI6IHsgInR5cGUiOiAicmVhbCIsICJkaW0iOiBbMV0sICJ1cHBlciI6IEluZmluaXR5LCAKCSAgICAgKiAgICJsb3dlciI6IC1JbmZpbml0eSwgImluaXQiOiAwLjUgfX0KCSAgICAgKiAgIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlICJjb21wbGV0ZSIsIHRoYXQgaXMsCgkgICAgICogICBzcGVjaWZ5aW5nIGFsbCByZWxldmFudCBhdHRyaWJ1dGVzIHN1Y2ggYXMgZGltLCBsb3dlciBhbmQgdXBwZXIuCgkgICAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzIGluIHBhcmFtcwoJICAgICAqICAgKGFuZCBwb3NzaWJseSBtb3JlKS4gVGhlIHBhcmFtZXRlciBuYW1lcyBhcmUgZ2l2ZW4gYXMga2V5cyBhbmQgdGhlIHN0YXRlcwoJICAgICAqICAgYXMgc2NhbGFycyBvciwgcG9zc2libHkgbmVzdGVkLCBhcnJheXMuIEZvciBleGFtcGxlOgoJICAgICAqICAge211OiAxMCwgc2lnbWE6IDUsIGJldGE6IFsxLCAyLjVdfQoJICAgICAqIEBwYXJhbSBsb2dfcG9zdCAtIEEgZnVuY3Rpb24gKnRha2luZyBubyBwYXJhbWV0ZXJzKiB0aGF0IHJldHVybnMgdGhlCgkgICAgICogICBsb2cgZGVuc2l0eSB0aGF0IGRlcGVuZHMgb24gdGhlIHN0YXRlLiBUaGF0IGlzLCB0aGUgdmFsdWUgb2YgbG9nX3Bvc3QKCSAgICAgKiAgIHNob3VsZCBjaGFuZ2UgaWYgdGhlIHRoZSB2YWx1ZXMgaW4gc3RhdGUgYXJlIGNoYW5nZWQuCgkgICAgCgkgICAgICovCgkgICAgdmFyIFN0ZXBwZXIgPSBmdW5jdGlvbiAocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QpIHsKCSAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwoJICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOwoJICAgICAgdGhpcy5sb2dfcG9zdCA9IGxvZ19wb3N0OwoJICAgIH07CgoJICAgIC8qKgoJICAgICAqIFRha2VzIGEgc3RlcCBpbiB0aGUgcGFyYW1ldGVyIHNwYWNlLiBTaG91bGQgcmV0dXJuIHRoZSBuZXcgc3RhdGUsCgkgICAgICogYnV0IGlzIG1haW5seSBjYWxsZWQgZm9yIGl0J3Mgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIGEgY2hhbmdlIGluIHRoZQoJICAgICAqIHN0YXRlIG9iamVjdC4KCSAgICAgKi8KCSAgICBTdGVwcGVyLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKCkgewoJICAgICAgdGhyb3cgIkV2ZXJ5IFN0ZXBwZXIgbmVlZCB0byBpbXBsZW1lbnQgc3RlcCgpIjsKCSAgICB9OwoKCSAgICAvKioKCSAgICAgKiBJZiBpbXBsZW1lbnRlZCwgbWFrZXMgdGhlIHN0ZXBwZXIgYWRhcHQgd2hpbGUgc3RlcHBpbmcuCgkgICAgICovCgkgICAgU3RlcHBlci5wcm90b3R5cGUuc3RhcnRfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIC8vIE9wdGlvbmFsLCBzb21lIHN0ZXBwZXJzIG1pZ2h0IG5vdCBiZSBhZGFwdGl2ZS4gKi8gCgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogSWYgaW1wbGVtZW50ZWQsIG1ha2VzIHRoZSBzdGVwcGVyIGNlYXNlIGFkYXB0aW5nIHdoaWxlIHN0ZXBwaW5nLgoJICAgICAqLwoJICAgIFN0ZXBwZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIC8vIE9wdGlvbmFsLCBzb21lIHN0ZXBwZXJzIG1pZ2h0IG5vdCBiZSBhZGFwdGl2ZS4gKi8gCgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmcgaW5mbyByZWdhcmRpbmcgdGhlIHN0ZXBwZXIuCgkgICAgICovCgkgICAgU3RlcHBlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGggaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHN0ZXBwZXIuCgkgICAgICByZXR1cm4ge307CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogQGNsYXNzCgkgICAgICogQGltcGxlbWVudHMge1N0ZXBwZXJ9CgkgICAgICogQ29uc3RydWN0b3IgZm9yIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIG1ldHJvcG9saXMgc3RlcCBpbgoJICAgICAqIHRoZSBBZGFwdGl2ZSBNZXRyb3BvbGlzLVdpdGhpbi1HaWJicyBhbGdvcml0aG0gaW4gIkV4YW1wbGVzIG9mIEFkYXB0aXZlIE1DTUMiCgkgICAgICogYnkgUm9iZXJ0cyBhbmQgUm9zZW50aGFsICgyMDA4KS4KCSAgICAgKiBAcGFyYW0gcGFyYW1zIC0gQW4gb2JqZWN0IHdpdGggYSBzaW5nbGUgcGFyYW1ldGVyIGRlZmluaXRpb24uCgkgICAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzLgoJICAgICAqIEBwYXJhbSBsb2dfcG9zdCAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBsb2cgZGVuc2l0eSB0aGF0IGRlcGVuZHMgb24gdGhlIHN0YXRlLiAKCSAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMgdG8gdGhlIHN0ZXBwZXIuCgkgICAgICogQHBhcmFtIGdlbmVyYXRlX3Byb3Bvc2FsIC0gYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwcm9wb3NhbCAoYXMgYSBudW1iZXIpCgkgICAgICogd2l0aCBzaWduYXR1cmUgZnVuY3Rpb24ocGFyYW1fc3RhdGUsIGxvZ19zY2FsZSkgd2hlcmUgcGFyYW1fc3RhdGUgaXMgYQoJICAgICAqIG51bWJlciBhbmQgbG9nX3NjYWxlIGRlZmluZXMgdGhlIHNjYWxlIG9mIHRoZSBwcm9wb3NhbCBzb21laG93LgoJICAgICovCgkgICAgdmFyIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyID0gZnVuY3Rpb24gKHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zLCBnZW5lcmF0ZV9wcm9wb3NhbCkgewoJICAgICAgU3RlcHBlci5jYWxsKHRoaXMsIHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0KTsKCSAgICAgIHZhciBwYXJhbV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTsKCSAgICAgIGlmIChwYXJhbV9uYW1lcy5sZW5ndGggIT0gMSkgewoJICAgICAgICB0aHJvdyAiT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIgY2FuIG9ubHkgaGFuZGxlIG9uZSBwYXJhbWV0ZXIuIjsKCSAgICAgIH0KCSAgICAgIHRoaXMucGFyYW1fbmFtZSA9IHBhcmFtX25hbWVzWzBdOwoJICAgICAgdmFyIHBhcmFtID0gdGhpcy5wYXJhbXNbdGhpcy5wYXJhbV9uYW1lXTsKCSAgICAgIGlmICghYXJyYXlfZXF1YWwocGFyYW0uZGltLCBbMV0pKSB7CgkgICAgICAgIHRocm93ICJPbmVkaW1NZXRyb3BvbGlzU3RlcHBlciBjYW4gb25seSBoYW5kbGUgb25lIG9uZS1kaW1lbnNpb25hbCBwYXJhbWV0ZXIuIjsKCSAgICAgIH0KCSAgICAgIHRoaXMubG93ZXIgPSBwYXJhbS5sb3dlcjsKCSAgICAgIHRoaXMudXBwZXIgPSBwYXJhbS51cHBlcjsKCSAgICAgIHRoaXMucHJvcF9sb2dfc2NhbGUgPSBnZXRfb3B0aW9uKCJwcm9wX2xvZ19zY2FsZSIsIG9wdGlvbnMsIDApOwoJICAgICAgdGhpcy5iYXRjaF9zaXplID0gZ2V0X29wdGlvbigiYmF0Y2hfc2l6ZSIsIG9wdGlvbnMsIDUwKTsKCSAgICAgIHRoaXMubWF4X2FkYXB0YXRpb24gPSBnZXRfb3B0aW9uKCJtYXhfYWRhcHRhdGlvbiIsIG9wdGlvbnMsIDAuMzMpOwoJICAgICAgdGhpcy5pbml0aWFsX2FkYXB0YXRpb24gPSBnZXRfb3B0aW9uKCJpbml0aWFsX2FkYXB0YXRpb24iLCBvcHRpb25zLCAxLjApOwoJICAgICAgdGhpcy50YXJnZXRfYWNjZXB0X3JhdGUgPSBnZXRfb3B0aW9uKCJ0YXJnZXRfYWNjZXB0X3JhdGUiLCBvcHRpb25zLCAwLjQ0KTsKCSAgICAgIHRoaXMuaXNfYWRhcHRpbmcgPSBnZXRfb3B0aW9uKCJpc19hZGFwdGluZyIsIG9wdGlvbnMsIHRydWUpOwoJICAgICAgdGhpcy5nZW5lcmF0ZV9wcm9wb3NhbCA9IGdlbmVyYXRlX3Byb3Bvc2FsOwoJICAgICAgdGhpcy5hY2NlcHRhbmNlX2NvdW50ID0gMDsKCSAgICAgIHRoaXMuYmF0Y2hfY291bnQgPSAwOwoJICAgICAgdGhpcy5pdGVyYXRpb25zX3NpbmNlX2FkYXB0aW9uID0gMDsKCSAgICB9OwoJICAgIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RlcHBlci5wcm90b3R5cGUpOwoJICAgIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyOwoJICAgIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKCkgewoJICAgICAgdmFyIHBhcmFtX3N0YXRlID0gdGhpcy5zdGF0ZVt0aGlzLnBhcmFtX25hbWVdOwoJICAgICAgdmFyIHBhcmFtX3Byb3Bvc2FsID0gdGhpcy5nZW5lcmF0ZV9wcm9wb3NhbChwYXJhbV9zdGF0ZSwgdGhpcy5wcm9wX2xvZ19zY2FsZSk7CgkgICAgICBpZiAocGFyYW1fcHJvcG9zYWwgPCB0aGlzLmxvd2VyIHx8IHBhcmFtX3Byb3Bvc2FsID4gdGhpcy51cHBlcikgOyBlbHNlIHsKCSAgICAgICAgLy8gbWFrZSBhIE1ldHJvcG9saXMgc3RlcAoJICAgICAgICB2YXIgY3Vycl9sb2dfZGVucyA9IHRoaXMubG9nX3Bvc3QoKTsKCSAgICAgICAgdGhpcy5zdGF0ZVt0aGlzLnBhcmFtX25hbWVdID0gcGFyYW1fcHJvcG9zYWw7CgkgICAgICAgIHZhciBwcm9wX2xvZ19kZW5zID0gdGhpcy5sb2dfcG9zdCgpOwoJICAgICAgICB2YXIgYWNjZXB0X3Byb2IgPSBNYXRoLmV4cChwcm9wX2xvZ19kZW5zIC0gY3Vycl9sb2dfZGVucyk7CgkgICAgICAgIGlmIChhY2NlcHRfcHJvYiA+IE1hdGgucmFuZG9tKCkpIHsKCSAgICAgICAgICAvLyBXZSBkbyBub3RoaW5nIGFzIHRoZSBzdGF0ZSBvZiBwYXJhbSBoYXMgYWxyZWFkeSBiZWVuIGNoYW5nZWQgdG8gdGhlIHByb3Bvc2FsCgkgICAgICAgICAgaWYgKHRoaXMuaXNfYWRhcHRpbmcpIHRoaXMuYWNjZXB0YW5jZV9jb3VudCsrOwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIC8vIHJldmVydCBzdGF0ZSBiYWNrIHRvIHRoZSBvbGQgc3RhdGUgb2YgcGFyYW0KCSAgICAgICAgICB0aGlzLnN0YXRlW3RoaXMucGFyYW1fbmFtZV0gPSBwYXJhbV9zdGF0ZTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgaWYgKHRoaXMuaXNfYWRhcHRpbmcpIHsKCSAgICAgICAgdGhpcy5pdGVyYXRpb25zX3NpbmNlX2FkYXB0aW9uKys7CgkgICAgICAgIGlmICh0aGlzLml0ZXJhdGlvbnNfc2luY2VfYWRhcHRpb24gPj0gdGhpcy5iYXRjaF9zaXplKSB7CgkgICAgICAgICAgLy8gdGhlbiBhZGFwdAoJICAgICAgICAgIHRoaXMuYmF0Y2hfY291bnQrKzsKCSAgICAgICAgICB2YXIgbG9nX3NkX2FkanVzdG1lbnQgPSBNYXRoLm1pbih0aGlzLm1heF9hZGFwdGF0aW9uLCB0aGlzLmluaXRpYWxfYWRhcHRhdGlvbiAvIE1hdGguc3FydCh0aGlzLmJhdGNoX2NvdW50KSk7CgkgICAgICAgICAgaWYgKHRoaXMuYWNjZXB0YW5jZV9jb3VudCAvIHRoaXMuYmF0Y2hfc2l6ZSA+IHRoaXMudGFyZ2V0X2FjY2VwdF9yYXRlKSB7CgkgICAgICAgICAgICB0aGlzLnByb3BfbG9nX3NjYWxlICs9IGxvZ19zZF9hZGp1c3RtZW50OwoJICAgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICB0aGlzLnByb3BfbG9nX3NjYWxlIC09IGxvZ19zZF9hZGp1c3RtZW50OwoJICAgICAgICAgIH0KCSAgICAgICAgICB0aGlzLmFjY2VwdGFuY2VfY291bnQgPSAwOwoJICAgICAgICAgIHRoaXMuaXRlcmF0aW9uc19zaW5jZV9hZGFwdGlvbiA9IDA7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiB0aGlzLnN0YXRlW3RoaXMucGFyYW1fbmFtZV07CgkgICAgfTsKCSAgICBPbmVkaW1NZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuc3RhcnRfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIHRoaXMuaXNfYWRhcHRpbmcgPSB0cnVlOwoJICAgIH07CgkgICAgT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIHRoaXMuaXNfYWRhcHRpbmcgPSBmYWxzZTsKCSAgICB9OwoJICAgIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24gKCkgewoJICAgICAgcmV0dXJuIHsKCSAgICAgICAgcHJvcF9sb2dfc2NhbGU6IHRoaXMucHJvcF9sb2dfc2NhbGUsCgkgICAgICAgIGlzX2FkYXB0aW5nOiB0aGlzLmlzX2FkYXB0aW5nLAoJICAgICAgICBhY2NlcHRhbmNlX2NvdW50OiB0aGlzLmFjY2VwdGFuY2VfY291bnQsCgkgICAgICAgIGl0ZXJhdGlvbnNfc2luY2VfYWRhcHRpb246IHRoaXMuaXRlcmF0aW9uc19zaW5jZV9hZGFwdGlvbiwKCSAgICAgICAgYmF0Y2hfY291bnQ6IHRoaXMuYmF0Y2hfY291bnQKCSAgICAgIH07CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogRnVuY3Rpb24gcmV0dXJuaW5nIGEgTm9ybWFsIHByb3Bvc2FsLgoJICAgICAqLwoJICAgIHZhciBub3JtYWxfcHJvcG9zYWwgPSBmdW5jdGlvbiAocGFyYW1fc3RhdGUsIHByb3BfbG9nX3NjYWxlKSB7CgkgICAgICByZXR1cm4gcm5vcm0ocGFyYW1fc3RhdGUsIE1hdGguZXhwKHByb3BfbG9nX3NjYWxlKSk7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogQGNsYXNzCgkgICAgICogQGF1Z21lbnRzIHtPbmVkaW1NZXRyb3BvbGlzU3RlcHBlcn0KCSAgICAgKiBBICJzdWJjbGFzcyIgb2YgT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIgbWFraW5nIGNvbnRpbm91cyBOb3JtYWwgcHJvcG9zYWxzLgoJICAgICAqLwoJICAgIHZhciBSZWFsTWV0cm9wb2xpc1N0ZXBwZXIgPSBmdW5jdGlvbiAocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMpIHsKCSAgICAgIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLmNhbGwodGhpcywgcGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMsIG5vcm1hbF9wcm9wb3NhbCk7CgkgICAgfTsKCSAgICBSZWFsTWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPbmVkaW1NZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUpOwoJICAgIFJlYWxNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWFsTWV0cm9wb2xpc1N0ZXBwZXI7CgoJICAgIC8qKgoJICAgICAqIEZ1bmN0aW9uIHJldHVybmluZyBhIGRpc2NyZXRpemVkIE5vcm1hbCBwcm9wb3NhbC4KCSAgICAgKi8KCSAgICB2YXIgZGlzY3JldGVfbm9ybWFsX3Byb3Bvc2FsID0gZnVuY3Rpb24gKHBhcmFtX3N0YXRlLCBwcm9wX2xvZ19zY2FsZSkgewoJICAgICAgcmV0dXJuIE1hdGgucm91bmQocm5vcm0ocGFyYW1fc3RhdGUsIE1hdGguZXhwKHByb3BfbG9nX3NjYWxlKSkpOwoJICAgIH07CgoJICAgIC8qKgoJICAgICogQGNsYXNzCgkgICAgKiBAYXVnbWVudHMge09uZWRpbU1ldHJvcG9saXNTdGVwcGVyfQoJICAgICogQSAic3ViY2xhc3MiIG9mIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyIG1ha2luZyBkaXNjcmV0aXplZCBOb3JtYWwgcHJvcG9zYWxzLgoJICAgICovCgkgICAgdmFyIEludE1ldHJvcG9saXNTdGVwcGVyID0gZnVuY3Rpb24gKHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zKSB7CgkgICAgICBPbmVkaW1NZXRyb3BvbGlzU3RlcHBlci5jYWxsKHRoaXMsIHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zLCBkaXNjcmV0ZV9ub3JtYWxfcHJvcG9zYWwpOwoJICAgIH07CgkgICAgSW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPbmVkaW1NZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUpOwoJICAgIEludE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludE1ldHJvcG9saXNTdGVwcGVyOwoKCSAgICAvKioKCSAgICAgKiBAY2xhc3MKCSAgICAgKiBAaW1wbGVtZW50cyB7U3RlcHBlcn0KCSAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgbWV0cm9wb2xpcyBzdGVwIGluCgkgICAgICogdGhlIEFkYXB0aXZlIE1ldHJvcG9saXMtV2l0aGluLUdpYmJzIGFsZ29yaXRobSBpbiAiRXhhbXBsZXMgb2YgQWRhcHRpdmUgTUNNQyIKCSAgICAgKiBieSBSb2JlcnRzIGFuZCBSb3NlbnRoYWwgKDIwMDgpIGZvciBwb3NzaWJseSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5cy4gVGhhdAoJICAgICAqIGlzLCBpbnN0ZWFkIG9mIGp1c3QgdGFraW5nIGEgc3RlcCBmb3IgYSBvbmUtZGltZW5zaW9uYWwgcGFyYW1ldGVyIGxpa2UgCgkgICAgICogT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIsIHRoaXMgU3RlcHBlciBpcyByZXNwb25zaWJsZSBmb3IgdGFraW5nIHN0ZXBzIAoJICAgICAqIGZvciBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuIEl0J3Mgc3RpbGwgcHJldHR5IGR1bWIgYW5kIGp1c3QgdGFrZXMKCSAgICAgKiBvbmUtZGltZW5zaW9uYWwgc3RlcHMgZm9yIGVhY2ggcGFyYW1ldGVyIGNvbXBvbmVudCwgdGhvdWdoLgoJICAgICAqIEBwYXJhbSBwYXJhbXMgLSBBbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbiBmb3IgYSAKCSAgICAgKiAgIG11bHRpZGltZW5zaW9uYWwgcGFyYW1ldGVyLgoJICAgICAqIEBwYXJhbSBzdGF0ZSAtIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycy4KCSAgICAgKiBAcGFyYW0gbG9nX3Bvc3QgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbG9nIGRlbnNpdHkgdGhhdCBkZXBlbmRzIG9uIHRoZSBzdGF0ZS4gCgkgICAgICogQHBhcmFtIG9wdGlvbnMgLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zIHRvIHRoZSBzdGVwcGVyLgoJICAgICAqIEBwYXJhbSBTdWJTdGVwcGVyIC0gYSBjb25zdHJ1Y3RvciBmb3IgdGhlIHR5cGUgb2Ygb25lIGRpbWVuc2lvbmFsIFN0ZXBwZXIgdG8gYXBwbHkgb24KCSAgICAgKiAgIGFsbCB0aGUgY29tcG9uZW50cyBvZiB0aGUgbXVsdGlkaW1lbnNpb25hbCBwYXJhbWV0ZXIuCgkgICAgKi8KCSAgICB2YXIgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciA9IGZ1bmN0aW9uIChwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucywgU3ViU3RlcHBlcikgewoJICAgICAgU3RlcHBlci5jYWxsKHRoaXMsIHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0KTsKCSAgICAgIHZhciBwYXJhbV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTsKCSAgICAgIGlmIChwYXJhbV9uYW1lcy5sZW5ndGggIT0gMSkgewoJICAgICAgICB0aHJvdyAiTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciBjYW4ndCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIuIjsKCSAgICAgIH0KCSAgICAgIHRoaXMucGFyYW1fbmFtZSA9IHBhcmFtX25hbWVzWzBdOwoJICAgICAgdmFyIHBhcmFtID0gdGhpcy5wYXJhbXNbdGhpcy5wYXJhbV9uYW1lXTsKCSAgICAgIHRoaXMubG93ZXIgPSBwYXJhbS5sb3dlcjsKCSAgICAgIHRoaXMudXBwZXIgPSBwYXJhbS51cHBlcjsKCSAgICAgIHRoaXMuZGltID0gcGFyYW0uZGltOwoJICAgICAgdGhpcy5wcm9wX2xvZ19zY2FsZSA9IGdldF9tdWx0aWRpbV9vcHRpb24oInByb3BfbG9nX3NjYWxlIiwgb3B0aW9ucywgdGhpcy5kaW0sIDApOwoJICAgICAgdGhpcy5iYXRjaF9zaXplID0gZ2V0X211bHRpZGltX29wdGlvbigiYmF0Y2hfc2l6ZSIsIG9wdGlvbnMsIHRoaXMuZGltLCA1MCk7CgkgICAgICB0aGlzLm1heF9hZGFwdGF0aW9uID0gZ2V0X211bHRpZGltX29wdGlvbigibWF4X2FkYXB0YXRpb24iLCBvcHRpb25zLCB0aGlzLmRpbSwgMC4zMyk7CgkgICAgICB0aGlzLmluaXRpYWxfYWRhcHRhdGlvbiA9IGdldF9tdWx0aWRpbV9vcHRpb24oImluaXRpYWxfYWRhcHRhdGlvbiIsIG9wdGlvbnMsIHRoaXMuZGltLCAxLjApOwoJICAgICAgdGhpcy50YXJnZXRfYWNjZXB0X3JhdGUgPSBnZXRfbXVsdGlkaW1fb3B0aW9uKCJ0YXJnZXRfYWNjZXB0X3JhdGUiLCBvcHRpb25zLCB0aGlzLmRpbSwgMC40NCk7CgkgICAgICB0aGlzLmlzX2FkYXB0aW5nID0gZ2V0X211bHRpZGltX29wdGlvbigiaXNfYWRhcHRpbmciLCBvcHRpb25zLCB0aGlzLmRpbSwgdHJ1ZSk7CgoJICAgICAgLy8gVGhpcyBoYWNrIGJlbG93IGlzIGEgcmVjdXJzaXZlIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBhcnJheSBvZiAKCSAgICAgIC8vIG9uZSBkaW1lbnNpb25hbCBzdGVwcGVycyBhY2NvcmRpbmcgdG8gZGltLgoJICAgICAgdmFyIGNyZWF0ZV9zdWJzdGVwcGVycyA9IGZ1bmN0aW9uIChkaW0sIHN1YnN0YXRlLCBsb2dfcG9zdCwgcHJvcF9sb2dfc2NhbGUsIGJhdGNoX3NpemUsIG1heF9hZGFwdGF0aW9uLCBpbml0aWFsX2FkYXB0YXRpb24sIHRhcmdldF9hY2NlcHRfcmF0ZSwgaXNfYWRhcHRpbmcpIHsKCSAgICAgICAgdmFyIHN1YnN0ZXBwZXJzID0gW107CgkgICAgICAgIGlmIChkaW0ubGVuZ3RoID09PSAxKSB7CgkgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaW1bMF07IGkrKykgewoJICAgICAgICAgICAgdmFyIHN1Ym9wdGlvbnMgPSB7CgkgICAgICAgICAgICAgIHByb3BfbG9nX3NjYWxlOiBwcm9wX2xvZ19zY2FsZVtpXSwKCSAgICAgICAgICAgICAgYmF0Y2hfc2l6ZTogYmF0Y2hfc2l6ZVtpXSwKCSAgICAgICAgICAgICAgbWF4X2FkYXB0YXRpb246IG1heF9hZGFwdGF0aW9uW2ldLAoJICAgICAgICAgICAgICBpbml0aWFsX2FkYXB0YXRpb246IGluaXRpYWxfYWRhcHRhdGlvbltpXSwKCSAgICAgICAgICAgICAgdGFyZ2V0X2FjY2VwdF9yYXRlOiB0YXJnZXRfYWNjZXB0X3JhdGVbaV0sCgkgICAgICAgICAgICAgIGlzX2FkYXB0aW5nOiBpc19hZGFwdGluZ1tpXQoJICAgICAgICAgICAgfTsKCSAgICAgICAgICAgIHZhciBzdWJwYXJhbSA9IHt9OwoJICAgICAgICAgICAgc3VicGFyYW1baV0gPSBkZWVwX2Nsb25lKHBhcmFtKTsKCSAgICAgICAgICAgIHN1YnBhcmFtW2ldLmRpbSA9IFsxXTsgLy8gQXMgdGhpcyBzaG91bGQgbm93IGJlIGEgb25lLWRpbSBwYXJhbWV0ZXIKCSAgICAgICAgICAgIGRlbGV0ZSBzdWJwYXJhbVtpXS5pbml0OyAvLyBBcyBpdCBzb3VsZCBub3QgYmUgbmVlZGVkCgkgICAgICAgICAgICBzdWJzdGVwcGVyc1tpXSA9IG5ldyBTdWJTdGVwcGVyKHN1YnBhcmFtLCBzdWJzdGF0ZSwgbG9nX3Bvc3QsIHN1Ym9wdGlvbnMpOwoJICAgICAgICAgIH0KCSAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpbVswXTsgaSsrKSB7CgkgICAgICAgICAgICBzdWJzdGVwcGVyc1tpXSA9IGNyZWF0ZV9zdWJzdGVwcGVycyhkaW0uc2xpY2UoMSksIHN1YnN0YXRlW2ldLCBsb2dfcG9zdCwgcHJvcF9sb2dfc2NhbGVbaV0sIGJhdGNoX3NpemVbaV0sIG1heF9hZGFwdGF0aW9uW2ldLCBpbml0aWFsX2FkYXB0YXRpb25baV0sIHRhcmdldF9hY2NlcHRfcmF0ZVtpXSwgaXNfYWRhcHRpbmdbaV0pOwoJICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gc3Vic3RlcHBlcnM7CgkgICAgICB9OwoJICAgICAgdGhpcy5zdWJzdGVwcGVycyA9IGNyZWF0ZV9zdWJzdGVwcGVycyh0aGlzLmRpbSwgdGhpcy5zdGF0ZVt0aGlzLnBhcmFtX25hbWVdLCB0aGlzLmxvZ19wb3N0LCB0aGlzLnByb3BfbG9nX3NjYWxlLCB0aGlzLmJhdGNoX3NpemUsIHRoaXMubWF4X2FkYXB0YXRpb24sIHRoaXMuaW5pdGlhbF9hZGFwdGF0aW9uLCB0aGlzLnRhcmdldF9hY2NlcHRfcmF0ZSwgdGhpcy5pc19hZGFwdGluZyk7CgkgICAgfTsKCSAgICBNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RlcHBlci5wcm90b3R5cGUpOwoJICAgIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcjsKCSAgICBNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKCkgewoJICAgICAgLy8gR28gdGhyb3VnaCB0aGUgc3Vic3RlcHBlcnMgaW4gYSByYW5kb20gb3JkZXIgYW5kIGNhbGwgc3RlcCgpIG9uIHRoZW0uCgkgICAgICByZXR1cm4gbmVzdGVkX2FycmF5X3JhbmRvbV9hcHBseSh0aGlzLnN1YnN0ZXBwZXJzLCBmdW5jdGlvbiAoc3Vic3RlcHBlcikgewoJICAgICAgICByZXR1cm4gc3Vic3RlcHBlci5zdGVwKCk7CgkgICAgICB9KTsKCSAgICB9OwoJICAgIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLnN0YXJ0X2FkYXB0YXRpb24gPSBmdW5jdGlvbiAoKSB7CgkgICAgICBuZXN0ZWRfYXJyYXlfYXBwbHkodGhpcy5zdWJzdGVwcGVycywgZnVuY3Rpb24gKHN1YnN0ZXBwZXIpIHsKCSAgICAgICAgc3Vic3RlcHBlci5zdGFydF9hZGFwdGF0aW9uKCk7CgkgICAgICB9KTsKCSAgICB9OwoJICAgIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIG5lc3RlZF9hcnJheV9hcHBseSh0aGlzLnN1YnN0ZXBwZXJzLCBmdW5jdGlvbiAoc3Vic3RlcHBlcikgewoJICAgICAgICBzdWJzdGVwcGVyLnN0b3BfYWRhcHRhdGlvbigpOwoJICAgICAgfSk7CgkgICAgfTsKCSAgICBNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24gKCkgewoJICAgICAgcmV0dXJuIG5lc3RlZF9hcnJheV9hcHBseSh0aGlzLnN1YnN0ZXBwZXJzLCBmdW5jdGlvbiAoc3Vic3RlcHBlcikgewoJICAgICAgICByZXR1cm4gc3Vic3RlcHBlci5pbmZvKCk7CgkgICAgICB9KTsKCSAgICB9OwoKCSAgICAvKioKCSAgICAgKiBAY2xhc3MKCSAgICAgKiBAYXVnbWVudHMge011bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXJ9CgkgICAgICogQSAic3ViY2xhc3MiIG9mIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIgbWFraW5nIGNvbnRpbm91cyBOb3JtYWwgcHJvcG9zYWxzLgoJICAgICAqLwoJICAgIHZhciBNdWx0aVJlYWxDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciA9IGZ1bmN0aW9uIChwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykgewoJICAgICAgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5jYWxsKHRoaXMsIHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zLCBSZWFsTWV0cm9wb2xpc1N0ZXBwZXIpOwoJICAgIH07CgkgICAgTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSk7CgkgICAgTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXI7CgoJICAgIC8qKgoJICAgICAqIEBjbGFzcwoJICAgICAqIEBhdWdtZW50cyB7TXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcn0KCSAgICAgKiBBICJzdWJjbGFzcyIgb2YgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciBtYWtpbmcgZGlzY3JldGl6ZWQgTm9ybWFsIHByb3Bvc2Fscy4KCSAgICAgKi8KCSAgICB2YXIgTXVsdGlJbnRDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciA9IGZ1bmN0aW9uIChwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykgewoJICAgICAgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5jYWxsKHRoaXMsIHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zLCBJbnRNZXRyb3BvbGlzU3RlcHBlcik7CgkgICAgfTsKCSAgICBNdWx0aUludENvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUpOwoJICAgIE11bHRpSW50Q29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTXVsdGlJbnRDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcjsKCgkgICAgLyoqCgkgICAgICogQGNsYXNzCgkgICAgICogQGltcGxlbWVudHMge1N0ZXBwZXJ9CgkgICAgICogQ29uc3RydWN0b3IgZm9yIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgYSBzdGVwIGZvciBhIGJpbmFyeSBwYXJhbWV0ZXIuCgkgICAgICogVGhpcyBpcyBkb25lIGJ5IGV2YWx1YXRpbmcgdGhlIGxvZyBwb3N0ZXJpb3IgZm9yIGJvdGggc3RhdGVzIG9mIHRoZQoJICAgICAqIHBhcmFtZXRlciBhbmQgdGhlbiBzZWxlY3RpbmcgYSBzdGF0ZSByYW5kb21seSB3aXRoIHByb2JhYmlsaXR5IHJlbGF0aXZlIAoJICAgICAqIHRvIHRoZSBwb3N0ZXJpb3Igb2YgZWFjaCBzdGF0ZS4KCSAgICAgKiBAcGFyYW0gcGFyYW1zIC0gQW4gb2JqZWN0IHdpdGggYSBzaW5nbGUgcGFyYW1ldGVyIGRlZmluaXRpb24uCgkgICAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzLgoJICAgICAqIEBwYXJhbSBsb2dfcG9zdCAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBsb2cgZGVuc2l0eSB0aGF0IGRlcGVuZHMgb24gdGhlIHN0YXRlLiAKCSAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMgdG8gdGhlIHN0ZXBwZXIuCgkgICAgKi8KCSAgICB2YXIgQmluYXJ5U3RlcHBlciA9IGZ1bmN0aW9uIChwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykgewoJICAgICAgU3RlcHBlci5jYWxsKHRoaXMsIHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0KTsKCSAgICAgIHZhciBwYXJhbV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTsKCSAgICAgIGlmIChwYXJhbV9uYW1lcy5sZW5ndGggPT0gMSkgewoJICAgICAgICB0aGlzLnBhcmFtX25hbWUgPSBwYXJhbV9uYW1lc1swXTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHRocm93ICJCaW5hcnlTdGVwcGVyIGNhbid0IGhhbmRsZSBtb3JlIHRoYW4gb25lIHBhcmFtZXRlci4iOwoJICAgICAgfQoJICAgIH07CgkgICAgQmluYXJ5U3RlcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0ZXBwZXIucHJvdG90eXBlKTsKCSAgICBCaW5hcnlTdGVwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpbmFyeVN0ZXBwZXI7CgkgICAgQmluYXJ5U3RlcHBlci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIHRoaXMuc3RhdGVbdGhpcy5wYXJhbV9uYW1lXSA9IDA7CgkgICAgICB2YXIgemVyb19sb2dfZGVucyA9IHRoaXMubG9nX3Bvc3QoKTsKCSAgICAgIHRoaXMuc3RhdGVbdGhpcy5wYXJhbV9uYW1lXSA9IDE7CgkgICAgICB2YXIgb25lX2xvZ19kZW5zID0gdGhpcy5sb2dfcG9zdCgpOwoJICAgICAgdmFyIG1heF9sb2dfZGVucyA9IE1hdGgubWF4KHplcm9fbG9nX2RlbnMsIG9uZV9sb2dfZGVucyk7CgkgICAgICB6ZXJvX2xvZ19kZW5zIC09IG1heF9sb2dfZGVuczsKCSAgICAgIG9uZV9sb2dfZGVucyAtPSBtYXhfbG9nX2RlbnM7CgkgICAgICB2YXIgemVyb19wcm9iID0gTWF0aC5leHAoemVyb19sb2dfZGVucyAtIE1hdGgubG9nKE1hdGguZXhwKHplcm9fbG9nX2RlbnMpICsgTWF0aC5leHAob25lX2xvZ19kZW5zKSkpOwoJICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCB6ZXJvX3Byb2IpIHsKCSAgICAgICAgdGhpcy5zdGF0ZVt0aGlzLnBhcmFtX25hbWVdID0gMDsKCSAgICAgICAgcmV0dXJuIDA7CgkgICAgICB9IC8vIGVsc2Uga2VlcCB0aGUgcGFyYW0gYXQgMSAuCgkgICAgICByZXR1cm4gMTsKCSAgICB9OwoKCSAgICAvKioKCSAgICAqIEBjbGFzcwoJICAgICogQGltcGxlbWVudHMge1N0ZXBwZXJ9CgkgICAgKiBKdXN0IGxpa2UgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciB0aGlzIFN0ZXBwZXIgdGFrZXMgYSBzdGVwcyBmb3IKCSAgICAqIGEgbXVsdGlkaW1lbnNpb25hbCBwYXJhbWV0ZXIgYnkgdXBkYXRpbmcgZWFjaCBjb21wb25lbnQgaW4gdHVybi4gVGhlIGRpZmZlcmVuY2UKCSAgICAqIGlzIHRoYXQgdGhpcyBzdGVwcGVyIHdvcmtzIG9uIGJpbmFyeSBwYXJhbWV0ZXJzLgoJICAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIHBhcmFtZXRlciBkZWZpbml0aW9uIGZvciBhIAoJICAgICogICBtdWx0aWRpbWVuc2lvbmFsIHBhcmFtZXRlci4KCSAgICAqIEBwYXJhbSBzdGF0ZSAtIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycy4KCSAgICAqIEBwYXJhbSBsb2dfcG9zdCAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBsb2cgZGVuc2l0eSB0aGF0IGRlcGVuZHMgb24gdGhlIHN0YXRlLiAKCSAgICAqIEBwYXJhbSBvcHRpb25zIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucyB0byB0aGUgc3RlcHBlci4KCSAgICAqLwoJICAgIHZhciBCaW5hcnlDb21wb25lbnRTdGVwcGVyID0gZnVuY3Rpb24gKHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zKSB7CgkgICAgICBTdGVwcGVyLmNhbGwodGhpcywgcGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QpOwoJICAgICAgdmFyIHBhcmFtX25hbWVzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpOwoJICAgICAgaWYgKHBhcmFtX25hbWVzLmxlbmd0aCA9PSAxKSB7CgkgICAgICAgIHRoaXMucGFyYW1fbmFtZSA9IHBhcmFtX25hbWVzWzBdOwoJICAgICAgICB2YXIgcGFyYW0gPSB0aGlzLnBhcmFtc1t0aGlzLnBhcmFtX25hbWVdOwoJICAgICAgICB0aGlzLmRpbSA9IHBhcmFtLmRpbTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHRocm93ICJCaW5hcnlDb21wb25lbnRTdGVwcGVyIGNhbid0IGhhbmRsZSBtb3JlIHRoYW4gb25lIHBhcmFtZXRlci4iOwoJICAgICAgfQoJICAgICAgdmFyIGNyZWF0ZV9zdWJzdGVwcGVycyA9IGZ1bmN0aW9uIChkaW0sIHN1YnN0YXRlLCBsb2dfcG9zdCkgewoJICAgICAgICB2YXIgc3Vic3RlcHBlcnMgPSBbXTsKCSAgICAgICAgdmFyIGk7CgkgICAgICAgIGlmIChkaW0ubGVuZ3RoID09PSAxKSB7CgkgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRpbVswXTsgaSsrKSB7CgkgICAgICAgICAgICB2YXIgc3VicGFyYW1zID0ge307CgkgICAgICAgICAgICBzdWJwYXJhbXNbaV0gPSBwYXJhbTsKCSAgICAgICAgICAgIHN1YnN0ZXBwZXJzW2ldID0gbmV3IEJpbmFyeVN0ZXBwZXIoc3VicGFyYW1zLCBzdWJzdGF0ZSwgbG9nX3Bvc3QpOwoJICAgICAgICAgIH0KCSAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHsKCSAgICAgICAgICAgIHN1YnN0ZXBwZXJzW2ldID0gY3JlYXRlX3N1YnN0ZXBwZXJzKGRpbS5zbGljZSgxKSwgc3Vic3RhdGVbaV0sIGxvZ19wb3N0KTsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuIHN1YnN0ZXBwZXJzOwoJICAgICAgfTsKCSAgICAgIHRoaXMuc3Vic3RlcHBlcnMgPSBjcmVhdGVfc3Vic3RlcHBlcnModGhpcy5kaW0sIHRoaXMuc3RhdGVbdGhpcy5wYXJhbV9uYW1lXSwgdGhpcy5sb2dfcG9zdCk7CgkgICAgfTsKCSAgICBCaW5hcnlDb21wb25lbnRTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RlcHBlci5wcm90b3R5cGUpOwoJICAgIEJpbmFyeUNvbXBvbmVudFN0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmluYXJ5Q29tcG9uZW50U3RlcHBlcjsKCSAgICBCaW5hcnlDb21wb25lbnRTdGVwcGVyLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKCkgewoJICAgICAgLy8gR28gdGhyb3VnaCB0aGUgc3Vic3RlcHBlcnMgaW4gYSByYW5kb20gb3JkZXIgYW5kIGNhbGwgc3RlcCgpIG9uIHRoZW0uCgkgICAgICByZXR1cm4gbmVzdGVkX2FycmF5X3JhbmRvbV9hcHBseSh0aGlzLnN1YnN0ZXBwZXJzLCBmdW5jdGlvbiAoc3Vic3RlcHBlcikgewoJICAgICAgICByZXR1cm4gc3Vic3RlcHBlci5zdGVwKCk7CgkgICAgICB9KTsKCSAgICB9OwoKCSAgICAvKioKCSAgICAgKiBAY2xhc3MKCSAgICAgKiBAaW1wbGVtZW50cyB7U3RlcHBlcn0KCSAgICAgKiBUaGlzIHN0ZXBwZXIgY2FuIGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgYSBzdGVwIGZvciBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLgoJICAgICAqIEZvciByZWFsIGFuZCBpbnQgcGFyYW1ldGVycyBpdCB0YWtlcyBNZXRyb3BvbGlzIHdpdGhpbiBHaWJicyBzdGVwcywgYW5kIGZvciAKCSAgICAgKiBiaW5hcnkgcGFyYW1ldGVycyBpdCBkb2VzIGV2YWx1YXRlcyB0aGUgcG9zdGVyaW9yIGZvciBib3RoIHBhcmFtdGVyIHZhbHVlcyBhbmQKCSAgICAgKiByYW5kb21seSBjaGFuZ2VzIHRvIGEgY2VydGFpbiB2YWx1ZSBwcm9wb3J0aW9uYWxseSB0byB0aGF0IHZhbHVlJ3MgcG9zdGVyaW9yCgkgICAgICogKHRoaXMgaXMgYWxzbyBkb25lIGZvciBlYWNoIHBhcmFtZXRlciwgc28gYWxzbyBhICogd2l0aGluIEdpYmJzIGFwcHJvYWNoKS4KCSAgICAgKiBUaGlzIHN0ZXBwZXIgaXMgYWxzbyBhZGFwdGl2ZSBhbmQgY2FuIGJlIGVmZmljaWVudCB3aGVuIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycwoJICAgICAqIGFyZSBub3QgdG9vIGhpZ2ggYW5kIHRoZSBjb3JyZWxhdGlvbnMgYmV0d2VlbiBwYXJhbWV0ZXJzIGFyZSBsb3cuCgkgICAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCB3aXRoIGEgb25lIG9yIG1vcmUgcGFyYW1ldGVyIGRlZmluaXRpb25zCgkgICAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzLgoJICAgICAqIEBwYXJhbSBsb2dfcG9zdCAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBsb2cgZGVuc2l0eSB0aGF0IGRlcGVuZHMgb24gdGhlIHN0YXRlLiAKCSAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMgdG8gdGhlIHN0ZXBwZXIuCgkgICAgKi8KCSAgICB2YXIgQW13Z1N0ZXBwZXIgPSBmdW5jdGlvbiAocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMpIHsKCSAgICAgIFN0ZXBwZXIuY2FsbCh0aGlzLCBwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCk7CgkgICAgICB0aGlzLnBhcmFtX25hbWVzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpOwoJICAgICAgdGhpcy5zdWJzdGVwcGVycyA9IFtdOwoJICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtX25hbWVzLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1t0aGlzLnBhcmFtX25hbWVzW2ldXTsKCSAgICAgICAgdmFyIFNlbGVjdFN0ZXBwZXI7CgkgICAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkgewoJICAgICAgICAgIGNhc2UgInJlYWwiOgoJICAgICAgICAgICAgaWYgKGFycmF5X2VxdWFsKHBhcmFtLmRpbSwgWzFdKSkgewoJICAgICAgICAgICAgICBTZWxlY3RTdGVwcGVyID0gUmVhbE1ldHJvcG9saXNTdGVwcGVyOwoJICAgICAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAgICAgU2VsZWN0U3RlcHBlciA9IE11bHRpUmVhbENvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgICAgY2FzZSAiaW50IjoKCSAgICAgICAgICAgIGlmIChhcnJheV9lcXVhbChwYXJhbS5kaW0sIFsxXSkpIHsKCSAgICAgICAgICAgICAgU2VsZWN0U3RlcHBlciA9IEludE1ldHJvcG9saXNTdGVwcGVyOwoJICAgICAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAgICAgU2VsZWN0U3RlcHBlciA9IE11bHRpSW50Q29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXI7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBicmVhazsKCSAgICAgICAgICBjYXNlICJiaW5hcnkiOgoJICAgICAgICAgICAgaWYgKGFycmF5X2VxdWFsKHBhcmFtLmRpbSwgWzFdKSkgewoJICAgICAgICAgICAgICBTZWxlY3RTdGVwcGVyID0gQmluYXJ5U3RlcHBlcjsKCSAgICAgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAgIFNlbGVjdFN0ZXBwZXIgPSBCaW5hcnlDb21wb25lbnRTdGVwcGVyOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgICAgZGVmYXVsdDoKCSAgICAgICAgICAgIHRocm93ICJBbXdnU3RlcHBlciBjYW4ndCBoYW5kbGUgcGFyYW1ldGVyICIgKyB0aGlzLnBhcmFtX25hbWVzW2ldICsgIiB3aXRoIHR5cGUgIiArIHBhcmFtLnR5cGU7CgkgICAgICAgIH0KCSAgICAgICAgdmFyIHBhcmFtX29iamVjdF93cmFwID0ge307CgkgICAgICAgIHBhcmFtX29iamVjdF93cmFwW3RoaXMucGFyYW1fbmFtZXNbaV1dID0gcGFyYW07CgkgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoJICAgICAgICB2YXIgcGFyYW1fb3B0aW9ucyA9IG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zW3RoaXMucGFyYW1fbmFtZXNbaV1dIHx8IHt9OwoJICAgICAgICBwYXJhbV9vcHRpb25zLnByb3BfbG9nX3NjYWxlID0gcGFyYW1fb3B0aW9ucy5wcm9wX2xvZ19zY2FsZSB8fCBvcHRpb25zLnByb3BfbG9nX3NjYWxlOwoJICAgICAgICBwYXJhbV9vcHRpb25zLmJhdGNoX3NpemUgPSBwYXJhbV9vcHRpb25zLmJhdGNoX3NpemUgfHwgb3B0aW9ucy5iYXRjaF9zaXplOwoJICAgICAgICBwYXJhbV9vcHRpb25zLm1heF9hZGFwdGF0aW9uID0gcGFyYW1fb3B0aW9ucy5tYXhfYWRhcHRhdGlvbiB8fCBvcHRpb25zLm1heF9hZGFwdGF0aW9uOwoJICAgICAgICBwYXJhbV9vcHRpb25zLmluaXRpYWxfYWRhcHRhdGlvbiA9IHBhcmFtX29wdGlvbnMuaW5pdGlhbF9hZGFwdGF0aW9uIHx8IG9wdGlvbnMuaW5pdGlhbF9hZGFwdGF0aW9uOwoJICAgICAgICBwYXJhbV9vcHRpb25zLnRhcmdldF9hY2NlcHRfcmF0ZSA9IHBhcmFtX29wdGlvbnMudGFyZ2V0X2FjY2VwdF9yYXRlIHx8IG9wdGlvbnMudGFyZ2V0X2FjY2VwdF9yYXRlOwoJICAgICAgICBwYXJhbV9vcHRpb25zLmlzX2FkYXB0aW5nID0gcGFyYW1fb3B0aW9ucy5pc19hZGFwdGluZyB8fCBvcHRpb25zLmlzX2FkYXB0aW5nOwoJICAgICAgICB0aGlzLnN1YnN0ZXBwZXJzW2ldID0gbmV3IFNlbGVjdFN0ZXBwZXIocGFyYW1fb2JqZWN0X3dyYXAsIHN0YXRlLCBsb2dfcG9zdCwgcGFyYW1fb3B0aW9ucyk7CgkgICAgICB9CgkgICAgfTsKCSAgICBBbXdnU3RlcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0ZXBwZXIucHJvdG90eXBlKTsKCSAgICBBbXdnU3RlcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbXdnU3RlcHBlcjsKCSAgICBBbXdnU3RlcHBlci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIHNodWZmbGVfYXJyYXkodGhpcy5zdWJzdGVwcGVycyk7CgkgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3Vic3RlcHBlcnMubGVuZ3RoOyBpKyspIHsKCSAgICAgICAgdGhpcy5zdWJzdGVwcGVyc1tpXS5zdGVwKCk7CgkgICAgICB9CgkgICAgICByZXR1cm4gdGhpcy5zdGF0ZTsKCSAgICB9OwoJICAgIEFtd2dTdGVwcGVyLnByb3RvdHlwZS5zdGFydF9hZGFwdGF0aW9uID0gZnVuY3Rpb24gKCkgewoJICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YnN0ZXBwZXJzLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgIHRoaXMuc3Vic3RlcHBlcnNbaV0uc3RhcnRfYWRhcHRhdGlvbigpOwoJICAgICAgfQoJICAgIH07CgkgICAgQW13Z1N0ZXBwZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJzdGVwcGVycy5sZW5ndGg7IGkrKykgewoJICAgICAgICB0aGlzLnN1YnN0ZXBwZXJzW2ldLnN0b3BfYWRhcHRhdGlvbigpOwoJICAgICAgfQoJICAgIH07CgkgICAgQW13Z1N0ZXBwZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiAoKSB7CgkgICAgICB2YXIgaW5mbyA9IHt9OwoJICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YnN0ZXBwZXJzLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgIGluZm9bdGhpcy5wYXJhbV9uYW1lc1tpXV0gPSB0aGlzLnN1YnN0ZXBwZXJzW2ldLmluZm8oKTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBpbmZvOwoJICAgIH07CgoJICAgIC8vLy8vLy8vLy8vIFNhbXBsZXIgRnVuY3Rpb25zIC8vLy8vLy8vLy8KCSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoJICAgIC8qKgoJICAgICogQGludGVyZmFjZQoJICAgICogV2hpbGUgeW91IGNvdWxkIGZpdCBhIG1vZGVsIGJ5IHBhc3RpbmcgdG9nZXRoZXIgU3RlcHBlcnMsIGEKCSAgICAvLyBTYW1wbGVyIGlzIGhlcmUgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyB3aGVyZSBhbiBpbnN0YW5jZSBvZiBTYW1wbGVyCgkgICAgLy8gc2V0cyB1cCB0aGUgU3RlcHBlcnMsIGNoZWNrcyB0aGUgcGFyYW1ldGVyIGRlZmluaXRpb24sCgkgICAgLy8gYW5kIG1hbmFnZXMgdGhlIHNhbXBsaW5nLiBUaGlzIGhlcmUgZGVmaW5lcyB0aGUgU2FtcGxlciAiaW50ZXJmYWNlIi4KCSAgICAqIEBpbnRlcmZhY2UKCSAgICAqIEBwYXJhbSBwYXJhbXMgLSBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMsIGZvciBleGFtcGxlOgoJICAgICogICB7Im11IjogeyJ0eXBlIjogInJlYWwifSwgInNpZ21hIjogeyJ0eXBlIjogInJlYWwiLCAibG93ZXIiID0gMH19CgkgICAgKiAgIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMgZG9lc24ndCBoYXZlIHRvIGJlICJjb21wbGV0ZSIgYW5kIHByb3BlcnRpZXMKCSAgICAqICAgbGVmdCBvdXQgKGxpa2UgbG93ZXIgYW5kIHVwcGVyKSB3aWxsIGJlIGZpbGxlZCBpbiBieSBkZWZhdWx0cy4KCSAgICAqIEBwYXJhbSBsb2dfcG9zdCAtIEEgZnVuY3Rpb24gd2l0aCBzaWduYXR1cmUgZnVuY3Rpb24oc3RhdGUsIGRhdGEpLiBIZXJlCgkgICAgKiAgIHN0YXRlIHdpbGwgYmUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc3RhdGUgd2l0aCBlYWNoIHBhcmFtZXRlciBhcyBhIAoJICAgICogICBrZXkgYW5kIHRoZSBwYXJhbWV0ZXIgdmFsdWVzIGFzIG51bWJlcnMgb3IgYXJyYXlzLiBGb3IgZXhhbXBsZToKCSAgICAqICAgeyJtdSI6IDMsICJzaWdtYSI6IDEuNX0uIFRoZSBkYXRhIGFyZ3VtZW50IHdpbGwgYmUgdGhlIHNhbWUgb2JqZWN0IGFzIAoJICAgICogICB0aGUgZGF0YSBhcmd1bWVudCBnaXZlbiBiZWxvdy4KCSAgICAqIEBwYXJhbSBkYXRhIC0gYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGxvZ19wb3N0IGZ1bmN0aW9uCgkgICAgKiAgIHdoZW4gc2FtcGxpbmcuCgkgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMgdG8gdGhlIHNhbXBsZXIuCgkgICAgKi8KCSAgICB2YXIgU2FtcGxlciA9IGZ1bmN0aW9uIChwYXJhbXMsIGxvZ19wb3N0LCBkYXRhLCBvcHRpb25zKSB7CgkgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKCSAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CgkgICAgICB0aGlzLnBhcmFtX25hbWVzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpOwoKCSAgICAgIC8vIFNldHRpbmcgZGVmYXVsdCBvcHRpb25zIGlmIG5vdCBwYXNzZWQgdGhyb3VnaCB0aGUgb3B0aW9ucyBvYmplY3QKCSAgICAgIHRoaXMucGFyYW1faW5pdF9mdW4gPSBnZXRfb3B0aW9uKCJwYXJhbV9pbml0X2Z1biIsIG9wdGlvbnMsIHBhcmFtX2luaXRfZml4ZWQpOwoJICAgICAgdmFyIHRoaW5uaW5nX2ludGVydmFsID0gZ2V0X29wdGlvbigidGhpbiIsIG9wdGlvbnMsIDEpOwoJICAgICAgdmFyIHBhcmFtc190b19tb25pdG9yID0gZ2V0X29wdGlvbigibW9uaXRvciIsIG9wdGlvbnMsIG51bGwpOwoJICAgICAgdGhpcy50aGluKHRoaW5uaW5nX2ludGVydmFsKTsKCSAgICAgIHRoaXMubW9uaXRvcihwYXJhbXNfdG9fbW9uaXRvcik7CgkgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwoJICAgICAgLy8gQ29tcGxldGluZyB0aGUgcGFyYW1zIGFuZCBpbml0aWFsaXppbmcgdGhlIHN0YXRlLgoJICAgICAgdGhpcy5wYXJhbXMgPSBjb21wbGV0ZV9wYXJhbXModGhpcy5wYXJhbXMsIHRoaXMucGFyYW1faW5pdF9mdW4pOwoJICAgICAgdmFyIHN0YXRlID0ge307CgkgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1fbmFtZXMubGVuZ3RoOyBpKyspIHsKCSAgICAgICAgc3RhdGVbdGhpcy5wYXJhbV9uYW1lc1tpXV0gPSB0aGlzLnBhcmFtc1t0aGlzLnBhcmFtX25hbWVzW2ldXS5pbml0OwoJICAgICAgfQoJICAgICAgdGhpcy5sb2dfcG9zdCA9IGZ1bmN0aW9uICgpIHsKCSAgICAgICAgcmV0dXJuIGxvZ19wb3N0KHN0YXRlLCBkYXRhKTsKCSAgICAgIH07CgkgICAgICAvLyBSdW5uaW5nIHRoZSBsb2dfcG9zdCBmdW5jdGlvbiBvbmNlIGluIGNhc2UgaXQgZnVydGhlciBtb2RpZmllcyB0aGUgc3RhdGUKCSAgICAgIC8vIGZvciBleGFtcGxlIGFkZGluZyBkZXJpdmVkIHF1YW50aXRpZXMuCgkgICAgICB0aGlzLmxvZ19wb3N0KCk7CgkgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7CgkgICAgICB0aGlzLnN0ZXBwZXJzID0gdGhpcy5jcmVhdGVfc3RlcHBlcl9lbnNhbWJsZSh0aGlzLnBhcmFtcywgdGhpcy5zdGF0ZSwgdGhpcy5sb2dfcG9zdCwgdGhpcy5vcHRpb25zKTsKCSAgICB9OwoKCSAgICAvKiogU2hvdWxkIHJldHVybiBhIHZlY3RvciBvZiBzdGVwcGVycyB0aGF0IHdoZW4gY2FsbGVkIAoJICAgICAqIHNob3VsZCB0YWtlIGEgc3RlcCBpbiB0aGUgcGFyYW1ldGVyIHNwYWNlLgoJICAgICAqLwoJICAgIFNhbXBsZXIucHJvdG90eXBlLmNyZWF0ZV9zdGVwcGVyX2Vuc2FtYmxlID0gZnVuY3Rpb24gKHN0YXRlLCBsb2dfcG9zdCkgewoJICAgICAgdGhyb3cgIkV2ZXJ5IFNhbXBsZXIgbmVlZHMgdG8gaW1wbGVtZW50IGNyZWF0ZV9zdGVwcGVyX2Vuc2FtYmxlKCkiOwoJICAgIH07CgoJICAgIC8qKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGluZm8gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBTYW1wbGVyLgoJICAgICAqLwoJICAgIFNhbXBsZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiAoKSB7CgkgICAgICByZXR1cm4gewoJICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSwKCSAgICAgICAgdGhpbjogdGhpcy50aGluLAoJICAgICAgICBtb25pdG9yOiB0aGlzLm1vbml0b3IsCgkgICAgICAgIHN0ZXBwZXJzOiB0aGlzLnN0ZXBwZXJzCgkgICAgICB9OwoJICAgIH07CgoJICAgIC8qKiBUYWtlcyBhIHN0ZXAgaW4gdGhlIHBhcmFtZXRlciBzcGFjZS4gUmV0dXJucyB0aGUgbmV3IHNwYWNlCgkgICAgICogYnV0IGFsc28gbW9kaWZpZXMgdGhlIHN0YXRlIGluIHBsYWNlLgoJICAgICAqLwoJICAgIFNhbXBsZXIucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAoKSB7CgkgICAgICBzaHVmZmxlX2FycmF5KHRoaXMuc3RlcHBlcnMpOwoJICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0ZXBwZXJzLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgIHRoaXMuc3RlcHBlcnNbaV0uc3RlcCgpOwoJICAgICAgfQoJICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc3RhdGUpLmxlbmd0aCA+IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKS5sZW5ndGgpIHsKCSAgICAgICAgLy8gVGhlIHN0YXRlIGNvbnRhaW5zIGRldml2ZWQgcXVhbnRpdGllcyAobm90IG9ubHkgcGFyYW1ldGVycykgYW5kIHdlCgkgICAgICAgIC8vIG5lZWQgdG8gcnVuIHRoZSBsb2dfcG9zdCBvbmNlIG1vcmUgaW4gb3JkZXIgdG8gc2V0IHRoZSBkZXJpdmVkIHF1YW50aXRpZXMKCSAgICAgICAgLy8gZm9yIHRoZSBmaW5hbCBwYXJhbWV0ZXIgc3RhdGUKCSAgICAgICAgdGhpcy5sb2dfcG9zdCgpOwoJICAgICAgfQoJICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogVGFrZXMgbl9pdGVyYXRpb25zIHN0ZXBzIGluIHRoZSBwYXJhbWV0ZXIgc3BhY2UgYW5kIHJldHVybnMgdGhlbQoJICAgICAqIGFzIGFuIG9iamVjdCBvZiBhcnJheXMgd2l0aCBvbmUgYXJyYXkgcGVyIHBhcmFtZXRlci4gRm9yIGV4YW1wbGU6CgkgICAgICoge211OiBbMSwgLTEsIDIsIDMsIC4uLl0sIHNpZ21hOiBbMSwgMiwgMiwgMSwgLi4uXX0uCgkgICAgICogSWYgdGhpbiBpcyA+IDEgdGhlbiBuX2l0ZXJhdGlvbnMgLyB0aGluIHNhbXBsZXMgYXJlIHJldHVybmVkLgoJICAgICAqLwoJICAgIFNhbXBsZXIucHJvdG90eXBlLnNhbXBsZSA9IGZ1bmN0aW9uIChuX2l0ZXJhdGlvbnMpIHsKCSAgICAgIC8vIEluaXRpYWxpemluZyBjdXJyX3NhbXBsZSB3aGVyZSB0aGUgc2FtcGxlIGlzIGdvaW5nIHRvIGJlIHNhdmVkCgkgICAgICAvLyBhcyBhbiBvYmplY3QgY29udGFpbmluZyBvbmUgYXJyYXkgcGVyIHBhcmFtZXRlciB0byBiZSBtb25pdG9yZWQuCgkgICAgICB2YXIgaSwgaiwgbW9uaXRvcmVkX3BhcmFtczsKCSAgICAgIGlmICh0aGlzLm1vbml0b3JlZF9wYXJhbXMgPT09IG51bGwpIHsKCSAgICAgICAgbW9uaXRvcmVkX3BhcmFtcyA9IE9iamVjdC5rZXlzKHRoaXMuc3RhdGUpOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgbW9uaXRvcmVkX3BhcmFtcyA9IHRoaXMubW9uaXRvcmVkX3BhcmFtczsKCSAgICAgIH0KCSAgICAgIHZhciBjdXJyX3NhbXBsZSA9IHt9OwoJICAgICAgZm9yIChqID0gMDsgaiA8IG1vbml0b3JlZF9wYXJhbXMubGVuZ3RoOyBqKyspIHsKCSAgICAgICAgY3Vycl9zYW1wbGVbbW9uaXRvcmVkX3BhcmFtc1tqXV0gPSBbXTsKCSAgICAgIH0KCSAgICAgIGZvciAoaSA9IDA7IGkgPCBuX2l0ZXJhdGlvbnM7IGkrKykgewoJICAgICAgICBpZiAoaSAlIHRoaXMudGhpbm5pbmdfaW50ZXJ2YWwgPT09IDApIHsKCSAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbW9uaXRvcmVkX3BhcmFtcy5sZW5ndGg7IGorKykgewoJICAgICAgICAgICAgdmFyIHBhcmFtID0gbW9uaXRvcmVkX3BhcmFtc1tqXTsKCSAgICAgICAgICAgIGN1cnJfc2FtcGxlW3BhcmFtXS5wdXNoKGNsb25lX3BhcmFtX2RyYXcodGhpcy5zdGF0ZVtwYXJhbV0pKTsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAgdGhpcy5zdGVwKCk7CgkgICAgICB9CgkgICAgICByZXR1cm4gY3Vycl9zYW1wbGU7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogVGFrZXMgbl9pdGVyYXRpb24gc3RlcHMgaW4gcGFyYW1ldGVyIHNwYWNlIGJ1dCByZXR1cm5zIG5vdGhpbmcuCgkgICAgICovCgkgICAgU2FtcGxlci5wcm90b3R5cGUuYnVybiA9IGZ1bmN0aW9uIChuX2l0ZXJhdGlvbnMpIHsKCSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbl9pdGVyYXRpb25zOyBpKyspIHsKCSAgICAgICAgdGhpcy5zdGVwKCk7CgkgICAgICB9CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogU2V0cyB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIG1vbml0b3JlZCBhbmQgcmV0dXJuZWQgd2hlbiBjYWxsaW5nCgkgICAgICogc2FtcGxlLgoJICAgICAqLwoJICAgIFNhbXBsZXIucHJvdG90eXBlLm1vbml0b3IgPSBmdW5jdGlvbiAocGFyYW1zX3RvX21vbml0b3IpIHsKCSAgICAgIHRoaXMubW9uaXRvcmVkX3BhcmFtcyA9IHBhcmFtc190b19tb25pdG9yOwoJICAgIH07CgoJICAgIC8qKgoJICAgICAqIFNldHMgdGhlIHRoaW5uaW5nLiBGb3IgZXhhbXBsZSB0aGluID09IDEwIG1lYW5zIHRoYXQgZXZlcnkgMTB0aCBwb3N0ZXJpb3IKCSAgICAgKiBkcmF3IHdpbGwgYmUga2VwdC4KCSAgICAgKi8KCSAgICBTYW1wbGVyLnByb3RvdHlwZS50aGluID0gZnVuY3Rpb24gKHRoaW5uaW5nX2ludGVydmFsKSB7CgkgICAgICB0aGlzLnRoaW5uaW5nX2ludGVydmFsID0gdGhpbm5pbmdfaW50ZXJ2YWw7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogU2V0cyBhZGFwdGF0aW9uIG9uLCBpZiBhcHBsaWNhYmxlLCBpbiBhbGwgc3RlcHBlcnMuCgkgICAgICovCgkgICAgU2FtcGxlci5wcm90b3R5cGUuc3RhcnRfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGVwcGVycy5sZW5ndGg7IGkrKykgewoJICAgICAgICB0aGlzLnN0ZXBwZXJzW2ldLnN0YXJ0X2FkYXB0YXRpb24oKTsKCSAgICAgIH0KCSAgICB9OwoKCSAgICAvKioKCSAgICAqIFNldHMgYWRhcHRhdGlvbiBvZmYsIGlmIGFwcGxpY2FibGUsIGluIGFsbCBzdGVwcGVycy4KCSAgICAqLwoJICAgIFNhbXBsZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKCSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGVwcGVycy5sZW5ndGg7IGkrKykgewoJICAgICAgICB0aGlzLnN0ZXBwZXJzW2ldLnN0b3BfYWRhcHRhdGlvbigpOwoJICAgICAgfQoJICAgIH07CgoJICAgIC8qKgoJICAgICogQGNsYXNzCgkgICAgKiBAaW1wbGVtZW50cyB7U2FtcGxlcn0KCSAgICAqIFRoaXMgc2FtcGxlciB1c2VzIHRoZSBBbXdnU3RlcHBlciBhcyB0aGUgc3RlcHBlciBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSAKCSAgICAqIEFkYXB0aXZlIE1ldHJvcG9saXMtV2l0aGluLUdpYmJzIGFsZ29yaXRobSBpbiAiRXhhbXBsZXMgb2YgQWRhcHRpdmUgTUNNQyIKCSAgICAqIGJ5IFJvYmVydHMgYW5kIFJvc2VudGhhbCAoMjAwOCkuIEFuIGFkaXRpb24gaXMgdGhhdCBpdCBoYW5kbGVzIGludCBwYXJhbWV0ZXJzCgkgICAgKiBieSBtYWtpbmcgZGlzY3JldGUgTm9ybWFsIHByb3Bvc2FscyBhbmQgYmluYXJ5IHBhcmFtZXRlcnMgYnkgdGFraW5nIG9uIGEgbmV3IAoJICAgICogdmFsdWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBwb3N0ZXJpb3Igb2YgdGhlIHR3byBwb3NzaWJsZSBzdGF0ZXMgb2YgdGhlCgkgICAgKiBwYXJhbWV0ZXIuIFRoaXMgc2FtcGxlciBjYW4gYmUgZWZmaWNpZW50IHdoZW4gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzCgkgICAgKiBhcmUgbm90IHRvbyBoaWdoIGFuZCB0aGUgY29ycmVsYXRpb25zIGJldHdlZW4gcGFyYW1ldGVycyBhcmUgbG93LgoJICAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCB3aXRoIGEgb25lIG9yIG1vcmUgcGFyYW1ldGVyIGRlZmluaXRpb25zCgkgICAgKiBAcGFyYW0gc3RhdGUgLSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhdGUgb2YgYWxsIHBhcmFtZXRlcnMuCgkgICAgKiBAcGFyYW0gbG9nX3Bvc3QgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbG9nIGRlbnNpdHkgdGhhdCBkZXBlbmRzIG9uIHRoZSBzdGF0ZS4gCgkgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMgdG8gdGhlIHN0ZXBwZXIuCgkgICAgKi8KCSAgICB2YXIgQW13Z1NhbXBsZXIgPSBmdW5jdGlvbiAocGFyYW1zLCBsb2dfcG9zdCwgZGF0YSwgb3B0aW9ucykgewoJICAgICAgU2FtcGxlci5jYWxsKHRoaXMsIHBhcmFtcywgbG9nX3Bvc3QsIGRhdGEsIG9wdGlvbnMpOwoJICAgIH07CgkgICAgQW13Z1NhbXBsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTYW1wbGVyLnByb3RvdHlwZSk7CgkgICAgQW13Z1NhbXBsZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQW13Z1NhbXBsZXI7CgkgICAgQW13Z1NhbXBsZXIucHJvdG90eXBlLmNyZWF0ZV9zdGVwcGVyX2Vuc2FtYmxlID0gZnVuY3Rpb24gKHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zKSB7CgkgICAgICByZXR1cm4gW25ldyBBbXdnU3RlcHBlcihwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucyldOwoJICAgIH07CgoJICAgIC8vIFJldHVybmluZyB0aGUgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHB1YmxpY2x5IGV4cG9zZWQgYnkgdGhpcyBtb2R1bGUKCSAgICByZXR1cm4gewoJICAgICAgcnVuaWY6IHJ1bmlmLAoJICAgICAgcnVuaWZfZGlzY3JldGU6IHJ1bmlmX2Rpc2NyZXRlLAoJICAgICAgcm5vcm06IHJub3JtLAoJICAgICAgcGFyYW1faW5pdF9maXhlZDogcGFyYW1faW5pdF9maXhlZCwKCSAgICAgIGNvbXBsZXRlX3BhcmFtczogY29tcGxldGVfcGFyYW1zLAoJICAgICAgUmVhbE1ldHJvcG9saXNTdGVwcGVyOiBSZWFsTWV0cm9wb2xpc1N0ZXBwZXIsCgkgICAgICBJbnRNZXRyb3BvbGlzU3RlcHBlcjogSW50TWV0cm9wb2xpc1N0ZXBwZXIsCgkgICAgICBNdWx0aVJlYWxDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcjogTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIsCgkgICAgICBNdWx0aUludENvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyOiBNdWx0aUludENvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLAoJICAgICAgQmluYXJ5U3RlcHBlcjogQmluYXJ5U3RlcHBlciwKCSAgICAgIEJpbmFyeUNvbXBvbmVudFN0ZXBwZXI6IEJpbmFyeUNvbXBvbmVudFN0ZXBwZXIsCgkgICAgICBBbXdnU3RlcHBlcjogQW13Z1N0ZXBwZXIsCgkgICAgICBBbXdnU2FtcGxlcjogQW13Z1NhbXBsZXIKCSAgICB9OwoJICB9KTsKCX0pKG1jbWMpOwoJdmFyIG1jbWNFeHBvcnRzID0gbWNtYy5leHBvcnRzOwoKCWZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7CgkgIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47Cgl9CgoJZnVuY3Rpb24qIG51bWJlcnModmFsdWVzLCB2YWx1ZW9mKSB7CgkgIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHsKCSAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHsKCSAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHsKCSAgICAgICAgeWllbGQgdmFsdWU7CgkgICAgICB9CgkgICAgfQoJICB9IGVsc2UgewoJICAgIGxldCBpbmRleCA9IC0xOwoJICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykgewoJICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkgewoJICAgICAgICB5aWVsZCB2YWx1ZTsKCSAgICAgIH0KCSAgICB9CgkgIH0KCX0KCglmdW5jdGlvbiBjb21wYXJlRGVmaW5lZChjb21wYXJlID0gYXNjZW5kaW5nKSB7CgkgIGlmIChjb21wYXJlID09PSBhc2NlbmRpbmcpIHJldHVybiBhc2NlbmRpbmdEZWZpbmVkOwoJICBpZiAodHlwZW9mIGNvbXBhcmUgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoImNvbXBhcmUgaXMgbm90IGEgZnVuY3Rpb24iKTsKCSAgcmV0dXJuIChhLCBiKSA9PiB7CgkgICAgY29uc3QgeCA9IGNvbXBhcmUoYSwgYik7CgkgICAgaWYgKHggfHwgeCA9PT0gMCkgcmV0dXJuIHg7CgkgICAgcmV0dXJuIChjb21wYXJlKGIsIGIpID09PSAwKSAtIChjb21wYXJlKGEsIGEpID09PSAwKTsKCSAgfTsKCX0KCWZ1bmN0aW9uIGFzY2VuZGluZ0RlZmluZWQoYSwgYikgewoJICByZXR1cm4gKGEgPT0gbnVsbCB8fCAhKGEgPj0gYSkpIC0gKGIgPT0gbnVsbCB8fCAhKGIgPj0gYikpIHx8IChhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMCk7Cgl9CgoJZnVuY3Rpb24gbWF4KHZhbHVlcywgdmFsdWVvZikgewoJICBsZXQgbWF4OwoJICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7CgkgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHsKCSAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIChtYXggPCB2YWx1ZSB8fCBtYXggPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSB2YWx1ZSkpIHsKCSAgICAgICAgbWF4ID0gdmFsdWU7CgkgICAgICB9CgkgICAgfQoJICB9IGVsc2UgewoJICAgIGxldCBpbmRleCA9IC0xOwoJICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykgewoJICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGwgJiYgKG1heCA8IHZhbHVlIHx8IG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkgewoJICAgICAgICBtYXggPSB2YWx1ZTsKCSAgICAgIH0KCSAgICB9CgkgIH0KCSAgcmV0dXJuIG1heDsKCX0KCglmdW5jdGlvbiBtaW4odmFsdWVzLCB2YWx1ZW9mKSB7CgkgIGxldCBtaW47CgkgIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHsKCSAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykgewoJICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKG1pbiA+IHZhbHVlIHx8IG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkgewoJICAgICAgICBtaW4gPSB2YWx1ZTsKCSAgICAgIH0KCSAgICB9CgkgIH0gZWxzZSB7CgkgICAgbGV0IGluZGV4ID0gLTE7CgkgICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7CgkgICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAobWluID4gdmFsdWUgfHwgbWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSB7CgkgICAgICAgIG1pbiA9IHZhbHVlOwoJICAgICAgfQoJICAgIH0KCSAgfQoJICByZXR1cm4gbWluOwoJfQoKCS8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VybmVyL3F1aWNrc2VsZWN0CgkvLyBJU0MgbGljZW5zZSwgQ29weXJpZ2h0IDIwMTggVmxhZGltaXIgQWdhZm9ua2luLgoJZnVuY3Rpb24gcXVpY2tzZWxlY3QoYXJyYXksIGssIGxlZnQgPSAwLCByaWdodCA9IEluZmluaXR5LCBjb21wYXJlKSB7CgkgIGsgPSBNYXRoLmZsb29yKGspOwoJICBsZWZ0ID0gTWF0aC5mbG9vcihNYXRoLm1heCgwLCBsZWZ0KSk7CgkgIHJpZ2h0ID0gTWF0aC5mbG9vcihNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCByaWdodCkpOwoJICBpZiAoIShsZWZ0IDw9IGsgJiYgayA8PSByaWdodCkpIHJldHVybiBhcnJheTsKCSAgY29tcGFyZSA9IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IGFzY2VuZGluZ0RlZmluZWQgOiBjb21wYXJlRGVmaW5lZChjb21wYXJlKTsKCSAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkgewoJICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHsKCSAgICAgIGNvbnN0IG4gPSByaWdodCAtIGxlZnQgKyAxOwoJICAgICAgY29uc3QgbSA9IGsgLSBsZWZ0ICsgMTsKCSAgICAgIGNvbnN0IHogPSBNYXRoLmxvZyhuKTsKCSAgICAgIGNvbnN0IHMgPSAwLjUgKiBNYXRoLmV4cCgyICogeiAvIDMpOwoJICAgICAgY29uc3Qgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7CgkgICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTsKCSAgICAgIGNvbnN0IG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gbSkgKiBzIC8gbiArIHNkKSk7CgkgICAgICBxdWlja3NlbGVjdChhcnJheSwgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGNvbXBhcmUpOwoJICAgIH0KCSAgICBjb25zdCB0ID0gYXJyYXlba107CgkgICAgbGV0IGkgPSBsZWZ0OwoJICAgIGxldCBqID0gcmlnaHQ7CgkgICAgc3dhcChhcnJheSwgbGVmdCwgayk7CgkgICAgaWYgKGNvbXBhcmUoYXJyYXlbcmlnaHRdLCB0KSA+IDApIHN3YXAoYXJyYXksIGxlZnQsIHJpZ2h0KTsKCSAgICB3aGlsZSAoaSA8IGopIHsKCSAgICAgIHN3YXAoYXJyYXksIGksIGopLCArK2ksIC0tajsKCSAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2ldLCB0KSA8IDApICsraTsKCSAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2pdLCB0KSA+IDApIC0tajsKCSAgICB9CgkgICAgaWYgKGNvbXBhcmUoYXJyYXlbbGVmdF0sIHQpID09PSAwKSBzd2FwKGFycmF5LCBsZWZ0LCBqKTtlbHNlICsraiwgc3dhcChhcnJheSwgaiwgcmlnaHQpOwoJICAgIGlmIChqIDw9IGspIGxlZnQgPSBqICsgMTsKCSAgICBpZiAoayA8PSBqKSByaWdodCA9IGogLSAxOwoJICB9CgkgIHJldHVybiBhcnJheTsKCX0KCWZ1bmN0aW9uIHN3YXAoYXJyYXksIGksIGopIHsKCSAgY29uc3QgdCA9IGFycmF5W2ldOwoJICBhcnJheVtpXSA9IGFycmF5W2pdOwoJICBhcnJheVtqXSA9IHQ7Cgl9CgoJZnVuY3Rpb24gcXVhbnRpbGUodmFsdWVzLCBwLCB2YWx1ZW9mKSB7CgkgIHZhbHVlcyA9IEZsb2F0NjRBcnJheS5mcm9tKG51bWJlcnModmFsdWVzLCB2YWx1ZW9mKSk7CgkgIGlmICghKG4gPSB2YWx1ZXMubGVuZ3RoKSB8fCBpc05hTihwID0gK3ApKSByZXR1cm47CgkgIGlmIChwIDw9IDAgfHwgbiA8IDIpIHJldHVybiBtaW4odmFsdWVzKTsKCSAgaWYgKHAgPj0gMSkgcmV0dXJuIG1heCh2YWx1ZXMpOwoJICB2YXIgbiwKCSAgICBpID0gKG4gLSAxKSAqIHAsCgkgICAgaTAgPSBNYXRoLmZsb29yKGkpLAoJICAgIHZhbHVlMCA9IG1heChxdWlja3NlbGVjdCh2YWx1ZXMsIGkwKS5zdWJhcnJheSgwLCBpMCArIDEpKSwKCSAgICB2YWx1ZTEgPSBtaW4odmFsdWVzLnN1YmFycmF5KGkwICsgMSkpOwoJICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTsKCX0KCglmdW5jdGlvbiBtZWRpYW4odmFsdWVzLCB2YWx1ZW9mKSB7CgkgIHJldHVybiBxdWFudGlsZSh2YWx1ZXMsIDAuNSwgdmFsdWVvZik7Cgl9CgoJZnVuY3Rpb24gVHJhbnNmb3JtKGssIHgsIHkpIHsKCSAgdGhpcy5rID0gazsKCSAgdGhpcy54ID0geDsKCSAgdGhpcy55ID0geTsKCX0KCVRyYW5zZm9ybS5wcm90b3R5cGUgPSB7CgkgIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm0sCgkgIHNjYWxlOiBmdW5jdGlvbiAoaykgewoJICAgIHJldHVybiBrID09PSAxID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rICogaywgdGhpcy54LCB0aGlzLnkpOwoJICB9LAoJICB0cmFuc2xhdGU6IGZ1bmN0aW9uICh4LCB5KSB7CgkgICAgcmV0dXJuIHggPT09IDAgJiB5ID09PSAwID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rLCB0aGlzLnggKyB0aGlzLmsgKiB4LCB0aGlzLnkgKyB0aGlzLmsgKiB5KTsKCSAgfSwKCSAgYXBwbHk6IGZ1bmN0aW9uIChwb2ludCkgewoJICAgIHJldHVybiBbcG9pbnRbMF0gKiB0aGlzLmsgKyB0aGlzLngsIHBvaW50WzFdICogdGhpcy5rICsgdGhpcy55XTsKCSAgfSwKCSAgYXBwbHlYOiBmdW5jdGlvbiAoeCkgewoJICAgIHJldHVybiB4ICogdGhpcy5rICsgdGhpcy54OwoJICB9LAoJICBhcHBseVk6IGZ1bmN0aW9uICh5KSB7CgkgICAgcmV0dXJuIHkgKiB0aGlzLmsgKyB0aGlzLnk7CgkgIH0sCgkgIGludmVydDogZnVuY3Rpb24gKGxvY2F0aW9uKSB7CgkgICAgcmV0dXJuIFsobG9jYXRpb25bMF0gLSB0aGlzLngpIC8gdGhpcy5rLCAobG9jYXRpb25bMV0gLSB0aGlzLnkpIC8gdGhpcy5rXTsKCSAgfSwKCSAgaW52ZXJ0WDogZnVuY3Rpb24gKHgpIHsKCSAgICByZXR1cm4gKHggLSB0aGlzLngpIC8gdGhpcy5rOwoJICB9LAoJICBpbnZlcnRZOiBmdW5jdGlvbiAoeSkgewoJICAgIHJldHVybiAoeSAtIHRoaXMueSkgLyB0aGlzLms7CgkgIH0sCgkgIHJlc2NhbGVYOiBmdW5jdGlvbiAoeCkgewoJICAgIHJldHVybiB4LmNvcHkoKS5kb21haW4oeC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsIHRoaXMpLm1hcCh4LmludmVydCwgeCkpOwoJICB9LAoJICByZXNjYWxlWTogZnVuY3Rpb24gKHkpIHsKCSAgICByZXR1cm4geS5jb3B5KCkuZG9tYWluKHkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLCB0aGlzKS5tYXAoeS5pbnZlcnQsIHkpKTsKCSAgfSwKCSAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKCSAgICByZXR1cm4gInRyYW5zbGF0ZSgiICsgdGhpcy54ICsgIiwiICsgdGhpcy55ICsgIikgc2NhbGUoIiArIHRoaXMuayArICIpIjsKCSAgfQoJfTsKCVRyYW5zZm9ybS5wcm90b3R5cGU7CgoJLyoKCSAgSFRETWF0aCBTdGF0aWMgQ2xhc3MgLSBOb3QgaW50ZW5kZWQgZm9yIGluc3RhbnRpYXRpb24hCgoJICBWYXJpYWJsZXM6CgkgICAgQSA9IGFtb3VudAoJICAgIEQgPSBkZWxheQoJICAgIFYgPSBzdWJqZWN0aXZlIHZhbHVlCgoJICAgIGsgPSBkaXNjb3VudCBmYWN0b3IKCgkgIEVxdWF0aW9uczoKCSAgICBWID0gQSAvICgxICsga0QpCgkqLwoJY2xhc3MgSFRETWF0aCB7CgkgIHN0YXRpYyBhZGsydihhLCBkLCBrKSB7CgkgICAgcmV0dXJuIGEgLyAoMSArIGsgKiBkKTsKCSAgfQoJICBzdGF0aWMgYWR2MmsoYSwgZCwgdikgewoJICAgIHJldHVybiAoYSAtIHYpIC8gKHYgKiBkKTsKCSAgfQoJfQoKCS8vIEludGVybmFsIGRlcGVuZGVuY2llcwoKCS8qIGVzbGludCBuby1yZXN0cmljdGVkLWdsb2JhbHM6IFsib2ZmIiwgInNlbGYiXSAqLwoKCXNlbGYub25tZXNzYWdlID0gZXZlbnQgPT4gewoJICBjb25zdCBwYXJhbXMgPSB7CgkgICAgazogewoJICAgICAgdHlwZTogJ3JlYWwnLAoJICAgICAgbG93ZXI6IDAsCgkgICAgICB1cHBlcjogMTAwCgkgICAgfSwKCSAgICBsdWNlOiB7CgkgICAgICB0eXBlOiAncmVhbCcsCgkgICAgICBsb3dlcjogMCwKCSAgICAgIHVwcGVyOiAxMDAKCSAgICB9CgkgIH07CgkgIGNvbnN0IGxvZ1Bvc3QgPSAoc3RhdGUsIGRhdGEpID0+IHsKCSAgICBsZXQgbHAgPSAwOwoKCSAgICAvLyBQcmlvcnMKCSAgICBjb25zdCBrTWVhbiA9IDI7CgkgICAgY29uc3Qga1NoYXBlID0gMzsKCSAgICBscCArPSBkaXN0cmlidXRpb25zRXhwb3J0cy5nYW1tYShzdGF0ZS5rLCBrU2hhcGUsIGtTaGFwZSAvIGtNZWFuKTsKCSAgICAvLyBscCArPSBCYXllc0Rpc3RyaWJ1dGlvbnMudW5pZihzdGF0ZS5rLCAwLCAxMDApOwoKCSAgICBjb25zdCBsdWNlTWVhbiA9IDI7CgkgICAgY29uc3QgbHVjZVNoYXBlID0gMzsKCSAgICBscCArPSBkaXN0cmlidXRpb25zRXhwb3J0cy5nYW1tYShzdGF0ZS5sdWNlLCBsdWNlU2hhcGUsIGx1Y2VTaGFwZSAvIGx1Y2VNZWFuKTsKCSAgICAvLyBscCArPSBCYXllc0Rpc3RyaWJ1dGlvbnMudW5pZihzdGF0ZS5sdWNlLCAwLCAxMDApOwoKCSAgICAvLyBMaWtlbGlob29kCgkgICAgZGF0YS5mb3JFYWNoKGNob2ljZSA9PiB7CgkgICAgICAvLyBWYWx1ZXMKCSAgICAgIGNvbnN0IHZzID0gSFRETWF0aC5hZGsydihjaG9pY2UuYXMsIGNob2ljZS5kcywgc3RhdGUuayk7CgkgICAgICBjb25zdCB2bCA9IEhURE1hdGguYWRrMnYoY2hvaWNlLmFsLCBjaG9pY2UuZGwsIHN0YXRlLmspOwoKCSAgICAgIC8vIENob2ljZSBvZiBzb29uZXIgb3IgbGF0ZXIgaXMgc2FtcGxlZCBmcm9tIGEgQmVybm91bGxpIGRpc3RyaWJ1dGlvbgoJICAgICAgLy8gTHVjZSBjaG9pY2UgcnVsZSBpcyB1c2VkIHRvIGNvbXB1dGUgcHJvYmFiaWxpdHkgb2Ygd2FpdGluZyEgKDAgPSBzb29uZXIsIDEgPSBsYXRlcikKCSAgICAgIGNvbnN0IGJpbnZhbCA9IDEgLyAoMSArIE1hdGguZXhwKHN0YXRlLmx1Y2UgKiAodnMgLSB2bCkpKTsKCgkgICAgICAvLyBBY3R1YWwgcmVzcG9uc2UKCSAgICAgIGNvbnN0IHJlc3BvbnNlID0gY2hvaWNlLnJlc3BvbnNlID09PSAnZmlyc3QnID8gMCA6IDE7CgkgICAgICBscCArPSBkaXN0cmlidXRpb25zRXhwb3J0cy5iZXJuKHJlc3BvbnNlLCBiaW52YWwpOwoJICAgIH0pOwoJICAgIHJldHVybiBscDsKCSAgfTsKCgkgIC8vIEluaXRpYWxpemluZyB0aGUgc2FtcGxlcgoJICBjb25zdCBzYW1wbGVyID0gbmV3IG1jbWNFeHBvcnRzLkFtd2dTYW1wbGVyKHBhcmFtcywgbG9nUG9zdCwgZXZlbnQuZGF0YSk7CgkgIC8vIEJ1cm5pbmcgc29tZSBzYW1wbGVzIHRvIHRoZSBNQ01DIGdvZHMgYW5kIHNhbXBsaW5nIDUwMDAgZHJhd3MKCSAgc2FtcGxlci5idXJuKDEwMDApOwoJICBjb25zdCBzYW1wbGVzID0gc2FtcGxlci5zYW1wbGUoNTAwMCk7CgoJICAvLyBFeHRyYWN0IHN1bW1hcnkgc3RhdHMKCSAgY29uc3QgcmVzdWx0cyA9IHsKCSAgICBrOiBtZWRpYW4oc2FtcGxlcy5rKSwKCSAgICBsdWNlOiBtZWRpYW4oc2FtcGxlcy5sdWNlKQoJICB9OwoJICBzZWxmLnBvc3RNZXNzYWdlKHsKCSAgICByZXN1bHRzOiByZXN1bHRzLAoJICAgIHNhbXBsZXM6IHNhbXBsZXMKCSAgfSk7Cgl9OwoKfSkoKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHRkLWZpdC13b3JrZXIuanMubWFwCgo=",Gp="data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRkLWZpdC13b3JrZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9iYXllcy5qcy9kaXN0cmlidXRpb25zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JheWVzLmpzL21jbWMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zb3J0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVpY2tzZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3F1YW50aWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZWRpYW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvdHJhbnNmb3JtLmpzIiwiLi4vZGlzY291bnRhYmxlLW1hdGgvc3JjL2h0ZC1tYXRoLmpzIiwiLi4vZGlzY291bnRhYmxlLW1hdGgvc3JjL2luZGV4LmpzIiwic3JjL2NvbXBvbmVudHMvaHRkLWZpdC13b3JrZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gQSBudW1iZXIgb2YgbG9nIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb25zIChQREYpLiBOYW1pbmcgYW5kIHBhcmFtZXRlcml6YXRpb25cbi8vIHNob3VsZCBtYXRjaCBSJ3MsIGV4Y2VwdCBmb3IgdGhhdCBhbGwgZnVuY3Rpb25zIHJlc2lkZSBpbiBhbiBsZCBvYmplY3QgKFxuLy8gYXMgaW4gXCJsb2cgZGVuc2l0eVwiKSwgc28gdG8gZ2V0IGEgbm9ybWFsIGxvZyBkZW5zaXR5IHlvdSB3b3VsZCB3cml0ZVxuLy8gbGQubm9ybSguLi4pLlxuLy8gTW9zdCBvZiB0aGUgY29kZSBiZWxvdyBpcyBkaXJlY3RseSB0YWtlbiBmcm9tIHRoZSBncmVhdCBKc3RhdCBwcm9qZWN0XG4vLyAoaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0Lykgd2hpY2ggaW5jbHVkZXMgUERGIGZvciBtYW55IGNvbW1vbiBwcm9iYWJpbGl0eVxuLy8gZGlzdHJpYnV0aW9ucy4gV2hhdCBJIGhhdmUgZG9uZSBpcyBvbmx5IHRvIGNvbnZlcnQgdGhlc2UgdG8gbG9nIFBERnMuXG5cbi8qXG5PcmlnaW5hbCB3b3JrIENvcHlyaWdodCAoYykgMjAxMyBqU3RhdFxuTW9kaWZpZWQgd29yayBDb3B5cmlnaHQgKGMpIDIwMTUgUmFzbXVzIELDpcOldGggXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cblxuKi9cblxuXG4vLyBUaGlzIGJvaWxlciBwbGF0ZSBjb2RlIGhlcmUgaXMgdGFrZW4gZnJvbTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvdGVtcGxhdGVzL3JldHVybkV4cG9ydHMuanNcbi8vIEl0IHNob3VsZCBtYWtlIHNodXJlIHRoYXQgbW9kdWxlIGNhbiBiZSBpbXBvcnRlZCBib3RoIGluIHRoZSBicm93c2VyLFxuLy8gTm9kZSwgYW5kIGJ5IHVzaW5nIHRoZSBBc3luY2hyb25vdXMgTW9kdWxlIERlZmluaXRpb24gc3RhbmRhcmQuXG4vLyBJZiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQgaW4gdGhlIGJyb3dzZXIgaXQgd2lsbCBjcmVhdGVkIHRoZSBnbG9iYWxcbi8vIG9iamVjdCBsZCAuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIC8vIE5vZGUuIERvZXMgbm90IHdvcmsgd2l0aCBzdHJpY3QgQ29tbW9uSlMsIGJ1dFxuICAgICAgICAvLyBvbmx5IENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cyxcbiAgICAgICAgLy8gbGlrZSBOb2RlLlxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHMgKHJvb3QgaXMgd2luZG93KVxuICAgICAgICByb290LmxkID0gZmFjdG9yeSgpO1xuICB9XG59KHRoaXMsIGZ1bmN0aW9uKCkge1xuICAvLyBPYmplY3QgdG8gaG9sZCB0aGUgZnVuY3Rpb25zIHRvIGJlIGV4cG9ydGVkLlxuICB2YXIgbGQgID0ge307XG4gIFxuICAvLy8vLy8vLy8vIEhlbHBlciBmdW5jdGlvbnMgLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBcbiAgdmFyIGxnYW1tYSA9IGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGNvZiA9IFtcbiAgICAgIDc2LjE4MDA5MTcyOTQ3MTQ2LCAtODYuNTA1MzIwMzI5NDE2NzcsIDI0LjAxNDA5ODI0MDgzMDkxLFxuICAgICAgLTEuMjMxNzM5NTcyNDUwMTU1LCAwLjEyMDg2NTA5NzM4NjYxNzllLTIsIC0wLjUzOTUyMzkzODQ5NTNlLTVcbiAgICBdO1xuICAgIHZhciBzZXIgPSAxLjAwMDAwMDAwMDE5MDAxNTtcbiAgICB2YXIgeHgsIHksIHRtcDtcbiAgICB0bXAgPSAoeSA9IHh4ID0geCkgKyA1LjU7XG4gICAgdG1wIC09ICh4eCArIDAuNSkgKiBsb2codG1wKTtcbiAgICBmb3IgKDsgaiA8IDY7IGorKylcbiAgICAgIHNlciArPSBjb2Zbal0gLyArK3k7XG4gICAgcmV0dXJuIGxvZygyLjUwNjYyODI3NDYzMTAwMDUgKiBzZXIgLyB4eCkgLSB0bXA7XG4gIH07XG4gIGxkLmxnYW1tYSA9IGxnYW1tYTtcbiAgXG4gIHZhciBsZmFjdG9yaWFsID0gZnVuY3Rpb24obikge1xuICAgIHJldHVybiBuIDwgMCA/IE5hTiA6IGxnYW1tYShuICsgMSk7XG4gIH07XG4gIGxkLmxmYWN0b3JpYWwgPSBsZmFjdG9yaWFsO1xuICBcbiAgdmFyIGxjaG9vc2UgPSBmdW5jdGlvbihuLCBrKXtcbiAgICByZXR1cm4gbGZhY3RvcmlhbChuKSAtIGxmYWN0b3JpYWwoaykgLSBsZmFjdG9yaWFsKG4gLSBrKTtcbiAgfTtcbiAgbGQubGNob29zZSA9IGxjaG9vc2U7XG4gIFxuICB2YXIgbGJldGEgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGxnYW1tYShhKSArIGxnYW1tYShiKSAtIGxnYW1tYShhICsgYik7XG4gIH07XG4gIGxkLmxiZXRhID0gbGJldGE7XG4gIFxuICB2YXIgbG9nICA9IE1hdGgubG9nO1xuICB2YXIgZXhwICA9IE1hdGguZXhwO1xuICB2YXIgYWJzICA9IE1hdGguYWJzO1xuICB2YXIgcG93ICA9IE1hdGgucG93O1xuICB2YXIgc3FydCA9IE1hdGguc3FydDtcbiAgdmFyIHBpICAgPSBNYXRoLlBJO1xuICBcbiAgLy8vLy8vLy8vLyBDb250aW5vdXMgZGlzdHJpYnV0aW9ucyAvLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBcbiAgbGQuYmV0YSA9IGZ1bmN0aW9uKHgsIHNoYXBlMSwgc2hhcGUyKSB7XG4gICAgaWYgKHggPiAxIHx8IHggPCAwKSB7XG4gICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuICAgIGlmKHNoYXBlMSA9PT0gMSAmJiBzaGFwZTIgPT09IDEpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKHNoYXBlMSAtIDEpICogbG9nKHgpICsgKHNoYXBlMiAtIDEpICogbG9nKDEgLSB4KSAtIGxiZXRhKHNoYXBlMSwgc2hhcGUyKTsgIFxuICAgIH1cbiAgfTtcbiAgXG4gIGxkLmNhdWNoeSA9IGZ1bmN0aW9uKHgsIGxvY2F0aW9uLCBzY2FsZSkge1xuICAgIHJldHVybiBsb2coc2NhbGUpIC0gbG9nKHBvdyh4IC0gbG9jYXRpb24sIDIpICsgcG93KHNjYWxlLCAyKSkgIC0gbG9nKHBpKTtcbiAgfTtcbiAgXG4gIGxkLm5vcm0gPSBmdW5jdGlvbih4LCBtZWFuLCBzZCkge1xuICAgICAgcmV0dXJuIC0wLjUgKiBsb2coMiAqIHBpKSAtbG9nKHNkKSAtIHBvdyh4IC0gbWVhbiwgMikgLyAoMiAqIHNkICogc2QpO1xuICB9O1xuXG4gIC8vIEEgYml2YXJpYXRlIE5vcm1hbCBkaXN0cmlidXRpb24gcGFyYW1ldGVyaXplZCBieSBhcnJheXMgb2YgdHdvIG1lYW5zIGFuZCBTRHMsIGFuZCBcbiAgLy8gdGhlIGNvcnJlbGF0aW9uLlxuICBsZC5iaXZhcm5vcm0gPSBmdW5jdGlvbih4LCBtZWFuLCBzZCwgY29ycikge1xuICAgIHZhciB6ID0gcG93KHhbMF0gLSBtZWFuWzBdLCAyKSAvIHBvdyhzZFswXSwgMikgK1xuICAgICAgICAgICAgcG93KHhbMV0gLSBtZWFuWzFdLCAyKSAvIHBvdyhzZFsxXSwgMikgLSBcbiAgICAgICAgICAgICgyICogY29yciAqICh4WzBdIC0gbWVhblswXSkgKiAoeFsxXSAtIG1lYW5bMV0pKSAvIChzZFswXSAqIHNkWzFdKTtcbiAgICB2YXIgbm9ybWFsaXppbmdfZmFjdG9yID0gLSggbG9nKDIpICsgbG9nKHBpKSArIGxvZyhzZFswXSkgKyBsb2coc2RbMV0pICsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSAqIGxvZygxIC0gcG93KGNvcnIsIDIpKSApOyBcbiAgICB2YXIgYml2YXJfbG9nX2RlbnMgPSBub3JtYWxpemluZ19mYWN0b3IgLSB6IC8gKDIgKiAoMSAtIHBvdyhjb3JyLCAyKSApICk7IFxuICAgIHJldHVybiBiaXZhcl9sb2dfZGVucztcbiAgfTtcbiAgXG5cbiAgbGQubGFwbGFjZSA9IGZ1bmN0aW9uKHgsIGxvY2F0aW9uLCBzY2FsZSkge1xuICAgIHJldHVybiAoLWFicyh4IC0gbG9jYXRpb24pL3NjYWxlKSAtIGxvZygyICogc2NhbGUpO1xuICB9O1xuICBcbiAgbGQuZGV4cCA9IGxkLmxhcGxhY2U7XG4gIFxuICBsZC5nYW1tYSA9IGZ1bmN0aW9uKHgsIHNoYXBlLCByYXRlKSB7XG4gICAgdmFyIHNjYWxlID0gMSAvIHJhdGU7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIH1cbiAgICBpZigoeCA9PT0gMCAmJiBzaGFwZSA9PT0gMSkgKSB7XG4gICAgICByZXR1cm4gLWxvZyhzY2FsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoc2hhcGUgLSAxKSAqIGxvZyh4KSAtIHggLyBzY2FsZSAtIGxnYW1tYShzaGFwZSkgLSBzaGFwZSAqIGxvZyhzY2FsZSk7XG4gICAgfVxuICB9O1xuICBcbiAgbGQuaW52Z2FtbWEgPSBmdW5jdGlvbih4LCBzaGFwZSwgc2NhbGUpIHtcbiAgICAgIGlmICh4IDw9IDApIHtcbiAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtKHNoYXBlICsgMSkgKiBsb2coeCkgLSBzY2FsZSAvIHggLSBsZ2FtbWEoc2hhcGUpICsgc2hhcGUgKiBsb2coc2NhbGUpO1xuICAgIH07XG4gIFxuICBsZC5sbm9ybSA9ICBmdW5jdGlvbih4LCBtZWFubG9nLCBzZGxvZykge1xuICAgIGlmICh4IDw9IDApIHtcbiAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuICAgIHJldHVybiAtbG9nKHgpIC0gMC41ICogbG9nKDIgKiBwaSkgLSBsb2coc2Rsb2cpIC0gXG4gICAgICAgICAgICBwb3cobG9nKHgpIC0gbWVhbmxvZywgMikgLyAoMiAqIHNkbG9nICogc2Rsb2cpO1xuICB9O1xuICBcbiAgbGQucGFyZXRvID0gZnVuY3Rpb24oeCwgc2NhbGUsIHNoYXBlKSB7XG4gICAgaWYgKHggPCBzY2FsZSkge1xuICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICB9XG4gICAgcmV0dXJuIGxvZyhzaGFwZSkgKyBzaGFwZSAqIGxvZyhzY2FsZSkgLSAoc2hhcGUgKyAxKSAqIGxvZyh4KTtcbiAgfTtcbiAgXG4gIGxkLnQgID0gIGZ1bmN0aW9uKHgsIGxvY2F0aW9uLCBzY2FsZSwgZGYpIHtcbiAgICBkZiA9IGRmID4gMWUxMDAgPyAxZTEwMCA6IGRmO1xuICAgIHJldHVybiBsZ2FtbWEoKGRmICsgMSkvMikgLSBsZ2FtbWEoZGYvMikgLSBsb2coc3FydChwaSAqIGRmKSAqIHNjYWxlKSArXG4gICAgICAgICAgIGxvZyhwb3coMSArICgxL2RmKSAqIHBvdygoeCAtIGxvY2F0aW9uKS9zY2FsZSwgMiksIC0oZGYgKyAxKS8yKSk7XG4gIH07XG4gIFxuICAvLyBUaGlzIGlzIGEgZGlyZWN0IGphdmFzY3JpcHQgdHJhbnNsYXRpb24gb2YgdGhlIFIgY29kZSB1c2VkIHRvIGV2YWx1YXRlXG4gIC8vIHRoZSBsb2cgZGVuc2l0eSBvZiBhIHdlaWJ1bGwgZGlzdHJpYnV0aW9uOiBcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3djaC9yLXNvdXJjZS9ibG9iL2IxNTZlM2E3MTE5NjdmNTgxMzFlMjNjMWIxZGMxZWE5MGUyZjBjNDMvc3JjL25tYXRoL2R3ZWlidWxsLmNcbiAgbGQud2VpYnVsbCA9IGZ1bmN0aW9uKHgsIHNoYXBlLCBzY2FsZSkge1xuICAgIGlmICh4IDwgMCkgcmV0dXJuIC1JbmZpbml0eTtcbiAgICBpZih4ID09PSAwICYmIHNoYXBlIDwgMSkgcmV0dXJuIEluZmluaXR5O1xuICAgIHZhciB0bXAxID0gcG93KHggLyBzY2FsZSwgc2hhcGUgLSAxKTtcbiAgICB2YXIgdG1wMiA9IHRtcDEgKiAoeCAvIHNjYWxlKTtcblx0ICByZXR1cm4gLXRtcDIgKyBsb2coc2hhcGUgKiB0bXAxIC8gc2NhbGUpO1xuICB9O1xuICBcbiAgLy8gVGhpcyBpcyBhIGRpcmVjdCBqYXZhc2NyaXB0IHRyYW5zbGF0aW9uIG9mIHRoZSBSIGNvZGUgdXNlZCB0byBldmFsdWF0ZVxuICAvLyB0aGUgbG9nIGRlbnNpdHkgb2YgYSBsb2dpc3RpYyBkaXN0cmlidXRpb246IFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2NoL3Itc291cmNlL2Jsb2IvYjE1NmUzYTcxMTk2N2Y1ODEzMWUyM2MxYjFkYzFlYTkwZTJmMGM0My9zcmMvbm1hdGgvZGxvZ2lzLmNcbiAgbGQubG9naXMgPSBmdW5jdGlvbih4LCBsb2NhdGlvbiwgc2NhbGUpIHtcbiAgICB4ID0gYWJzKCh4IC0gbG9jYXRpb24pIC8gc2NhbGUpO1xuICAgIHZhciBlID0gZXhwKC14KTtcbiAgICB2YXIgZiA9IDEuMCArIGU7XG4gICAgcmV0dXJuIC0oeCArIGxvZyhzY2FsZSAqIGYgKiBmKSk7ICAgIFxuICB9O1xuXG4gIGxkLmRpcmljaGxldCA9IGZ1bmN0aW9uKHgsIGFscGhhKSB7XG4gICAgdmFyIHN1bV9hbHBoYSA9IDA7XG4gICAgdmFyIHN1bV9sZ2FtbWFfYWxwaGEgPSAwO1xuICAgIHZhciBzdW1fYWxwaGFfc3ViXzFfbG9nX3ggPSAwO1xuICAgIHZhciBuID0gYWxwaGEubGVuZ3RoO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHN1bV9hbHBoYSArPSBhbHBoYVtpXTtcbiAgICAgIHN1bV9sZ2FtbWFfYWxwaGEgKz0gbGdhbW1hKGFscGhhW2ldKTtcbiAgICAgIHN1bV9hbHBoYV9zdWJfMV9sb2dfeCArPSAoYWxwaGFbaV0gLSAxKSAqIGxvZyh4W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGxnYW1tYShzdW1fYWxwaGEpIC0gc3VtX2xnYW1tYV9hbHBoYSArIHN1bV9hbHBoYV9zdWJfMV9sb2dfeDtcbiAgfTtcbiAgIFxuICAgIFxuICBsZC5leHAgPSBmdW5jdGlvbih4LCByYXRlKSB7XG4gICAgICByZXR1cm4geCA8IDAgPyAtSW5maW5pdHkgOiBsb2cocmF0ZSkgLXJhdGUgKiB4O1xuICB9O1xuICBcbiAgbGQudW5pZiA9IGZ1bmN0aW9uKHgsIG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gKHggPCBtaW4gfHwgeCA+IG1heCkgPyAtSW5maW5pdHkgOiBsb2coMSAvIChtYXggLSBtaW4pKTtcbiAgfTtcbiAgXG4gIC8vLy8vLy8vLy8gRGlzY3JldGUgZGlzdHJpYnV0aW9ucyAvLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIFxuICBsZC5iZXJuID0gZnVuY3Rpb24oeCwgcHJvYikge1xuICAgICAgcmV0dXJuICEoeCA9PT0gMCB8fCB4ID09PSAxKSA/IC1JbmZpbml0eSA6IGxvZyh4ICogcHJvYiArICgxIC0geCkgKiAoMSAtIHByb2IpKTtcbiAgfTtcbiAgXG4gIGxkLmNhdCA9IGZ1bmN0aW9uKHgsIHByb2JzKSB7XG4gICAgaWYoeCA8IDEgfHwgeCA+IHByb2JzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxvZyggcHJvYnNbeCAtIDFdICk7XG4gICAgfVxuICB9O1xuICBcbiAgbGQuYmlub20gPSBmdW5jdGlvbih4LCBzaXplLCBwcm9iKSB7XG4gICAgaWYoeCA+IHNpemUgfHwgeCA8IDApIHtcbiAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuICAgIGlmKHByb2IgPT09IDAgfHwgcHJvYiA9PT0gMSkge1xuICAgICAgcmV0dXJuIChzaXplICogcHJvYikgPT09IHggPyAwIDogLUluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gbGNob29zZShzaXplLCB4KSArIHggKiBsb2cocHJvYikgKyAoc2l6ZSAtIHgpICogbG9nKDEgLSBwcm9iKTtcbiAgfTtcbiAgXG4gIHZhciBtdWx0aW5vbSA9IGZ1bmN0aW9uKHgsIHByb2JzKSB7XG4gICAgdmFyIG4gPSB4Lmxlbmd0aDtcbiAgICB2YXIgc2l6ZSA9IDA7XG4gICAgdmFyIHRtcF90ZXJtID0gMDtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBpZihwcm9ic1tpXSA9PT0gMCkge1xuICAgICAgICBpZih4W2ldICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTsgIFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplICs9IHhbaV07XG4gICAgICAgIHRtcF90ZXJtICs9IHhbaV0gKiBsb2cocHJvYnNbaV0pIC0gbGdhbW1hKHhbaV0gKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxnYW1tYShzaXplICsgMSkgKyB0bXBfdGVybSA7XG4gIH07XG4gIFxuICBsZC5uYmlub20gPSBmdW5jdGlvbih4LCBzaXplLCBwcm9iKSB7XG4gICAgaWYoeCA8IDApIHtcbiAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuICAgIHJldHVybiBsY2hvb3NlKHggKyBzaXplIC0gMSwgc2l6ZSAtIDEpICsgeCAqIGxvZygxIC0gcHJvYikgKyBzaXplICogbG9nKHByb2IpO1xuICB9O1xuICBcbiAgbGQuaHlwZXIgPSBmdW5jdGlvbih4LCBtLCBuLCBrKSB7XG4gICAgaWYoeCA8IDAgfHwgeCA+IGspIHtcbiAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGNob29zZShtLCB4KSArIGxjaG9vc2Uobiwgay14KSAtIGxjaG9vc2UobStuLCBrKTtcbiAgICB9XG4gIH07XG4gIFxuICBsZC5wb2lzID0gZnVuY3Rpb24oeCwgbGFtYmRhKSB7XG4gICAgICByZXR1cm4geCA8IDAgPyAtSW5maW5pdHkgOiBsb2cobGFtYmRhKSAqIHggLSBsYW1iZGEgLSBsZmFjdG9yaWFsKHgpO1xuICB9O1xuICBcbiAgcmV0dXJuIGxkO1xufSkpOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBUaGlzIGJvaWxlciBwbGF0ZSBjb2RlIGhlcmUgaXMgdGFrZW4gZnJvbTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvdGVtcGxhdGVzL3JldHVybkV4cG9ydHMuanNcbi8vIEl0IHNob3VsZCBtYWtlIHNodXJlIHRoYXQgbW9kdWxlIGNhbiBiZSBpbXBvcnRlZCBib3RoIGluIHRoZSBicm93c2VyLFxuLy8gTm9kZSwgYW5kIGJ5IHVzaW5nIHRoZSBBc3luY2hyb25vdXMgTW9kdWxlIERlZmluaXRpb24gc3RhbmRhcmQuXG4vLyBJZiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQgaW4gdGhlIGJyb3dzZXIgaXQgd2lsbCBjcmVhdGVkIHRoZSBnbG9iYWxcbi8vIG9iamVjdCBtY21jIC5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgICAgICBkZWZpbmUoW10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgICAgIC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLFxuICAgICAgICAvLyBsaWtlIE5vZGUuXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgICAgIHJvb3QubWNtYyA9IGZhY3RvcnkoKTtcbiAgfVxufSh0aGlzLCBmdW5jdGlvbigpe1xuXG4vLy8gVGhlIGFjdHVhbCBtb2R1bGUgY29kZSBzdGFydHMgaGVyZSAvLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgXG4gIFxuICAvLy8vLy8vLy8vIEhlbHBlciBGdW5jdGlvbnMgLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBcbiAgLyoqIFJldHVybnMgYSByYW5kb20gcmVhbCBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAqL1xuICB2YXIgcnVuaWYgPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XG4gIH07XG4gIFxuICAvKiogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKi9cbiAgdmFyIHJ1bmlmX2Rpc2NyZXRlID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcbiAgfTtcbiAgXG4gIC8qKiBSZXR1cm5zIGEgcmFuZG9tIHJlYWwgbnVtYmVyIGZyb20gYSBub3JtYWwgZGlzdHJpYmJ1dGlvbiBkZWZpbmVkXG4gICAqICBieSBtZWFuIGFuZCBzZC4gXG4gICAqICBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0L2pzdGF0L2Jsb2IvbWFzdGVyL3NyYy9zcGVjaWFsLmpzICovXG4gIHZhciBybm9ybSA9IGZ1bmN0aW9uKG1lYW4sIHNkKSB7XG4gICAgdmFyIHUsIHYsIHgsIHksIHE7XG4gICAgZG8ge1xuICAgICAgdSA9IE1hdGgucmFuZG9tKCk7XG4gICAgICB2ID0gMS43MTU2ICogKE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICAgICAgeCA9IHUgLSAwLjQ0OTg3MTtcbiAgICAgIHkgPSBNYXRoLmFicyh2KSArIDAuMzg2NTk1O1xuICAgICAgcSA9IHggKiB4ICsgeSAqICgwLjE5NjAwICogeSAtIDAuMjU0NzIgKiB4KTtcbiAgICB9IHdoaWxlIChxID4gMC4yNzU5NyAmJiAocSA+IDAuMjc4NDYgfHwgdiAqIHYgPiAtNCAqIE1hdGgubG9nKHUpICogdSAqIHUpKTtcbiAgICBcbiAgICByZXR1cm4gKHYgLyB1KSAqIHNkICsgbWVhbjtcbiAgfTtcbiAgXG4gIFxuICAvKiogUmV0dXJucyBhIGRlZXAgY2xvbmUgb2Ygc3JjLCBzb3J0IG9mLi4uIEl0IG9ubHkgY29waWVzIGEgbGltaXRlZFxuICAgKiBudW1iZXIgb2YgdHlwZXMgYW5kLCBmb3IgZXhhbXBsZSwgZnVuY3Rpb24gYXJlIG5vdCBjb3BpZWQuIFxuICAgKiBGcm9tIGh0dHA6Ly9kYXZpZHdhbHNoLm5hbWUvamF2YXNjcmlwdC1jbG9uZVxuICAgKi9cbiAgdmFyIGRlZXBfY2xvbmUgPSBmdW5jdGlvbihzcmMpIHtcbiAgXHRmdW5jdGlvbiBtaXhpbihkZXN0LCBzb3VyY2UsIGNvcHlGdW5jKSB7XG4gIFx0XHR2YXIgbmFtZSwgcywgaSwgZW1wdHkgPSB7fTtcbiAgXHRcdGZvcihuYW1lIGluIHNvdXJjZSl7XG4gIFx0XHRcdC8vIHRoZSAoIShuYW1lIGluIGVtcHR5KSB8fCBlbXB0eVtuYW1lXSAhPT0gcykgY29uZGl0aW9uIGF2b2lkcyBjb3B5aW5nIHByb3BlcnRpZXMgaW4gXCJzb3VyY2VcIlxuICBcdFx0XHQvLyBpbmhlcml0ZWQgZnJvbSBPYmplY3QucHJvdG90eXBlLlx0IEZvciBleGFtcGxlLCBpZiBkZXN0IGhhcyBhIGN1c3RvbSB0b1N0cmluZygpIG1ldGhvZCxcbiAgXHRcdFx0Ly8gZG9uJ3Qgb3ZlcndyaXRlIGl0IHdpdGggdGhlIHRvU3RyaW5nKCkgbWV0aG9kIHRoYXQgc291cmNlIGluaGVyaXRlZCBmcm9tIE9iamVjdC5wcm90b3R5cGVcbiAgXHRcdFx0cyA9IHNvdXJjZVtuYW1lXTtcbiAgXHRcdFx0aWYoIShuYW1lIGluIGRlc3QpIHx8IChkZXN0W25hbWVdICE9PSBzICYmICghKG5hbWUgaW4gZW1wdHkpIHx8IGVtcHR5W25hbWVdICE9PSBzKSkpe1xuICBcdFx0XHRcdGRlc3RbbmFtZV0gPSBjb3B5RnVuYyA/IGNvcHlGdW5jKHMpIDogcztcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIGRlc3Q7XG4gIFx0fVxuICBcdGlmKCFzcmMgfHwgdHlwZW9mIHNyYyAhPSBcIm9iamVjdFwiIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzcmMpID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpe1xuICBcdFx0Ly8gbnVsbCwgdW5kZWZpbmVkLCBhbnkgbm9uLW9iamVjdCwgb3IgZnVuY3Rpb25cbiAgXHRcdHJldHVybiBzcmM7XHQvLyBhbnl0aGluZ1xuICBcdH1cbiAgXHRpZihzcmMubm9kZVR5cGUgJiYgXCJjbG9uZU5vZGVcIiBpbiBzcmMpe1xuICBcdFx0Ly8gRE9NIE5vZGVcbiAgXHRcdHJldHVybiBzcmMuY2xvbmVOb2RlKHRydWUpOyAvLyBOb2RlXG4gIFx0fVxuICBcdGlmKHNyYyBpbnN0YW5jZW9mIERhdGUpe1xuICBcdFx0Ly8gRGF0ZVxuICBcdFx0cmV0dXJuIG5ldyBEYXRlKHNyYy5nZXRUaW1lKCkpO1x0Ly8gRGF0ZVxuICBcdH1cbiAgXHRpZihzcmMgaW5zdGFuY2VvZiBSZWdFeHApe1xuICBcdFx0Ly8gUmVnRXhwXG4gIFx0XHRyZXR1cm4gbmV3IFJlZ0V4cChzcmMpOyAgIC8vIFJlZ0V4cFxuICBcdH1cbiAgXHR2YXIgciwgaSwgbDtcbiAgXHRpZihzcmMgaW5zdGFuY2VvZiBBcnJheSl7XG4gIFx0XHQvLyBhcnJheVxuICBcdFx0ciA9IFtdO1xuICBcdFx0Zm9yKGkgPSAwLCBsID0gc3JjLmxlbmd0aDsgaSA8IGw7ICsraSl7XG4gIFx0XHRcdGlmKGkgaW4gc3JjKXtcbiAgXHRcdFx0XHRyLnB1c2goZGVlcF9jbG9uZShzcmNbaV0pKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0gZWxzZSB7XG4gIFx0XHQvLyBnZW5lcmljIG9iamVjdHNcbiAgXHRcdHIgPSBzcmMuY29uc3RydWN0b3IgPyBuZXcgc3JjLmNvbnN0cnVjdG9yKCkgOiB7fTtcbiAgXHR9XG4gIFx0cmV0dXJuIG1peGluKHIsIHNyYywgZGVlcF9jbG9uZSk7XG4gIH07XG4gIFxuICAvKiogU3BlY2lhbGl6ZWQgY2xvbmUgZnVuY3Rpb24gdGhhdCBvbmx5IGNsb25lcyBzY2FsYXJzIGFuZCBuZXN0ZWQgYXJyYXlzIHdoZXJlXG4gICAqIGVhY2ggYXJyYXkgZWl0aGVyIGNvbnNpc3RzIG9mIGFsbCBhcnJheXMgb3IgYWxsIG51bWJlcnMuIFRoaXMgZnVuY3Rpb25cbiAgICogaXMgbWVhbnQgYXMgYSBmYXN0IHdheSBvZiBjbG9uaW5nIHBhcmFtZXRlciBkcmF3cyB3aXRoaW4gdGhlIG1jbWMgc2FtcGxpbmdcbiAgICogbG9vcC5cbiAgICovXG4gIHZhciBjbG9uZV9wYXJhbV9kcmF3ID0gZnVuY3Rpb24oeCkge1xuICAgIGlmKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIGlmKEFycmF5LmlzQXJyYXkoeFswXSkpIHtcbiAgICAgICAgLy8geCBpcyBhbiBhcnJheSBvZiBhcnJheXMgc28gd2UgbmVlZCB0byBjbG9uZSBpdCByZWN1cnNpdmVseVxuICAgICAgICB2YXIgeF9jb3B5ID0gW107XG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbmd0aCA9IHgubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB4X2NvcHkucHVzaChjbG9uZV9wYXJhbV9kcmF3KHhbaV0pKTtcbiAgICAgICAgfSBcbiAgICAgICAgcmV0dXJuIHhfY29weTtcbiAgICAgIH0gZWxzZSB7IC8vIFdlJ2xsIGFzc3VtZSB4IGlzIGEgYXJyYXlzIG9mIHNjYWxhcnNcbiAgICAgICAgcmV0dXJuIHguc2xpY2UoMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gV2UnbGwgYXNzdW1lIHggaXMgYSBzY2FsYXJcbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfTtcbiAgXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgb2JqZWN0IGlzIGEgbnVtYmVyLlxuICAgKi9cbiAgdmFyIGlzX251bWJlciA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT0gXCJudW1iZXJcIiB8fCAodHlwZW9mIG9iamVjdCA9PSBcIm9iamVjdFwiICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKTtcbiAgfTtcbiAgXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIChwb3NzaWJseSBtdWx0aWRpbWVuc2lvbmFsL25lc3RlZCkgYXJyYXkuXG4gICAqIEBwYXJhbSBkaW0gLSBBbiBhcnJheSBnaXZpbmcgdGhlIGRpbWVuc2lvbiBvZiB0aGUgYXJyYXkuIEZvciBleGFtcGxlLFxuICAgKiAgIFs1XSB3b3VsZCB5aWVsZCBhIDUgZWxlbWVudCBhcnJheSwgYW5kIFszLDNdIHdvdWxkIHlpZWxkIGEgMyBieSAzIG1hdHJpeC5cbiAgICogQHBhcmFtIGluaXQgLSBBIHZhbHVlIG9yIGEgZnVuY3Rpb24gdXNlZCB0byBmaWxsIGluIHRoZSBlYWNoIGVsZW1lbnQgaW5cbiAgICogICB0aGUgYXJyYXkuIElmIGl0IGlzIGEgZnVuY3Rpb24gaXQgc2hvdWxkIHRha2Ugbm8gYXJndW1lbnRzLCBpdCB3aWxsIGJlIFxuICAgKiAgIGV2YWx1YXRlZCBvbmNlIGZvciBlYWNoIGVsZW1lbnQsIGFuZCBpdCdzIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWQgdG9cbiAgICogICBmaWxsIGluIGVhY2ggZWxlbWVudC5cbiAgICogQGV4YW1wbGUgXG4gICAqIC8vIFRoZSBmb2xsb3dpbmcgd291bGQgcmV0dXJuIFtbMSwxXSxbMSwxXSxbMSwxXV1cbiAgICogY3JlYXRlX2FycmF5KFsyLDNdLCAxKVxuICAgKi9cbiAgdmFyIGNyZWF0ZV9hcnJheSA9IGZ1bmN0aW9uKGRpbSwgaW5pdCkge1xuICAgIHZhciBhcnIgPSBuZXcgQXJyYXkoZGltWzBdKTtcbiAgICB2YXIgaTtcbiAgICBpZihkaW0ubGVuZ3RoID09IDEpIHsgLy8gRmlsbCBpdCB1cCB3aXRoIGluaXRcbiAgICAgIGlmKHR5cGVvZiBpbml0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHtcbiAgICAgICAgICBhcnJbaV0gPSBpbml0KCk7XG4gICAgICAgIH0gIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHtcbiAgICAgICAgICBhcnJbaV0gPSBpbml0O1xuICAgICAgICB9IFxuICAgICAgfVxuICAgIH0gZWxzZSBpZihkaW0ubGVuZ3RoID4gMSkge1xuICAgICAgZm9yKGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHtcbiAgICAgICAgYXJyW2ldID0gY3JlYXRlX2FycmF5KGRpbS5zbGljZSgxKSwgaW5pdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IFwiY3JlYXRlX2FycmF5IGNhbid0IGNyZWF0ZSBhIGRpbWVuc2lvbmxlc3MgYXJyYXlcIjtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbiAgfTtcbiAgXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpbWVuc2lvbnMgb2YgYSBwb3NzaWJseSBuZXN0ZWQgYXJyYXkgYXMgYW4gYXJyYXkuIEZvciBcbiAgICogZXhhbXBsZSwgYXJyYXlfZGltKCBbWzEsIDJdLCBbMSwgMl1dICkgc2hvdWxkIHJldHVybiBbMiwgMl1cbiAgICogQXNzdW1lcyB0aGF0IGFsbCBhcnJheXMgaW5zaWRlIGFub3RoZXIgYXJyYXkgYXJlIG9mIHRoZSBzYW1lIGxlbmd0aC5cbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2hvdWxkIHJldHVybiBbNCwgMiwgMV1cbiAgICogYXJyYXlfZGltKGNyZWF0ZV9hcnJheShbNCwgMiwgMV0sIDApKVxuICAgKi9cbiAgdmFyIGFycmF5X2RpbSA9IGZ1bmN0aW9uKGEpIHtcbiAgICBpZihBcnJheS5pc0FycmF5KGFbMF0pKSB7XG4gICAgICByZXR1cm4gW2EubGVuZ3RoXS5jb25jYXQoYXJyYXlfZGltKGFbMF0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFthLmxlbmd0aF07XG4gICAgfVxuICB9O1xuICBcbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0d28gYXJyYXlzIGFyZSBlcXVhbCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNvbnRhaW4gdGhlIHNhbWUgZWxlbWVudHNcbiAgICogYXMganVkZ2VkIGJ5IHRoZSBcIj09XCIgb3BlcmF0b3IuIFJldHVybnMgdHJ1ZSBvciBmYWxzZS5cbiAgICogQWRhcHRlZCBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE0ODUzOTc0LzEwMDE4NDhcbiAgICovIFxuICB2YXIgYXJyYXlfZXF1YWwgPSBmdW5jdGlvbiAoYTEsIGEyKSB7XG4gICAgICBpZiAoYTEubGVuZ3RoICE9IGEyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgbmVzdGVkIGFycmF5c1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGExW2ldKSAmJiBBcnJheS5pc0FycmF5KGEyW2ldKSkge1xuICAgICAgICAgICAgICAvLyByZWN1cnNlIGludG8gdGhlIG5lc3RlZCBhcnJheXNcbiAgICAgICAgICAgICAgaWYgKCFhcnJheV9lcXVhbChhMVtpXSwgYTJbaV0pKSByZXR1cm4gZmFsc2U7ICAgICAgIFxuICAgICAgICAgIH0gICAgICAgICAgIFxuICAgICAgICAgIGVsc2UgaWYgKGExW2ldICE9IGEyW2ldKSB7IFxuICAgICAgICAgICAgICAvLyBXYXJuaW5nIC0gdHdvIGRpZmZlcmVudCBvYmplY3QgaW5zdGFuY2VzIHdpbGwgbmV2ZXIgYmUgZXF1YWw6IHt4OjIwfSAhPSB7eDoyMH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIFxuICAgICAgICAgIH0gICAgICAgICAgIFxuICAgICAgfSAgICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBcbiAgLyoqXG4gICAqIFRyYXZlcnNlcyBhIHBvc3NpYmx5IG5lc3RlZCBhcnJheSBhIGFuZCBhcHBsaWVzIGZ1biB0byBhbGwgXCJsZWFmIG5vZGVzXCIsIFxuICAgKiB0aGF0IGlzLCB2YWx1ZXMgdGhhdCBhcmUgbm90IGFycmF5cy4gUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgc2FtZSBzaXplIGFzXG4gICAqIGEuXG4gICAqL1xuICB2YXIgbmVzdGVkX2FycmF5X2FwcGx5ID0gZnVuY3Rpb24oYSwgZnVuKSB7XG4gICAgaWYoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShhLmxlbmd0aCk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHRbaV0gPSBuZXN0ZWRfYXJyYXlfYXBwbHkoYVtpXSwgZnVuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW4oYSk7XG4gICAgfVxuICB9O1xuICBcbiAgLyoqIFJhbmRvbWl6aW5nIHRoZSBhcnJheSBlbGVtZW50IG9yZGVyIGluLXBsYWNlLiBVc2luZyBEdXJzdGVuZmVsZFxuICAgKiBzaHVmZmxlIGFsZ29yaXRobS4gQWRhcHRlZCBmcm9tIGhlcmU6IFxuICAgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMjY0Njg2NC8xMDAxODQ4XG4gICAqL1xuICBmdW5jdGlvbiBzaHVmZmxlX2FycmF5KGFycmF5KSB7XG4gICAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgIHZhciBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XG4gICAgICAgICAgdmFyIHRlbXAgPSBhcnJheVtpXTtcbiAgICAgICAgICBhcnJheVtpXSA9IGFycmF5W2pdO1xuICAgICAgICAgIGFycmF5W2pdID0gdGVtcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbmVzdGVkX2FycmF5X2FwcGx5LCB0aGF0IGlzLCB0cmF2ZXJzZXMgYSBwb3NzaWJseVxuICAgKiBuZXN0ZWQgYXJyYXkgYSBhbmQgYXBwbGllcyBmdW4gdG8gYWxsIFwibGVhZiBub2Rlc1wiIGFuZCByZXR1cm5zIGFuIGFycmF5IFxuICAgKiBvZiB0aGUgc2FtZSBzaXplIGFzIGEuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgbmVzdGVkX2FycmF5X3JhbmRvbV9hcHBseVxuICAgKiBicmFuY2hlcyByYW5kb21seS5cbiAgICovXG4gIHZhciBuZXN0ZWRfYXJyYXlfcmFuZG9tX2FwcGx5ID0gZnVuY3Rpb24oYSwgZnVuKSB7XG4gICAgaWYoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgYXJyYXlfaXMgPSBbXTtcbiAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGFycmF5X2lzW2ldID0gaTtcbiAgICAgIH1cbiAgICAgIHNodWZmbGVfYXJyYXkoYXJyYXlfaXMpO1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgXG4gICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJyYXlfaSA9IGFycmF5X2lzW2ldO1xuICAgICAgICByZXN1bHRbYXJyYXlfaV0gPSBuZXN0ZWRfYXJyYXlfYXBwbHkoYVthcnJheV9pXSwgZnVuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW4oYSk7XG4gICAgfVxuICB9O1xuICBcbiAgLyoqXG4gICAqIEFsbG93cyBhIHByZXR0eSB3YXkgb2Ygc2V0dGluZyBkZWZhdWx0IG9wdGlvbnMgd2hlcmUgdGhlIGRlZnVsdHMgY2FuIGJlXG4gICAqIG92ZXJyaWRkZW4gYnkgYW4gb3B0aW9ucyBvYmplY3QuXG4gICAqICBAcGFyYW0gb3B0aW9uX25hbWUgLSB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uIGFzIGEgc3RyaW5nXG4gICAqICBAcGFyYW0gbXlfb3B0aW9ucyAtIGFuIG9wdGlvbiBvYmplY3QgdGhhdCBjb3VsZCBoYXZlIG9wdGlvbl9uYW1lIFxuICAgKiAgICBhcyBhIG1lbWJlci5cbiAgICogQHBhcmFtIGRlZmF1bF92YWx1ZSAtIGRlZnVsdCB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGlmIG9wdGlvbl9uYW1lIFxuICAgKiAgIGlzIG5vdCBkZWZpbmVkIGluIG15X29wdGlvbnMuXG4gICAqIEBleGFtcGxlXG4gICAqIHZhciBteV9vcHRpb25zID0ge3BpOiAzLjE0MTU5fVxuICAgKiB2YXIgcGkgPSBnZXRfb3B0aW9uKFwicGlcIiwgbXlfb3B0aW9ucywgMy4xNClcbiAgICovXG4gIC8vIFByZXR0eSB3YXkgb2Ygc2V0dGluZyBkZWZhdWx0IG9wdGlvbnMgd2hlcmUgdGhlIGRlZmF1bHRzIGNhbiBiZSBvdmVycmlkZGVuXG4gIC8vIGJ5IGFuIG9wdGlvbnMgb2JqZWN0LiBGb3IgZXhhbXBsZTpcbiAgLy8gdmFyIHBpID0gZ2V0X29wdGlvbihcInBpXCIsIG15X29wdGlvbnMsIDMuMTQpXG4gIHZhciBnZXRfb3B0aW9uID0gZnVuY3Rpb24ob3B0aW9uX25hbWUsIG9wdGlvbnMsIGRlZmF1bF92YWx1ZSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHJldHVybiBvcHRpb25zLmhhc093blByb3BlcnR5KG9wdGlvbl9uYW1lKSAmJiBcbiAgICAgICAgICAgb3B0aW9uc1tvcHRpb25fbmFtZV0gIT09IHVuZGVmaW5lZCAgJiYgXG4gICAgICAgICAgIG9wdGlvbnNbb3B0aW9uX25hbWVdICE9PSBudWxsID8gb3B0aW9uc1tvcHRpb25fbmFtZV0gOiBkZWZhdWxfdmFsdWU7XG4gIH07XG4gIFxuICAvKiogVmVyc2lvbiBvZiBnZXRfb3B0aW9uIHdoZXJlIHRoZSBvcHRpb24gc2hvdWxkIGJlIGEgb25lIG9yIG11bHRpLWRpbWVuc2lvbmFsXG4gICAqIGFycmF5IGFuZCB3aGVyZSB0aGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBlaXRoZXIgYnkgYSBzY2FsYXIgb3IgYnkgYW4gYXJyYXkuXG4gICAqIElmIGl0J3MgYSBzY2FsYXIgdGhlIHRoYXQgc2NhbGFyIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBhcnJheSB3aXRoIFxuICAgKiBkaW0gZGltZW5zaW9ucy5cbiAgICogXG4gICAqL1xuICB2YXIgZ2V0X211bHRpZGltX29wdGlvbiA9IGZ1bmN0aW9uKG9wdGlvbl9uYW1lLCBvcHRpb25zLCBkaW0sIGRlZmF1bF92YWx1ZSkge1xuICAgIHZhciB2YWx1ZSA9IGdldF9vcHRpb24ob3B0aW9uX25hbWUsIG9wdGlvbnMsIGRlZmF1bF92YWx1ZSk7XG4gICAgIGlmKCEgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICB2YWx1ZSA9IGNyZWF0ZV9hcnJheShkaW0sIHZhbHVlKTtcbiAgICAgfSBcbiAgICAgaWYoISBhcnJheV9lcXVhbCggYXJyYXlfZGltKHZhbHVlKSwgZGltKSkge1xuICAgICAgIHRocm93IFwiVGhlIG9wdGlvbiBcIiArIG9wdGlvbl9uYW1lICsgXCIgaXMgb2YgZGltZW5zaW9uIFtcIiArIFxuICAgICAgICAgICAgIGFycmF5X2RpbSh2YWx1ZSkgKyBcIl0gYnV0IHNob3VsZCBiZSBbXCIgKyBkaW0gKyBcIl0uXCI7XG4gICAgfVxuICAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIFxuICAvLy8vLy8vLy8vIEZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgcGFyYW1ldGVyIG9iamVjdHMgLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBcbiAgLyoqXG4gICAqIFJldHVybnMgYSBmaXhlZCAoc2FtZSBldmVyeSB0aW1lKSBudW1iZXIgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgICogYSBwYXJhbWV0ZXIgb2YgYSBjZXJ0YWluIHR5cGUsIHBvc3NpYmx5IHdpdGggbG93ZXIgYW5kIHVwcGVyIGJvdW5kcy5cbiAgICogVGhlIHBvc3NpbGUgdHlwZXMgYXJlIFwicmVhbFwiLCBcImludFwiLCBhbmQgXCJiaW5hcnlcIi5cbiAgICovXG4gIHZhciBwYXJhbV9pbml0X2ZpeGVkID0gZnVuY3Rpb24odHlwZSwgbG93ZXIsIHVwcGVyKSB7XG4gICAgaWYobG93ZXIgPiB1cHBlcikge1xuICAgICAgdGhyb3cgXCJDYW4gbm90IGluaXRpYWxpemUgcGFyYW1ldGVyIHdoZXJlIGxvd2VyIGJvdW5kID4gdXBwZXIgYm91bmRcIjtcbiAgICB9XG4gICAgaWYodHlwZSA9PT0gXCJyZWFsXCIpIHtcbiAgICAgIGlmKGxvd2VyID09PSAtSW5maW5pdHkgJiYgdXBwZXIgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgICB9IGVsc2UgaWYobG93ZXIgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gdXBwZXIgLSAwLjU7XG4gICAgICB9IGVsc2UgaWYodXBwZXIgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBsb3dlciArIDAuNTtcbiAgICAgIH0gZWxzZSBpZihsb3dlciA8PSB1cHBlcikge1xuICAgICAgICByZXR1cm4gKGxvd2VyICsgdXBwZXIpIC8gMjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYodHlwZSA9PT0gXCJpbnRcIikge1xuICAgICAgaWYobG93ZXIgPT09IC1JbmZpbml0eSAmJiB1cHBlciA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYobG93ZXIgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gdXBwZXIgLSAxO1xuICAgICAgfSBlbHNlIGlmKHVwcGVyID09PSBJbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gbG93ZXIgKyAxO1xuICAgICAgfSBlbHNlIGlmKGxvd2VyIDw9IHVwcGVyKXtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKGxvd2VyICsgdXBwZXIpIC8gMik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKHR5cGUgPT09IFwiYmluYXJ5XCIpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICB0aHJvdyBcIkNvdWxkIG5vdCBpbml0aWFsaXplIHBhcmFtZXRlciBvZiB0eXBlIFwiICsgdHlwZSArIFwiW1wiICsgbG93ZXIgKyBcIiwgXCIgKyB1cHBlciArIFwiXVwiO1xuICB9O1xuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlcyBwYXJhbXNfdG9fY29tcGxldGUsIGFuIG9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlciBkZXNjcmlwdGlvbnMsIFxuICAgKiBhbmQgaW5pdGlhbGl6ZXMgbm9uLWluaXRpYWxpemVkIHBhcmFtZXRlcnMuIFRoaXMgbW9kaWZpZWQgdmVyc2lvbiBvZlxuICAgKiBwYXJhbXNfdG9fY29tcGxldGUgaXMgcmV0dXJuZWQgYXMgYSBkZWVwIGNvcHkgYW5kIG5vdCBtb2RpZmllZCBpbiBwbGFjZS5cbiAgICogSW5pdGlhbGl6YXRpb24gaXMgZG9uZSBieSBzdXBwbHlpbmcgYSBwYXJhbV9pbml0IGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlXG4gICAqIGZ1bmN0aW9uKHR5cGUsIGxvd2VyLCB1cHBlcikgdGhhdCBzaG91bGQgcmV0dXJuIGEgc2luZ2xlIG51bWJlciBcbiAgICogKGxpa2UgcGFyYW1faW5pdF9maXhlZCwgZm9yIGV4YW1wbGUpLlxuICAgKiBAZXhhbXBsZVxuICAgKiB2YXIgcGFyYW1zID0geyBcIm11XCI6IHtcInR5cGVcIjogXCJyZWFsXCJ9IH1cbiAgICogcGFyYW1zID0gY29tcGxldGVfcGFyYW1zKHBhcmFtcyk7XG4gICAqIC8vIHBhcmFtcyBzaG91bGQgbm93IGJlOlxuICAgKiAvLyAge1wibXVcIjogeyBcInR5cGVcIjogXCJyZWFsXCIsIFwiZGltXCI6IFsxXSwgXCJ1cHBlclwiOiBJbmZpbml0eSxcbiAgICogLy8gICAgICAgICAgIFwibG93ZXJcIjogLUluZmluaXR5LCBcImluaXRcIjogMC41IH19XG4gICAqLyBcbiAgdmFyIGNvbXBsZXRlX3BhcmFtcyAgPSBmdW5jdGlvbihwYXJhbXNfdG9fY29tcGxldGUsIHBhcmFtX2luaXQpIHtcbiAgICB2YXIgcGFyYW1zID0gZGVlcF9jbG9uZShwYXJhbXNfdG9fY29tcGxldGUpO1xuICAgIGZvciAodmFyIHBhcmFtX25hbWUgaW4gcGFyYW1zKSB7IGlmICghcGFyYW1zLmhhc093blByb3BlcnR5KHBhcmFtX25hbWUpKSBjb250aW51ZTtcbiAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1twYXJhbV9uYW1lXTtcbiAgICAgIGlmKCAhcGFyYW0uaGFzT3duUHJvcGVydHkoXCJ0eXBlXCIpKSB7XG4gICAgICAgIHBhcmFtLnR5cGUgPSBcInJlYWxcIjtcbiAgICAgIH1cbiAgICAgIGlmKCFwYXJhbS5oYXNPd25Qcm9wZXJ0eShcImRpbVwiKSkge1xuICAgICAgICBwYXJhbS5kaW0gPSBbMV07XG4gICAgICB9XG4gICAgICBpZihpc19udW1iZXIocGFyYW0uZGltKSkge1xuICAgICAgICBwYXJhbS5kaW0gPSBbcGFyYW0uZGltXTtcbiAgICAgIH1cbiAgICAgIGlmKHBhcmFtLnR5cGUgPT0gXCJiaW5hcnlcIikge1xuICAgICAgICBwYXJhbS51cHBlciA9IDE7XG4gICAgICAgIHBhcmFtLmxvd2VyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmKCFwYXJhbS5oYXNPd25Qcm9wZXJ0eShcInVwcGVyXCIpKSB7XG4gICAgICAgIHBhcmFtLnVwcGVyID0gSW5maW5pdHk7XG4gICAgICB9XG4gICAgICBpZighcGFyYW0uaGFzT3duUHJvcGVydHkoXCJsb3dlclwiKSkge1xuICAgICAgICBwYXJhbS5sb3dlciA9IC1JbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYocGFyYW0uaGFzT3duUHJvcGVydHkoXCJpbml0XCIpKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMganVzdCBhIG51bWJlciBvciBhIG5lc3RlZCBhcnJheSB3ZSBsZWF2ZSBpdCBhbG9uZSwgYnV0IGlmLi4uXG4gICAgICAgIGlmKGFycmF5X2VxdWFsKHBhcmFtLmRpbSwgWzFdKSAmJiB0eXBlb2YgcGFyYW0uaW5pdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gcGFyYW0uaW5pdCBpcyBhIGZ1bmN0aW9uLCB1c2UgdGhhdCB0byBpbml0aWFsaXplIHRoZSBwYXJhbWV0ZXIuXG4gICAgICAgICAgcGFyYW0uaW5pdCA9IHBhcmFtLmluaXQoKTtcbiAgICAgICAgfSBlbHNlIGlmKCFhcnJheV9lcXVhbChwYXJhbS5kaW0sIFsxXSkgJiYgIUFycmF5LmlzQXJyYXkocGFyYW0uaW5pdCkpIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhIG11bHRpZGltZW5zaW9uYWwgcGFyYW1ldGVyIHdoZXJlIHRoZSBwYXJhbS5pbml0IGV4aXN0IGJ1dFxuICAgICAgICAvLyBpcyBub3QgYW4gYXJyYXkuIFRoZW4gYXNzdW1lIGl0IGlzIGEgbnVtYmVyIG9yIGEgZnVuY3Rpb24gYW5kIHVzZVxuICAgICAgICAvLyBpdCB0byBpbml0aWFsaXplIHRoZSBwYXJhbWV0ZXIuXG4gICAgICAgIHBhcmFtLmluaXQgPSBjcmVhdGVfYXJyYXkocGFyYW0uZGltLCBwYXJhbS5pbml0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgLy8gV2UgdXNlIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxuICAgICAgICBpZihhcnJheV9lcXVhbChwYXJhbS5kaW0sIFsxXSkpIHtcbiAgICAgICAgICBwYXJhbS5pbml0ID0gcGFyYW1faW5pdChwYXJhbS50eXBlLCBwYXJhbS5sb3dlciwgcGFyYW0udXBwZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmFtLmluaXQgPSBjcmVhdGVfYXJyYXkocGFyYW0uZGltLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbV9pbml0KHBhcmFtLnR5cGUsIHBhcmFtLmxvd2VyLCBwYXJhbS51cHBlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcbiAgXG4gIFxuICAvLy8vLy8vLy8vIFN0ZXBwZXIgRnVuY3Rpb25zIC8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgXG4gIFxuICAvKipcbiAgICogQGludGVyZmFjZVxuICAgKiBBIFN0ZXBwZXIgaXMgYW4gb2JqZWN0IHJlc3BvbnNpYmxlIGZvciBwdXNoaW5nIGFyb3VuZCBvbmVcbiAgICogb3IgbW9yZSBwYXJhbWV0ZXIgdmFsdWVzIGluIGEgc3RhdGUgYWNjb3JkaW5nIHRvIHRoZSBkaXN0cmlidXRpb25cbiAgICogZGVmaW5lZCBieSB0aGUgbG9nIHBvc3Rlcmlvci4gVGhpcyBkZWZpbmVzIHRoZSBTdGVwcGVyIFwiaW50ZXJmYWNlXCIsXG4gICAqIHdoZXJlIFwiaW50ZXJmYWNlXCIgbWVhbnMgdGhhdCBTdGVwcGVyIGRlZmluZXMgYSBjbGFzcyB0aGF0IGlzIG5ldmVyXG4gICAqIG1lYW50IHRvIGJlIGluc3RhbnRpYXRlZCwgYnV0IGp1c3QgdG8gYmUgc3ViY2xhc3NlZCBieSBzcGVjaWFsaXplZFxuICAgKiBzdGVwcGVyIGZ1bmN0aW9ucy5cbiAgICogQGludGVyZmFjZVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVyIGRlZmluaXRpb25zLCBmb3IgZXhhbXBsZTpcbiAgICogICB7XCJtdVwiOiB7IFwidHlwZVwiOiBcInJlYWxcIiwgXCJkaW1cIjogWzFdLCBcInVwcGVyXCI6IEluZmluaXR5LCBcbiAgICogICBcImxvd2VyXCI6IC1JbmZpbml0eSwgXCJpbml0XCI6IDAuNSB9fVxuICAgKiAgIFRoZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIFwiY29tcGxldGVcIiwgdGhhdCBpcyxcbiAgICogICBzcGVjaWZ5aW5nIGFsbCByZWxldmFudCBhdHRyaWJ1dGVzIHN1Y2ggYXMgZGltLCBsb3dlciBhbmQgdXBwZXIuXG4gICAqIEBwYXJhbSBzdGF0ZSAtIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycyBpbiBwYXJhbXNcbiAgICogICAoYW5kIHBvc3NpYmx5IG1vcmUpLiBUaGUgcGFyYW1ldGVyIG5hbWVzIGFyZSBnaXZlbiBhcyBrZXlzIGFuZCB0aGUgc3RhdGVzXG4gICAqICAgYXMgc2NhbGFycyBvciwgcG9zc2libHkgbmVzdGVkLCBhcnJheXMuIEZvciBleGFtcGxlOlxuICAgKiAgIHttdTogMTAsIHNpZ21hOiA1LCBiZXRhOiBbMSwgMi41XX1cbiAgICogQHBhcmFtIGxvZ19wb3N0IC0gQSBmdW5jdGlvbiAqdGFraW5nIG5vIHBhcmFtZXRlcnMqIHRoYXQgcmV0dXJucyB0aGVcbiAgICogICBsb2cgZGVuc2l0eSB0aGF0IGRlcGVuZHMgb24gdGhlIHN0YXRlLiBUaGF0IGlzLCB0aGUgdmFsdWUgb2YgbG9nX3Bvc3RcbiAgICogICBzaG91bGQgY2hhbmdlIGlmIHRoZSB0aGUgdmFsdWVzIGluIHN0YXRlIGFyZSBjaGFuZ2VkLlxuICBcbiAgICovXG4gIHZhciBTdGVwcGVyID0gZnVuY3Rpb24ocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QpIHtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5sb2dfcG9zdCA9IGxvZ19wb3N0O1xuICB9O1xuICBcbiAgLyoqXG4gICAqIFRha2VzIGEgc3RlcCBpbiB0aGUgcGFyYW1ldGVyIHNwYWNlLiBTaG91bGQgcmV0dXJuIHRoZSBuZXcgc3RhdGUsXG4gICAqIGJ1dCBpcyBtYWlubHkgY2FsbGVkIGZvciBpdCdzIHNpZGUgZWZmZWN0IG9mIG1ha2luZyBhIGNoYW5nZSBpbiB0aGVcbiAgICogc3RhdGUgb2JqZWN0LlxuICAgKi9cbiAgU3RlcHBlci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IFwiRXZlcnkgU3RlcHBlciBuZWVkIHRvIGltcGxlbWVudCBzdGVwKClcIjtcbiAgfTtcbiAgXG4gIC8qKlxuICAgKiBJZiBpbXBsZW1lbnRlZCwgbWFrZXMgdGhlIHN0ZXBwZXIgYWRhcHQgd2hpbGUgc3RlcHBpbmcuXG4gICAqLyBcbiAgU3RlcHBlci5wcm90b3R5cGUuc3RhcnRfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIE9wdGlvbmFsLCBzb21lIHN0ZXBwZXJzIG1pZ2h0IG5vdCBiZSBhZGFwdGl2ZS4gKi8gXG4gIH07XG4gIFxuICAvKipcbiAgICogSWYgaW1wbGVtZW50ZWQsIG1ha2VzIHRoZSBzdGVwcGVyIGNlYXNlIGFkYXB0aW5nIHdoaWxlIHN0ZXBwaW5nLlxuICAgKi8gXG4gIFN0ZXBwZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIE9wdGlvbmFsLCBzb21lIHN0ZXBwZXJzIG1pZ2h0IG5vdCBiZSBhZGFwdGl2ZS4gKi8gXG4gIH07XG4gIFxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmcgaW5mbyByZWdhcmRpbmcgdGhlIHN0ZXBwZXIuXG4gICAqLyBcbiAgU3RlcHBlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGggaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHN0ZXBwZXIuXG4gICAgcmV0dXJuIHt9O1xuICB9O1xuICBcbiAgXG4gIC8qKlxuICAgKiBAY2xhc3NcbiAgICogQGltcGxlbWVudHMge1N0ZXBwZXJ9XG4gICAqIENvbnN0cnVjdG9yIGZvciBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBtZXRyb3BvbGlzIHN0ZXAgaW5cbiAgICogdGhlIEFkYXB0aXZlIE1ldHJvcG9saXMtV2l0aGluLUdpYmJzIGFsZ29yaXRobSBpbiBcIkV4YW1wbGVzIG9mIEFkYXB0aXZlIE1DTUNcIlxuICAgKiBieSBSb2JlcnRzIGFuZCBSb3NlbnRoYWwgKDIwMDgpLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQW4gb2JqZWN0IHdpdGggYSBzaW5nbGUgcGFyYW1ldGVyIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSBzdGF0ZSAtIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIGxvZ19wb3N0IC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGxvZyBkZW5zaXR5IHRoYXQgZGVwZW5kcyBvbiB0aGUgc3RhdGUuIFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMgdG8gdGhlIHN0ZXBwZXIuXG4gICAqIEBwYXJhbSBnZW5lcmF0ZV9wcm9wb3NhbCAtIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvcG9zYWwgKGFzIGEgbnVtYmVyKVxuICAgKiB3aXRoIHNpZ25hdHVyZSBmdW5jdGlvbihwYXJhbV9zdGF0ZSwgbG9nX3NjYWxlKSB3aGVyZSBwYXJhbV9zdGF0ZSBpcyBhXG4gICAqIG51bWJlciBhbmQgbG9nX3NjYWxlIGRlZmluZXMgdGhlIHNjYWxlIG9mIHRoZSBwcm9wb3NhbCBzb21laG93LlxuICAqL1xuICB2YXIgT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIgPSBmdW5jdGlvbihwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucywgZ2VuZXJhdGVfcHJvcG9zYWwpIHtcbiAgICBTdGVwcGVyLmNhbGwodGhpcywgcGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QpO1xuICAgIFxuICAgIHZhciBwYXJhbV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTtcbiAgICBpZihwYXJhbV9uYW1lcy5sZW5ndGggICE9IDEpIHtcbiAgICAgIHRocm93IFwiT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIgY2FuIG9ubHkgaGFuZGxlIG9uZSBwYXJhbWV0ZXIuXCI7XG4gICAgfVxuICAgIHRoaXMucGFyYW1fbmFtZSA9IHBhcmFtX25hbWVzWzBdO1xuICAgIHZhciBwYXJhbSA9IHRoaXMucGFyYW1zW3RoaXMucGFyYW1fbmFtZV07XG4gICAgaWYoIWFycmF5X2VxdWFsKHBhcmFtLmRpbSwgWzFdKSkge1xuICAgICAgdGhyb3cgXCJPbmVkaW1NZXRyb3BvbGlzU3RlcHBlciBjYW4gb25seSBoYW5kbGUgb25lIG9uZS1kaW1lbnNpb25hbCBwYXJhbWV0ZXIuXCI7XG4gICAgfVxuICAgIHRoaXMubG93ZXIgPSBwYXJhbS5sb3dlcjtcbiAgICB0aGlzLnVwcGVyID0gcGFyYW0udXBwZXI7XG4gICAgXG4gICAgdGhpcy5wcm9wX2xvZ19zY2FsZSAgICAgPSBnZXRfb3B0aW9uKFwicHJvcF9sb2dfc2NhbGVcIiwgb3B0aW9ucywgMCk7XG4gICAgdGhpcy5iYXRjaF9zaXplICAgICAgICAgPSBnZXRfb3B0aW9uKFwiYmF0Y2hfc2l6ZVwiLCBvcHRpb25zLCA1MCk7XG4gICAgdGhpcy5tYXhfYWRhcHRhdGlvbiAgICAgPSBnZXRfb3B0aW9uKFwibWF4X2FkYXB0YXRpb25cIiwgb3B0aW9ucywgMC4zMyk7XG4gICAgdGhpcy5pbml0aWFsX2FkYXB0YXRpb24gPSBnZXRfb3B0aW9uKFwiaW5pdGlhbF9hZGFwdGF0aW9uXCIsIG9wdGlvbnMsIDEuMCk7XG4gICAgdGhpcy50YXJnZXRfYWNjZXB0X3JhdGUgPSBnZXRfb3B0aW9uKFwidGFyZ2V0X2FjY2VwdF9yYXRlXCIsIG9wdGlvbnMsIDAuNDQpO1xuICAgIHRoaXMuaXNfYWRhcHRpbmcgICAgICAgID0gZ2V0X29wdGlvbihcImlzX2FkYXB0aW5nXCIsIG9wdGlvbnMsIHRydWUpO1xuICAgIFxuICAgIHRoaXMuZ2VuZXJhdGVfcHJvcG9zYWwgPSBnZW5lcmF0ZV9wcm9wb3NhbDtcbiAgICBcbiAgICB0aGlzLmFjY2VwdGFuY2VfY291bnQgPSAwO1xuICAgIHRoaXMuYmF0Y2hfY291bnQgPSAwO1xuICAgIHRoaXMuaXRlcmF0aW9uc19zaW5jZV9hZGFwdGlvbiA9IDA7ICBcbiAgfTtcbiAgXG4gIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RlcHBlci5wcm90b3R5cGUpOyBcbiAgT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gT25lZGltTWV0cm9wb2xpc1N0ZXBwZXI7XG4gIFxuICBPbmVkaW1NZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBhcmFtX3N0YXRlID0gdGhpcy5zdGF0ZVt0aGlzLnBhcmFtX25hbWVdO1xuICAgICAgdmFyIHBhcmFtX3Byb3Bvc2FsID0gdGhpcy5nZW5lcmF0ZV9wcm9wb3NhbChwYXJhbV9zdGF0ZSwgdGhpcy5wcm9wX2xvZ19zY2FsZSk7XG4gICAgICBpZihwYXJhbV9wcm9wb3NhbCA8IHRoaXMubG93ZXIgfHwgcGFyYW1fcHJvcG9zYWwgPiB0aGlzLnVwcGVyKSB7XG4gICAgICAgIC8vIE91dHNpZGUgb2YgbGltaXRzIG9mIHRoZSBwYXJhbWV0ZXIsIHJlamVjdCB0aGUgcHJvcG9zYWwgXG4gICAgICAgIC8vIGFuZCBzdGF5IGF0IHRoZSBjdXJyZW50IHN0YXRlLlxuICAgICAgfSBlbHNlIHsgLy8gbWFrZSBhIE1ldHJvcG9saXMgc3RlcFxuICAgICAgICB2YXIgY3Vycl9sb2dfZGVucyA9IHRoaXMubG9nX3Bvc3QoKTtcbiAgICAgICAgdGhpcy5zdGF0ZVt0aGlzLnBhcmFtX25hbWVdID0gcGFyYW1fcHJvcG9zYWw7XG4gICAgICAgIHZhciBwcm9wX2xvZ19kZW5zID0gdGhpcy5sb2dfcG9zdCgpO1xuICAgICAgICB2YXIgYWNjZXB0X3Byb2IgPSBNYXRoLmV4cChwcm9wX2xvZ19kZW5zIC0gY3Vycl9sb2dfZGVucyk7XG4gICAgICAgIGlmKGFjY2VwdF9wcm9iID4gTWF0aC5yYW5kb20oKSkge1xuICAgICAgICAgIC8vIFdlIGRvIG5vdGhpbmcgYXMgdGhlIHN0YXRlIG9mIHBhcmFtIGhhcyBhbHJlYWR5IGJlZW4gY2hhbmdlZCB0byB0aGUgcHJvcG9zYWxcbiAgICAgICAgICBpZih0aGlzLmlzX2FkYXB0aW5nKSB0aGlzLmFjY2VwdGFuY2VfY291bnQrKyA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHN0YXRlIGJhY2sgdG8gdGhlIG9sZCBzdGF0ZSBvZiBwYXJhbVxuICAgICAgICAgIHRoaXMuc3RhdGVbdGhpcy5wYXJhbV9uYW1lXSA9IHBhcmFtX3N0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih0aGlzLmlzX2FkYXB0aW5nKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uc19zaW5jZV9hZGFwdGlvbiArKztcbiAgICAgICAgaWYodGhpcy5pdGVyYXRpb25zX3NpbmNlX2FkYXB0aW9uID49IHRoaXMuYmF0Y2hfc2l6ZSkgeyAvLyB0aGVuIGFkYXB0XG4gICAgICAgICAgdGhpcy5iYXRjaF9jb3VudCArKztcbiAgICAgICAgICB2YXIgbG9nX3NkX2FkanVzdG1lbnQgPSBcbiAgICAgICAgICAgIE1hdGgubWluKHRoaXMubWF4X2FkYXB0YXRpb24sIFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsX2FkYXB0YXRpb24gLyBNYXRoLnNxcnQodGhpcy5iYXRjaF9jb3VudCkpO1xuICAgICAgICAgIGlmKHRoaXMuYWNjZXB0YW5jZV9jb3VudCAvIHRoaXMuYmF0Y2hfc2l6ZSA+IHRoaXMudGFyZ2V0X2FjY2VwdF9yYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BfbG9nX3NjYWxlICs9IGxvZ19zZF9hZGp1c3RtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BfbG9nX3NjYWxlIC09IGxvZ19zZF9hZGp1c3RtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFjY2VwdGFuY2VfY291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuaXRlcmF0aW9uc19zaW5jZV9hZGFwdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnN0YXRlW3RoaXMucGFyYW1fbmFtZV07XG4gIH07XG4gIFxuICBPbmVkaW1NZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuc3RhcnRfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNfYWRhcHRpbmcgPSB0cnVlO1xuICB9O1xuICBcbiAgT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNfYWRhcHRpbmcgPSBmYWxzZTtcbiAgfTtcbiAgXG4gIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BfbG9nX3NjYWxlOiB0aGlzLnByb3BfbG9nX3NjYWxlLFxuICAgICAgaXNfYWRhcHRpbmc6IHRoaXMuaXNfYWRhcHRpbmcsXG4gICAgICBhY2NlcHRhbmNlX2NvdW50OiB0aGlzLmFjY2VwdGFuY2VfY291bnQsXG4gICAgICBpdGVyYXRpb25zX3NpbmNlX2FkYXB0aW9uOiB0aGlzLml0ZXJhdGlvbnNfc2luY2VfYWRhcHRpb24sXG4gICAgICBiYXRjaF9jb3VudDogdGhpcy5iYXRjaF9jb3VudFxuICAgIH07XG4gIH07XG4gIFxuICBcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHJldHVybmluZyBhIE5vcm1hbCBwcm9wb3NhbC5cbiAgICovXG4gIHZhciBub3JtYWxfcHJvcG9zYWwgPSBmdW5jdGlvbihwYXJhbV9zdGF0ZSwgcHJvcF9sb2dfc2NhbGUpIHtcbiAgICByZXR1cm4gcm5vcm0ocGFyYW1fc3RhdGUgLCBNYXRoLmV4cChwcm9wX2xvZ19zY2FsZSkpO1xuICB9O1xuICBcbiAgLyoqXG4gICAqIEBjbGFzc1xuICAgKiBAYXVnbWVudHMge09uZWRpbU1ldHJvcG9saXNTdGVwcGVyfVxuICAgKiBBIFwic3ViY2xhc3NcIiBvZiBPbmVkaW1NZXRyb3BvbGlzU3RlcHBlciBtYWtpbmcgY29udGlub3VzIE5vcm1hbCBwcm9wb3NhbHMuXG4gICAqL1xuICB2YXIgUmVhbE1ldHJvcG9saXNTdGVwcGVyID0gZnVuY3Rpb24ocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMpIHtcbiAgICBPbmVkaW1NZXRyb3BvbGlzU3RlcHBlci5jYWxsKHRoaXMsIHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zLCBub3JtYWxfcHJvcG9zYWwpO1xuICB9O1xuICBcbiAgUmVhbE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlKTsgXG4gIFJlYWxNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWFsTWV0cm9wb2xpc1N0ZXBwZXI7XG4gIFxuICAvKipcbiAgICogRnVuY3Rpb24gcmV0dXJuaW5nIGEgZGlzY3JldGl6ZWQgTm9ybWFsIHByb3Bvc2FsLlxuICAgKi9cbiAgdmFyIGRpc2NyZXRlX25vcm1hbF9wcm9wb3NhbCA9IGZ1bmN0aW9uKHBhcmFtX3N0YXRlLCBwcm9wX2xvZ19zY2FsZSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHJub3JtKHBhcmFtX3N0YXRlICwgTWF0aC5leHAocHJvcF9sb2dfc2NhbGUpKSk7XG4gIH07XG4gIFxuICAgIC8qKlxuICAgKiBAY2xhc3NcbiAgICogQGF1Z21lbnRzIHtPbmVkaW1NZXRyb3BvbGlzU3RlcHBlcn1cbiAgICogQSBcInN1YmNsYXNzXCIgb2YgT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIgbWFraW5nIGRpc2NyZXRpemVkIE5vcm1hbCBwcm9wb3NhbHMuXG4gICAqL1xuICB2YXIgSW50TWV0cm9wb2xpc1N0ZXBwZXIgPSBmdW5jdGlvbihwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykge1xuICAgIE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLmNhbGwodGhpcywgcGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMsIGRpc2NyZXRlX25vcm1hbF9wcm9wb3NhbCk7XG4gIH07XG4gIFxuICBJbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9uZWRpbU1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSk7IFxuICBJbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRNZXRyb3BvbGlzU3RlcHBlcjtcbiAgXG4gIFxuICAvKipcbiAgICogQGNsYXNzXG4gICAqIEBpbXBsZW1lbnRzIHtTdGVwcGVyfVxuICAgKiBDb25zdHJ1Y3RvciBmb3IgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgbWV0cm9wb2xpcyBzdGVwIGluXG4gICAqIHRoZSBBZGFwdGl2ZSBNZXRyb3BvbGlzLVdpdGhpbi1HaWJicyBhbGdvcml0aG0gaW4gXCJFeGFtcGxlcyBvZiBBZGFwdGl2ZSBNQ01DXCJcbiAgICogYnkgUm9iZXJ0cyBhbmQgUm9zZW50aGFsICgyMDA4KSBmb3IgcG9zc2libHkgbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuIFRoYXRcbiAgICogaXMsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgYSBzdGVwIGZvciBhIG9uZS1kaW1lbnNpb25hbCBwYXJhbWV0ZXIgbGlrZSBcbiAgICogT25lZGltTWV0cm9wb2xpc1N0ZXBwZXIsIHRoaXMgU3RlcHBlciBpcyByZXNwb25zaWJsZSBmb3IgdGFraW5nIHN0ZXBzIFxuICAgKiBmb3IgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LiBJdCdzIHN0aWxsIHByZXR0eSBkdW1iIGFuZCBqdXN0IHRha2VzXG4gICAqIG9uZS1kaW1lbnNpb25hbCBzdGVwcyBmb3IgZWFjaCBwYXJhbWV0ZXIgY29tcG9uZW50LCB0aG91Z2guXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBBbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbiBmb3IgYSBcbiAgICogICBtdWx0aWRpbWVuc2lvbmFsIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0gbG9nX3Bvc3QgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbG9nIGRlbnNpdHkgdGhhdCBkZXBlbmRzIG9uIHRoZSBzdGF0ZS4gXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucyB0byB0aGUgc3RlcHBlci5cbiAgICogQHBhcmFtIFN1YlN0ZXBwZXIgLSBhIGNvbnN0cnVjdG9yIGZvciB0aGUgdHlwZSBvZiBvbmUgZGltZW5zaW9uYWwgU3RlcHBlciB0byBhcHBseSBvblxuICAgKiAgIGFsbCB0aGUgY29tcG9uZW50cyBvZiB0aGUgbXVsdGlkaW1lbnNpb25hbCBwYXJhbWV0ZXIuXG4gICovXG4gIHZhciBNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyID0gZnVuY3Rpb24ocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMsIFN1YlN0ZXBwZXIpIHtcbiAgICBTdGVwcGVyLmNhbGwodGhpcywgcGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QpO1xuICAgIFxuICAgIHZhciBwYXJhbV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTtcbiAgICBpZihwYXJhbV9uYW1lcy5sZW5ndGggICE9IDEpIHtcbiAgICAgIHRocm93IFwiTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciBjYW4ndCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIuXCI7XG4gICAgfVxuICAgIHRoaXMucGFyYW1fbmFtZSA9IHBhcmFtX25hbWVzWzBdO1xuICAgIHZhciBwYXJhbSA9IHRoaXMucGFyYW1zW3RoaXMucGFyYW1fbmFtZV07XG4gICAgdGhpcy5sb3dlciA9IHBhcmFtLmxvd2VyO1xuICAgIHRoaXMudXBwZXIgPSBwYXJhbS51cHBlcjtcbiAgICB0aGlzLmRpbSA9IHBhcmFtLmRpbTtcbiAgXG4gICAgdGhpcy5wcm9wX2xvZ19zY2FsZSAgICAgPSBnZXRfbXVsdGlkaW1fb3B0aW9uKFwicHJvcF9sb2dfc2NhbGVcIiwgb3B0aW9ucywgdGhpcy5kaW0sIDApO1xuICAgIHRoaXMuYmF0Y2hfc2l6ZSAgICAgICAgID0gZ2V0X211bHRpZGltX29wdGlvbihcImJhdGNoX3NpemVcIiwgb3B0aW9ucywgdGhpcy5kaW0sIDUwKTtcbiAgICB0aGlzLm1heF9hZGFwdGF0aW9uICAgICA9IGdldF9tdWx0aWRpbV9vcHRpb24oXCJtYXhfYWRhcHRhdGlvblwiLCBvcHRpb25zLCB0aGlzLmRpbSwgMC4zMyk7XG4gICAgdGhpcy5pbml0aWFsX2FkYXB0YXRpb24gPSBnZXRfbXVsdGlkaW1fb3B0aW9uKFwiaW5pdGlhbF9hZGFwdGF0aW9uXCIsIG9wdGlvbnMsIHRoaXMuZGltLCAxLjApO1xuICAgIHRoaXMudGFyZ2V0X2FjY2VwdF9yYXRlID0gZ2V0X211bHRpZGltX29wdGlvbihcInRhcmdldF9hY2NlcHRfcmF0ZVwiLCBvcHRpb25zLCB0aGlzLmRpbSwgMC40NCk7XG4gICAgdGhpcy5pc19hZGFwdGluZyAgICAgICAgPSBnZXRfbXVsdGlkaW1fb3B0aW9uKFwiaXNfYWRhcHRpbmdcIiwgb3B0aW9ucywgdGhpcy5kaW0sIHRydWUpO1xuICAgIFxuICAgIC8vIFRoaXMgaGFjayBiZWxvdyBpcyBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYW4gYXJyYXkgb2YgXG4gICAgLy8gb25lIGRpbWVuc2lvbmFsIHN0ZXBwZXJzIGFjY29yZGluZyB0byBkaW0uXG4gICAgdmFyIGNyZWF0ZV9zdWJzdGVwcGVycyA9IFxuICAgICAgZnVuY3Rpb24oZGltLCBzdWJzdGF0ZSwgbG9nX3Bvc3QsIHByb3BfbG9nX3NjYWxlLCBiYXRjaF9zaXplLCBtYXhfYWRhcHRhdGlvbiwgaW5pdGlhbF9hZGFwdGF0aW9uLCB0YXJnZXRfYWNjZXB0X3JhdGUsIGlzX2FkYXB0aW5nKSB7XG4gICAgICB2YXIgc3Vic3RlcHBlcnMgPSBbXTtcbiAgICAgIGlmKGRpbS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGRpbVswXTsgaSsrKSB7XG4gICAgICAgICAgdmFyIHN1Ym9wdGlvbnMgPSB7cHJvcF9sb2dfc2NhbGU6IHByb3BfbG9nX3NjYWxlW2ldLCBiYXRjaF9zaXplOiBiYXRjaF9zaXplW2ldLFxuICAgICAgICAgICAgbWF4X2FkYXB0YXRpb246IG1heF9hZGFwdGF0aW9uW2ldLCBpbml0aWFsX2FkYXB0YXRpb246IGluaXRpYWxfYWRhcHRhdGlvbltpXSxcbiAgICAgICAgICAgIHRhcmdldF9hY2NlcHRfcmF0ZTogdGFyZ2V0X2FjY2VwdF9yYXRlW2ldLCBpc19hZGFwdGluZzogaXNfYWRhcHRpbmdbaV19O1xuICAgICAgICAgICAgdmFyIHN1YnBhcmFtID0ge307XG4gICAgICAgICAgICBzdWJwYXJhbVtpXSA9IGRlZXBfY2xvbmUocGFyYW0pO1xuICAgICAgICAgICAgc3VicGFyYW1baV0uZGltID0gWzFdOyAvLyBBcyB0aGlzIHNob3VsZCBub3cgYmUgYSBvbmUtZGltIHBhcmFtZXRlclxuICAgICAgICAgICAgZGVsZXRlIHN1YnBhcmFtW2ldLmluaXQ7IC8vIEFzIGl0IHNvdWxkIG5vdCBiZSBuZWVkZWRcbiAgICAgICAgICBzdWJzdGVwcGVyc1tpXSA9IG5ldyBTdWJTdGVwcGVyKHN1YnBhcmFtLCBzdWJzdGF0ZSwgbG9nX3Bvc3QsIHN1Ym9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHtcbiAgICAgICAgICBzdWJzdGVwcGVyc1tpXSA9IGNyZWF0ZV9zdWJzdGVwcGVycyhkaW0uc2xpY2UoMSksIHN1YnN0YXRlW2ldLCBsb2dfcG9zdCwgcHJvcF9sb2dfc2NhbGVbaV0sIFxuICAgICAgICAgICAgYmF0Y2hfc2l6ZVtpXSwgbWF4X2FkYXB0YXRpb25baV0sIGluaXRpYWxfYWRhcHRhdGlvbltpXSwgdGFyZ2V0X2FjY2VwdF9yYXRlW2ldLCBpc19hZGFwdGluZ1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzdGVwcGVycztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuc3Vic3RlcHBlcnMgPSBjcmVhdGVfc3Vic3RlcHBlcnModGhpcy5kaW0sIHRoaXMuc3RhdGVbdGhpcy5wYXJhbV9uYW1lXSwgdGhpcy5sb2dfcG9zdCxcbiAgICAgIHRoaXMucHJvcF9sb2dfc2NhbGUsIHRoaXMuYmF0Y2hfc2l6ZSwgdGhpcy5tYXhfYWRhcHRhdGlvbiwgdGhpcy5pbml0aWFsX2FkYXB0YXRpb24sXG4gICAgICB0aGlzLnRhcmdldF9hY2NlcHRfcmF0ZSwgdGhpcy5pc19hZGFwdGluZyk7XG4gICAgXG4gIH07XG4gIFxuICBNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RlcHBlci5wcm90b3R5cGUpOyBcbiAgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyO1xuICBcbiAgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIEdvIHRocm91Z2ggdGhlIHN1YnN0ZXBwZXJzIGluIGEgcmFuZG9tIG9yZGVyIGFuZCBjYWxsIHN0ZXAoKSBvbiB0aGVtLlxuICAgIHJldHVybiBuZXN0ZWRfYXJyYXlfcmFuZG9tX2FwcGx5KHRoaXMuc3Vic3RlcHBlcnMsIGZ1bmN0aW9uKHN1YnN0ZXBwZXIpIHtyZXR1cm4gc3Vic3RlcHBlci5zdGVwKCk7IH0pO1xuICB9O1xuICBcbiAgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuc3RhcnRfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIG5lc3RlZF9hcnJheV9hcHBseSh0aGlzLnN1YnN0ZXBwZXJzLCBmdW5jdGlvbihzdWJzdGVwcGVyKSB7c3Vic3RlcHBlci5zdGFydF9hZGFwdGF0aW9uKCk7IH0pO1xuICB9O1xuICBcbiAgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUuc3RvcF9hZGFwdGF0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgbmVzdGVkX2FycmF5X2FwcGx5KHRoaXMuc3Vic3RlcHBlcnMsIGZ1bmN0aW9uKHN1YnN0ZXBwZXIpIHtzdWJzdGVwcGVyLnN0b3BfYWRhcHRhdGlvbigpOyB9KTtcbiAgfTtcbiAgXG4gIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmVzdGVkX2FycmF5X2FwcGx5KHRoaXMuc3Vic3RlcHBlcnMsIGZ1bmN0aW9uKHN1YnN0ZXBwZXIpIHtcbiAgICAgIHJldHVybiBzdWJzdGVwcGVyLmluZm8oKTsgXG4gICAgfSk7XG4gIH07XG4gIFxuICAvKipcbiAgICogQGNsYXNzXG4gICAqIEBhdWdtZW50cyB7TXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcn1cbiAgICogQSBcInN1YmNsYXNzXCIgb2YgTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlciBtYWtpbmcgY29udGlub3VzIE5vcm1hbCBwcm9wb3NhbHMuXG4gICAqL1xuICB2YXIgTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIgPSBmdW5jdGlvbihwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykge1xuICAgIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIuY2FsbCh0aGlzLCBwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucywgUmVhbE1ldHJvcG9saXNTdGVwcGVyKTtcbiAgfTtcbiAgXG4gIE11bHRpUmVhbENvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTXVsdGlkaW1Db21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUpOyBcbiAgTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXI7XG5cbiAgLyoqXG4gICAqIEBjbGFzc1xuICAgKiBAYXVnbWVudHMge011bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXJ9XG4gICAqIEEgXCJzdWJjbGFzc1wiIG9mIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIgbWFraW5nIGRpc2NyZXRpemVkIE5vcm1hbCBwcm9wb3NhbHMuXG4gICAqLyAgICBcbiAgdmFyIE11bHRpSW50Q29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIgPSBmdW5jdGlvbihwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykge1xuICAgIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIuY2FsbCh0aGlzLCBwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucywgSW50TWV0cm9wb2xpc1N0ZXBwZXIpO1xuICB9O1xuICBcbiAgTXVsdGlJbnRDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlKTsgXG4gIE11bHRpSW50Q29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTXVsdGlJbnRDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcjtcbiAgXG4gIC8qKlxuICAgKiBAY2xhc3NcbiAgICogQGltcGxlbWVudHMge1N0ZXBwZXJ9XG4gICAqIENvbnN0cnVjdG9yIGZvciBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIGEgc3RlcCBmb3IgYSBiaW5hcnkgcGFyYW1ldGVyLlxuICAgKiBUaGlzIGlzIGRvbmUgYnkgZXZhbHVhdGluZyB0aGUgbG9nIHBvc3RlcmlvciBmb3IgYm90aCBzdGF0ZXMgb2YgdGhlXG4gICAqIHBhcmFtZXRlciBhbmQgdGhlbiBzZWxlY3RpbmcgYSBzdGF0ZSByYW5kb21seSB3aXRoIHByb2JhYmlsaXR5IHJlbGF0aXZlIFxuICAgKiB0byB0aGUgcG9zdGVyaW9yIG9mIGVhY2ggc3RhdGUuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBBbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbi5cbiAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0gbG9nX3Bvc3QgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbG9nIGRlbnNpdHkgdGhhdCBkZXBlbmRzIG9uIHRoZSBzdGF0ZS4gXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucyB0byB0aGUgc3RlcHBlci5cbiAgKi9cbiAgdmFyIEJpbmFyeVN0ZXBwZXIgPSBmdW5jdGlvbihwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykge1xuICAgIFN0ZXBwZXIuY2FsbCh0aGlzLCBwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCk7XG4gICAgdmFyIHBhcmFtX25hbWVzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpO1xuICAgIGlmKHBhcmFtX25hbWVzLmxlbmd0aCAgPT0gMSkge1xuICAgICAgdGhpcy5wYXJhbV9uYW1lID0gcGFyYW1fbmFtZXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IFwiQmluYXJ5U3RlcHBlciBjYW4ndCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIuXCI7XG4gICAgfVxuICB9O1xuICBcbiAgQmluYXJ5U3RlcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0ZXBwZXIucHJvdG90eXBlKTsgXG4gIEJpbmFyeVN0ZXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmluYXJ5U3RlcHBlcjtcbiAgXG4gIEJpbmFyeVN0ZXBwZXIucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0YXRlW3RoaXMucGFyYW1fbmFtZV0gPSAwO1xuICAgIHZhciB6ZXJvX2xvZ19kZW5zID0gdGhpcy5sb2dfcG9zdCgpO1xuICAgIHRoaXMuc3RhdGVbdGhpcy5wYXJhbV9uYW1lXSA9IDE7XG4gICAgdmFyIG9uZV9sb2dfZGVucyA9IHRoaXMubG9nX3Bvc3QoKTtcbiAgICB2YXIgbWF4X2xvZ19kZW5zID0gTWF0aC5tYXgoemVyb19sb2dfZGVucywgb25lX2xvZ19kZW5zKTtcbiAgICB6ZXJvX2xvZ19kZW5zIC09IG1heF9sb2dfZGVucztcbiAgICBvbmVfbG9nX2RlbnMgLT0gbWF4X2xvZ19kZW5zO1xuICAgIHZhciB6ZXJvX3Byb2IgPSBNYXRoLmV4cCh6ZXJvX2xvZ19kZW5zIC0gTWF0aC5sb2coIE1hdGguZXhwKHplcm9fbG9nX2RlbnMpICsgTWF0aC5leHAob25lX2xvZ19kZW5zKSApICk7XG4gICAgaWYoTWF0aC5yYW5kb20oKSA8IHplcm9fcHJvYikge1xuICAgICAgdGhpcy5zdGF0ZVt0aGlzLnBhcmFtX25hbWVdID0gMDtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gLy8gZWxzZSBrZWVwIHRoZSBwYXJhbSBhdCAxIC5cbiAgICByZXR1cm4gMTtcbiAgfTtcbiAgXG4gICAgLyoqXG4gICAqIEBjbGFzc1xuICAgKiBAaW1wbGVtZW50cyB7U3RlcHBlcn1cbiAgICogSnVzdCBsaWtlIE11bHRpZGltQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIgdGhpcyBTdGVwcGVyIHRha2VzIGEgc3RlcHMgZm9yXG4gICAqIGEgbXVsdGlkaW1lbnNpb25hbCBwYXJhbWV0ZXIgYnkgdXBkYXRpbmcgZWFjaCBjb21wb25lbnQgaW4gdHVybi4gVGhlIGRpZmZlcmVuY2VcbiAgICogaXMgdGhhdCB0aGlzIHN0ZXBwZXIgd29ya3Mgb24gYmluYXJ5IHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBBbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbiBmb3IgYSBcbiAgICogICBtdWx0aWRpbWVuc2lvbmFsIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0gbG9nX3Bvc3QgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbG9nIGRlbnNpdHkgdGhhdCBkZXBlbmRzIG9uIHRoZSBzdGF0ZS4gXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucyB0byB0aGUgc3RlcHBlci5cbiAgKi9cbiAgdmFyIEJpbmFyeUNvbXBvbmVudFN0ZXBwZXIgPSBmdW5jdGlvbihwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCwgb3B0aW9ucykge1xuICAgIFN0ZXBwZXIuY2FsbCh0aGlzLCBwYXJhbXMsIHN0YXRlLCBsb2dfcG9zdCk7XG4gICAgXG4gICAgdmFyIHBhcmFtX25hbWVzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpO1xuICAgIGlmKHBhcmFtX25hbWVzLmxlbmd0aCAgPT0gMSkge1xuICAgICAgdGhpcy5wYXJhbV9uYW1lID0gcGFyYW1fbmFtZXNbMF07XG4gICAgICB2YXIgcGFyYW0gPSB0aGlzLnBhcmFtc1t0aGlzLnBhcmFtX25hbWVdO1xuICAgICAgdGhpcy5kaW0gPSBwYXJhbS5kaW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IFwiQmluYXJ5Q29tcG9uZW50U3RlcHBlciBjYW4ndCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIuXCI7XG4gICAgfVxuICAgIFxuICAgIHZhciBjcmVhdGVfc3Vic3RlcHBlcnMgPSBcbiAgICAgIGZ1bmN0aW9uKGRpbSwgc3Vic3RhdGUsIGxvZ19wb3N0KSB7XG4gICAgICB2YXIgc3Vic3RlcHBlcnMgPSBbXTtcbiAgICAgIHZhciBpO1xuICAgICAgaWYoZGltLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBkaW1bMF07IGkrKykge1xuICAgICAgICAgIHZhciBzdWJwYXJhbXMgPSB7fTtcbiAgICAgICAgICBzdWJwYXJhbXNbaV0gPSBwYXJhbTtcbiAgICAgICAgICBzdWJzdGVwcGVyc1tpXSA9IG5ldyBCaW5hcnlTdGVwcGVyKHN1YnBhcmFtcywgc3Vic3RhdGUsIGxvZ19wb3N0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgZGltWzBdOyBpKyspIHtcbiAgICAgICAgICBzdWJzdGVwcGVyc1tpXSA9IGNyZWF0ZV9zdWJzdGVwcGVycyhkaW0uc2xpY2UoMSksIHN1YnN0YXRlW2ldLCBsb2dfcG9zdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzdGVwcGVycztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuc3Vic3RlcHBlcnMgPSBjcmVhdGVfc3Vic3RlcHBlcnModGhpcy5kaW0sIHRoaXMuc3RhdGVbdGhpcy5wYXJhbV9uYW1lXSwgdGhpcy5sb2dfcG9zdCk7XG4gIH07XG4gIFxuICBCaW5hcnlDb21wb25lbnRTdGVwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RlcHBlci5wcm90b3R5cGUpOyBcbiAgQmluYXJ5Q29tcG9uZW50U3RlcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaW5hcnlDb21wb25lbnRTdGVwcGVyO1xuICBcbiAgQmluYXJ5Q29tcG9uZW50U3RlcHBlci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIEdvIHRocm91Z2ggdGhlIHN1YnN0ZXBwZXJzIGluIGEgcmFuZG9tIG9yZGVyIGFuZCBjYWxsIHN0ZXAoKSBvbiB0aGVtLlxuICAgIHJldHVybiBuZXN0ZWRfYXJyYXlfcmFuZG9tX2FwcGx5KHRoaXMuc3Vic3RlcHBlcnMsIGZ1bmN0aW9uKHN1YnN0ZXBwZXIpIHtyZXR1cm4gc3Vic3RlcHBlci5zdGVwKCk7IH0pO1xuICB9O1xuICBcbiAgLyoqXG4gICAqIEBjbGFzc1xuICAgKiBAaW1wbGVtZW50cyB7U3RlcHBlcn1cbiAgICogVGhpcyBzdGVwcGVyIGNhbiBiZSByZXNwb25zaWJsZSBmb3IgdGFraW5nIGEgc3RlcCBmb3Igb25lIG9yIG1vcmUgcGFyYW1ldGVycy5cbiAgICogRm9yIHJlYWwgYW5kIGludCBwYXJhbWV0ZXJzIGl0IHRha2VzIE1ldHJvcG9saXMgd2l0aGluIEdpYmJzIHN0ZXBzLCBhbmQgZm9yIFxuICAgKiBiaW5hcnkgcGFyYW1ldGVycyBpdCBkb2VzIGV2YWx1YXRlcyB0aGUgcG9zdGVyaW9yIGZvciBib3RoIHBhcmFtdGVyIHZhbHVlcyBhbmRcbiAgICogcmFuZG9tbHkgY2hhbmdlcyB0byBhIGNlcnRhaW4gdmFsdWUgcHJvcG9ydGlvbmFsbHkgdG8gdGhhdCB2YWx1ZSdzIHBvc3RlcmlvclxuICAgKiAodGhpcyBpcyBhbHNvIGRvbmUgZm9yIGVhY2ggcGFyYW1ldGVyLCBzbyBhbHNvIGEgKiB3aXRoaW4gR2liYnMgYXBwcm9hY2gpLlxuICAgKiBUaGlzIHN0ZXBwZXIgaXMgYWxzbyBhZGFwdGl2ZSBhbmQgY2FuIGJlIGVmZmljaWVudCB3aGVuIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVyc1xuICAgKiBhcmUgbm90IHRvbyBoaWdoIGFuZCB0aGUgY29ycmVsYXRpb25zIGJldHdlZW4gcGFyYW1ldGVycyBhcmUgbG93LlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQW4gb2JqZWN0IHdpdGggYSBvbmUgb3IgbW9yZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICogQHBhcmFtIHN0YXRlIC0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0gbG9nX3Bvc3QgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbG9nIGRlbnNpdHkgdGhhdCBkZXBlbmRzIG9uIHRoZSBzdGF0ZS4gXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucyB0byB0aGUgc3RlcHBlci5cbiAgKi9cbiAgdmFyIEFtd2dTdGVwcGVyID0gZnVuY3Rpb24ocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMpIHtcbiAgICBTdGVwcGVyLmNhbGwodGhpcywgcGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QpO1xuICAgIHRoaXMucGFyYW1fbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyk7XG4gICAgdGhpcy5zdWJzdGVwcGVycyA9IFtdO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtX25hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFyYW0gPSBwYXJhbXNbdGhpcy5wYXJhbV9uYW1lc1tpXV07XG4gICAgICB2YXIgU2VsZWN0U3RlcHBlcjtcbiAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkge1xuICAgICAgICBjYXNlIFwicmVhbFwiOlxuICAgICAgICAgIGlmKGFycmF5X2VxdWFsKHBhcmFtLmRpbSwgWzFdKSkge1xuICAgICAgICAgICAgU2VsZWN0U3RlcHBlciA9IFJlYWxNZXRyb3BvbGlzU3RlcHBlcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU2VsZWN0U3RlcHBlciA9IE11bHRpUmVhbENvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImludFwiOlxuICAgICAgICAgIGlmKGFycmF5X2VxdWFsKHBhcmFtLmRpbSwgWzFdKSkge1xuICAgICAgICAgICAgU2VsZWN0U3RlcHBlciA9IEludE1ldHJvcG9saXNTdGVwcGVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTZWxlY3RTdGVwcGVyID0gTXVsdGlJbnRDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJiaW5hcnlcIjpcbiAgICAgICAgICBpZihhcnJheV9lcXVhbChwYXJhbS5kaW0sIFsxXSkpIHtcbiAgICAgICAgICAgIFNlbGVjdFN0ZXBwZXIgPSBCaW5hcnlTdGVwcGVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTZWxlY3RTdGVwcGVyID0gQmluYXJ5Q29tcG9uZW50U3RlcHBlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgXCJBbXdnU3RlcHBlciBjYW4ndCBoYW5kbGUgcGFyYW1ldGVyIFwiICsgdGhpcy5wYXJhbV9uYW1lc1tpXSAgK1wiIHdpdGggdHlwZSBcIiArIHBhcmFtLnR5cGU7IFxuICAgICAgfVxuICAgICAgdmFyIHBhcmFtX29iamVjdF93cmFwID0ge307XG4gICAgICBwYXJhbV9vYmplY3Rfd3JhcFt0aGlzLnBhcmFtX25hbWVzW2ldXSA9IHBhcmFtO1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICB2YXIgcGFyYW1fb3B0aW9ucyA9IG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zW3RoaXMucGFyYW1fbmFtZXNbaV1dIHx8IHt9O1xuICAgICAgcGFyYW1fb3B0aW9ucy5wcm9wX2xvZ19zY2FsZSAgICAgPSBwYXJhbV9vcHRpb25zLnByb3BfbG9nX3NjYWxlICAgICB8fCBvcHRpb25zLnByb3BfbG9nX3NjYWxlOyBcbiAgICAgIHBhcmFtX29wdGlvbnMuYmF0Y2hfc2l6ZSAgICAgICAgID0gcGFyYW1fb3B0aW9ucy5iYXRjaF9zaXplICAgICAgICAgfHwgb3B0aW9ucy5iYXRjaF9zaXplOyBcbiAgICAgIHBhcmFtX29wdGlvbnMubWF4X2FkYXB0YXRpb24gICAgID0gcGFyYW1fb3B0aW9ucy5tYXhfYWRhcHRhdGlvbiAgICAgfHwgb3B0aW9ucy5tYXhfYWRhcHRhdGlvbjtcbiAgICAgIHBhcmFtX29wdGlvbnMuaW5pdGlhbF9hZGFwdGF0aW9uID0gcGFyYW1fb3B0aW9ucy5pbml0aWFsX2FkYXB0YXRpb24gfHwgb3B0aW9ucy5pbml0aWFsX2FkYXB0YXRpb247XG4gICAgICBwYXJhbV9vcHRpb25zLnRhcmdldF9hY2NlcHRfcmF0ZSA9IHBhcmFtX29wdGlvbnMudGFyZ2V0X2FjY2VwdF9yYXRlIHx8IG9wdGlvbnMudGFyZ2V0X2FjY2VwdF9yYXRlOyBcbiAgICAgIHBhcmFtX29wdGlvbnMuaXNfYWRhcHRpbmcgICAgICAgID0gcGFyYW1fb3B0aW9ucy5pc19hZGFwdGluZyAgICAgICAgfHwgb3B0aW9ucy5pc19hZGFwdGluZzsgXG4gICAgICB0aGlzLnN1YnN0ZXBwZXJzW2ldID0gbmV3IFNlbGVjdFN0ZXBwZXIocGFyYW1fb2JqZWN0X3dyYXAsIHN0YXRlLCBsb2dfcG9zdCwgcGFyYW1fb3B0aW9ucyk7XG4gICAgfVxuICB9O1xuICBcbiAgQW13Z1N0ZXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdGVwcGVyLnByb3RvdHlwZSk7IFxuICBBbXdnU3RlcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbXdnU3RlcHBlcjtcbiAgXG4gIEFtd2dTdGVwcGVyLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24oKSB7XG4gICAgc2h1ZmZsZV9hcnJheSh0aGlzLnN1YnN0ZXBwZXJzKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJzdGVwcGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5zdWJzdGVwcGVyc1tpXS5zdGVwKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlO1xuICB9O1xuICBcbiAgQW13Z1N0ZXBwZXIucHJvdG90eXBlLnN0YXJ0X2FkYXB0YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJzdGVwcGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5zdWJzdGVwcGVyc1tpXS5zdGFydF9hZGFwdGF0aW9uKCk7XG4gICAgfVxuICB9O1xuICBcbiAgQW13Z1N0ZXBwZXIucHJvdG90eXBlLnN0b3BfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YnN0ZXBwZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnN1YnN0ZXBwZXJzW2ldLnN0b3BfYWRhcHRhdGlvbigpO1xuICAgIH0gXG4gIH07XG4gIFxuICBBbXdnU3RlcHBlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbmZvID0ge307XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3Vic3RlcHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluZm9bdGhpcy5wYXJhbV9uYW1lc1tpXV0gPSB0aGlzLnN1YnN0ZXBwZXJzW2ldLmluZm8oKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH07XG4gIFxuICBcbiAgXG4gIC8vLy8vLy8vLy8vIFNhbXBsZXIgRnVuY3Rpb25zIC8vLy8vLy8vLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBcbiAgXG4gICAvKipcbiAgICogQGludGVyZmFjZVxuICAgKiBXaGlsZSB5b3UgY291bGQgZml0IGEgbW9kZWwgYnkgcGFzdGluZyB0b2dldGhlciBTdGVwcGVycywgYVxuICAvLyBTYW1wbGVyIGlzIGhlcmUgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyB3aGVyZSBhbiBpbnN0YW5jZSBvZiBTYW1wbGVyXG4gIC8vIHNldHMgdXAgdGhlIFN0ZXBwZXJzLCBjaGVja3MgdGhlIHBhcmFtZXRlciBkZWZpbml0aW9uLFxuICAvLyBhbmQgbWFuYWdlcyB0aGUgc2FtcGxpbmcuIFRoaXMgaGVyZSBkZWZpbmVzIHRoZSBTYW1wbGVyIFwiaW50ZXJmYWNlXCIuXG4gICAqIEBpbnRlcmZhY2VcbiAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCB3aXRoIHBhcmFtZXRlciBkZWZpbml0aW9ucywgZm9yIGV4YW1wbGU6XG4gICAqICAge1wibXVcIjoge1widHlwZVwiOiBcInJlYWxcIn0sIFwic2lnbWFcIjoge1widHlwZVwiOiBcInJlYWxcIiwgXCJsb3dlclwiID0gMH19XG4gICAqICAgVGhlIHBhcmFtZXRlciBkZWZpbml0aW9ucyBkb2Vzbid0IGhhdmUgdG8gYmUgXCJjb21wbGV0ZVwiIGFuZCBwcm9wZXJ0aWVzXG4gICAqICAgbGVmdCBvdXQgKGxpa2UgbG93ZXIgYW5kIHVwcGVyKSB3aWxsIGJlIGZpbGxlZCBpbiBieSBkZWZhdWx0cy5cbiAgICogQHBhcmFtIGxvZ19wb3N0IC0gQSBmdW5jdGlvbiB3aXRoIHNpZ25hdHVyZSBmdW5jdGlvbihzdGF0ZSwgZGF0YSkuIEhlcmVcbiAgICogICBzdGF0ZSB3aWxsIGJlIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHN0YXRlIHdpdGggZWFjaCBwYXJhbWV0ZXIgYXMgYSBcbiAgICogICBrZXkgYW5kIHRoZSBwYXJhbWV0ZXIgdmFsdWVzIGFzIG51bWJlcnMgb3IgYXJyYXlzLiBGb3IgZXhhbXBsZTpcbiAgICogICB7XCJtdVwiOiAzLCBcInNpZ21hXCI6IDEuNX0uIFRoZSBkYXRhIGFyZ3VtZW50IHdpbGwgYmUgdGhlIHNhbWUgb2JqZWN0IGFzIFxuICAgKiAgIHRoZSBkYXRhIGFyZ3VtZW50IGdpdmVuIGJlbG93LlxuICAgKiBAcGFyYW0gZGF0YSAtIGFuIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBsb2dfcG9zdCBmdW5jdGlvblxuICAgKiAgIHdoZW4gc2FtcGxpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucyB0byB0aGUgc2FtcGxlci5cbiAgICovXG4gIHZhciBTYW1wbGVyID0gZnVuY3Rpb24ocGFyYW1zLCBsb2dfcG9zdCwgZGF0YSwgb3B0aW9ucykge1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wYXJhbV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTtcbiAgICBcbiAgICAvLyBTZXR0aW5nIGRlZmF1bHQgb3B0aW9ucyBpZiBub3QgcGFzc2VkIHRocm91Z2ggdGhlIG9wdGlvbnMgb2JqZWN0XG4gICAgdGhpcy5wYXJhbV9pbml0X2Z1biAgID0gZ2V0X29wdGlvbihcInBhcmFtX2luaXRfZnVuXCIsIG9wdGlvbnMsIHBhcmFtX2luaXRfZml4ZWQpO1xuICAgIHZhciB0aGlubmluZ19pbnRlcnZhbCA9IGdldF9vcHRpb24oXCJ0aGluXCIsIG9wdGlvbnMsIDEpO1xuICAgIHZhciBwYXJhbXNfdG9fbW9uaXRvciA9IGdldF9vcHRpb24oXCJtb25pdG9yXCIsIG9wdGlvbnMsIG51bGwpO1xuICAgIHRoaXMudGhpbih0aGlubmluZ19pbnRlcnZhbCk7XG4gICAgdGhpcy5tb25pdG9yKHBhcmFtc190b19tb25pdG9yKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIC8vIENvbXBsZXRpbmcgdGhlIHBhcmFtcyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBzdGF0ZS5cbiAgICB0aGlzLnBhcmFtcyA9IGNvbXBsZXRlX3BhcmFtcyh0aGlzLnBhcmFtcywgdGhpcy5wYXJhbV9pbml0X2Z1bik7XG4gICAgdmFyIHN0YXRlID0ge307XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1fbmFtZXMubGVuZ3RoOyBpKysgKSB7XG4gICAgICBzdGF0ZVt0aGlzLnBhcmFtX25hbWVzW2ldXSA9IHRoaXMucGFyYW1zW3RoaXMucGFyYW1fbmFtZXNbaV1dLmluaXQ7XG4gICAgfVxuICAgIHRoaXMubG9nX3Bvc3QgPSBmdW5jdGlvbigpIHsgXG4gICAgICByZXR1cm4gbG9nX3Bvc3Qoc3RhdGUsIGRhdGEpO1xuICAgIH07XG4gICAgLy8gUnVubmluZyB0aGUgbG9nX3Bvc3QgZnVuY3Rpb24gb25jZSBpbiBjYXNlIGl0IGZ1cnRoZXIgbW9kaWZpZXMgdGhlIHN0YXRlXG4gICAgLy8gZm9yIGV4YW1wbGUgYWRkaW5nIGRlcml2ZWQgcXVhbnRpdGllcy5cbiAgICB0aGlzLmxvZ19wb3N0KCk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuc3RlcHBlcnMgPSB0aGlzLmNyZWF0ZV9zdGVwcGVyX2Vuc2FtYmxlKHRoaXMucGFyYW1zLCB0aGlzLnN0YXRlLCB0aGlzLmxvZ19wb3N0LCB0aGlzLm9wdGlvbnMpO1xuICB9O1xuICBcbiAgLyoqIFNob3VsZCByZXR1cm4gYSB2ZWN0b3Igb2Ygc3RlcHBlcnMgdGhhdCB3aGVuIGNhbGxlZCBcbiAgICogc2hvdWxkIHRha2UgYSBzdGVwIGluIHRoZSBwYXJhbWV0ZXIgc3BhY2UuXG4gICAqL1xuICBTYW1wbGVyLnByb3RvdHlwZS5jcmVhdGVfc3RlcHBlcl9lbnNhbWJsZSA9IGZ1bmN0aW9uKHN0YXRlLCBsb2dfcG9zdCl7XG4gICAgdGhyb3cgXCJFdmVyeSBTYW1wbGVyIG5lZWRzIHRvIGltcGxlbWVudCBjcmVhdGVfc3RlcHBlcl9lbnNhbWJsZSgpXCI7XG4gIH07XG4gIFxuICAvKiogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBpbmZvIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgU2FtcGxlci5cbiAgICovIFxuICBTYW1wbGVyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtzdGF0ZTogdGhpcy5zdGF0ZSwgdGhpbjogdGhpcy50aGluLCBtb25pdG9yOiB0aGlzLm1vbml0b3IsXG4gICAgICAgICAgICBzdGVwcGVyczogdGhpcy5zdGVwcGVyc307XG4gIH07XG4gIFxuICAvKiogVGFrZXMgYSBzdGVwIGluIHRoZSBwYXJhbWV0ZXIgc3BhY2UuIFJldHVybnMgdGhlIG5ldyBzcGFjZVxuICAgKiBidXQgYWxzbyBtb2RpZmllcyB0aGUgc3RhdGUgaW4gcGxhY2UuXG4gICAqLyBcbiAgU2FtcGxlci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIHNodWZmbGVfYXJyYXkodGhpcy5zdGVwcGVycyk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3RlcHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc3RlcHBlcnNbaV0uc3RlcCgpO1xuICAgIH1cbiAgICBpZihPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcykubGVuZ3RoKSB7XG4gICAgICAvLyBUaGUgc3RhdGUgY29udGFpbnMgZGV2aXZlZCBxdWFudGl0aWVzIChub3Qgb25seSBwYXJhbWV0ZXJzKSBhbmQgd2VcbiAgICAgIC8vIG5lZWQgdG8gcnVuIHRoZSBsb2dfcG9zdCBvbmNlIG1vcmUgaW4gb3JkZXIgdG8gc2V0IHRoZSBkZXJpdmVkIHF1YW50aXRpZXNcbiAgICAgIC8vIGZvciB0aGUgZmluYWwgcGFyYW1ldGVyIHN0YXRlXG4gICAgICB0aGlzLmxvZ19wb3N0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlO1xuICB9O1xuICBcbiAgLyoqXG4gICAqIFRha2VzIG5faXRlcmF0aW9ucyBzdGVwcyBpbiB0aGUgcGFyYW1ldGVyIHNwYWNlIGFuZCByZXR1cm5zIHRoZW1cbiAgICogYXMgYW4gb2JqZWN0IG9mIGFycmF5cyB3aXRoIG9uZSBhcnJheSBwZXIgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZTpcbiAgICoge211OiBbMSwgLTEsIDIsIDMsIC4uLl0sIHNpZ21hOiBbMSwgMiwgMiwgMSwgLi4uXX0uXG4gICAqIElmIHRoaW4gaXMgPiAxIHRoZW4gbl9pdGVyYXRpb25zIC8gdGhpbiBzYW1wbGVzIGFyZSByZXR1cm5lZC5cbiAgICovIFxuICBTYW1wbGVyLnByb3RvdHlwZS5zYW1wbGUgPSBmdW5jdGlvbihuX2l0ZXJhdGlvbnMpIHtcbiAgICAgIC8vIEluaXRpYWxpemluZyBjdXJyX3NhbXBsZSB3aGVyZSB0aGUgc2FtcGxlIGlzIGdvaW5nIHRvIGJlIHNhdmVkXG4gICAgICAvLyBhcyBhbiBvYmplY3QgY29udGFpbmluZyBvbmUgYXJyYXkgcGVyIHBhcmFtZXRlciB0byBiZSBtb25pdG9yZWQuXG4gICAgICB2YXIgaSwgaiwgbW9uaXRvcmVkX3BhcmFtcztcbiAgICAgIGlmKHRoaXMubW9uaXRvcmVkX3BhcmFtcyA9PT0gbnVsbCkge1xuICAgICAgICBtb25pdG9yZWRfcGFyYW1zID0gT2JqZWN0LmtleXModGhpcy5zdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb25pdG9yZWRfcGFyYW1zID0gdGhpcy5tb25pdG9yZWRfcGFyYW1zO1xuICAgICAgfVxuICAgICAgXG4gICAgICB2YXIgY3Vycl9zYW1wbGUgPSB7fTtcbiAgICAgIGZvcihqID0gMDsgaiA8IG1vbml0b3JlZF9wYXJhbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY3Vycl9zYW1wbGVbbW9uaXRvcmVkX3BhcmFtc1tqXV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgZm9yKGkgPSAwOyBpIDwgbl9pdGVyYXRpb25zOyBpKyspIHtcbiAgICAgICAgaWYoaSAlIHRoaXMudGhpbm5pbmdfaW50ZXJ2YWwgPT09IDApIHtcbiAgICAgICAgICBmb3IoaiA9IDA7IGogPCBtb25pdG9yZWRfcGFyYW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtb25pdG9yZWRfcGFyYW1zW2pdO1xuICAgICAgICAgICAgY3Vycl9zYW1wbGVbcGFyYW1dLnB1c2goIGNsb25lX3BhcmFtX2RyYXcodGhpcy5zdGF0ZVtwYXJhbV0pICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJfc2FtcGxlO1xuICB9O1xuICBcbiAgLyoqXG4gICAqIFRha2VzIG5faXRlcmF0aW9uIHN0ZXBzIGluIHBhcmFtZXRlciBzcGFjZSBidXQgcmV0dXJucyBub3RoaW5nLlxuICAgKi8gXG4gIFNhbXBsZXIucHJvdG90eXBlLmJ1cm4gPSBmdW5jdGlvbihuX2l0ZXJhdGlvbnMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbl9pdGVyYXRpb25zOyBpKyspIHtcbiAgICAgIHRoaXMuc3RlcCgpO1xuICAgIH1cbiAgfTtcbiAgXG4gIC8qKlxuICAgKiBTZXRzIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgbW9uaXRvcmVkIGFuZCByZXR1cm5lZCB3aGVuIGNhbGxpbmdcbiAgICogc2FtcGxlLlxuICAgKi8gXG4gIFNhbXBsZXIucHJvdG90eXBlLm1vbml0b3IgPSBmdW5jdGlvbihwYXJhbXNfdG9fbW9uaXRvcikge1xuICAgICAgdGhpcy5tb25pdG9yZWRfcGFyYW1zID0gcGFyYW1zX3RvX21vbml0b3I7XG4gIH07XG4gIFxuICAvKipcbiAgICogU2V0cyB0aGUgdGhpbm5pbmcuIEZvciBleGFtcGxlIHRoaW4gPT0gMTAgbWVhbnMgdGhhdCBldmVyeSAxMHRoIHBvc3RlcmlvclxuICAgKiBkcmF3IHdpbGwgYmUga2VwdC5cbiAgICovIFxuICBTYW1wbGVyLnByb3RvdHlwZS50aGluID0gZnVuY3Rpb24odGhpbm5pbmdfaW50ZXJ2YWwpIHtcbiAgICB0aGlzLnRoaW5uaW5nX2ludGVydmFsID0gdGhpbm5pbmdfaW50ZXJ2YWw7XG4gIH07XG4gIFxuICAvKipcbiAgICogU2V0cyBhZGFwdGF0aW9uIG9uLCBpZiBhcHBsaWNhYmxlLCBpbiBhbGwgc3RlcHBlcnMuXG4gICAqLyBcbiAgU2FtcGxlci5wcm90b3R5cGUuc3RhcnRfYWRhcHRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnN0ZXBwZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnN0ZXBwZXJzW2ldLnN0YXJ0X2FkYXB0YXRpb24oKTtcbiAgICB9XG4gIH07XG4gIFxuICAgIC8qKlxuICAgKiBTZXRzIGFkYXB0YXRpb24gb2ZmLCBpZiBhcHBsaWNhYmxlLCBpbiBhbGwgc3RlcHBlcnMuXG4gICAqLyBcbiAgU2FtcGxlci5wcm90b3R5cGUuc3RvcF9hZGFwdGF0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3RlcHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc3RlcHBlcnNbaV0uc3RvcF9hZGFwdGF0aW9uKCk7XG4gICAgfVxuICB9O1xuICBcbiAgIC8qKlxuICAgKiBAY2xhc3NcbiAgICogQGltcGxlbWVudHMge1NhbXBsZXJ9XG4gICAqIFRoaXMgc2FtcGxlciB1c2VzIHRoZSBBbXdnU3RlcHBlciBhcyB0aGUgc3RlcHBlciBmdW5jdGlvbiB3aGljaCBpbXBsZW1lbnRzIHRoZSBcbiAgICogQWRhcHRpdmUgTWV0cm9wb2xpcy1XaXRoaW4tR2liYnMgYWxnb3JpdGhtIGluIFwiRXhhbXBsZXMgb2YgQWRhcHRpdmUgTUNNQ1wiXG4gICAqIGJ5IFJvYmVydHMgYW5kIFJvc2VudGhhbCAoMjAwOCkuIEFuIGFkaXRpb24gaXMgdGhhdCBpdCBoYW5kbGVzIGludCBwYXJhbWV0ZXJzXG4gICAqIGJ5IG1ha2luZyBkaXNjcmV0ZSBOb3JtYWwgcHJvcG9zYWxzIGFuZCBiaW5hcnkgcGFyYW1ldGVycyBieSB0YWtpbmcgb24gYSBuZXcgXG4gICAqIHZhbHVlIHByb3BvcnRpb25hbCB0byB0aGUgcG9zdGVyaW9yIG9mIHRoZSB0d28gcG9zc2libGUgc3RhdGVzIG9mIHRoZVxuICAgKiBwYXJhbWV0ZXIuIFRoaXMgc2FtcGxlciBjYW4gYmUgZWZmaWNpZW50IHdoZW4gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzXG4gICAqIGFyZSBub3QgdG9vIGhpZ2ggYW5kIHRoZSBjb3JyZWxhdGlvbnMgYmV0d2VlbiBwYXJhbWV0ZXJzIGFyZSBsb3cuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBBbiBvYmplY3Qgd2l0aCBhIG9uZSBvciBtb3JlIHBhcmFtZXRlciBkZWZpbml0aW9uc1xuICAgKiBAcGFyYW0gc3RhdGUgLSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhdGUgb2YgYWxsIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSBsb2dfcG9zdCAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBsb2cgZGVuc2l0eSB0aGF0IGRlcGVuZHMgb24gdGhlIHN0YXRlLiBcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zIHRvIHRoZSBzdGVwcGVyLlxuICAqL1xuICB2YXIgQW13Z1NhbXBsZXIgPSBmdW5jdGlvbihwYXJhbXMsIGxvZ19wb3N0LCBkYXRhLCBvcHRpb25zKSB7XG4gICAgU2FtcGxlci5jYWxsKHRoaXMsIHBhcmFtcywgbG9nX3Bvc3QsIGRhdGEsIG9wdGlvbnMpO1xuICB9O1xuICBcbiAgQW13Z1NhbXBsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTYW1wbGVyLnByb3RvdHlwZSk7IFxuICBBbXdnU2FtcGxlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbXdnU2FtcGxlcjtcbiAgXG4gIEFtd2dTYW1wbGVyLnByb3RvdHlwZS5jcmVhdGVfc3RlcHBlcl9lbnNhbWJsZSA9IGZ1bmN0aW9uKHBhcmFtcywgc3RhdGUsIGxvZ19wb3N0LCBvcHRpb25zKXtcbiAgICByZXR1cm4gWyBuZXcgQW13Z1N0ZXBwZXIocGFyYW1zLCBzdGF0ZSwgbG9nX3Bvc3QsIG9wdGlvbnMpIF07XG4gIH07XG4gIFxuICBcbiAgLy8gUmV0dXJuaW5nIHRoZSBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgcHVibGljbHkgZXhwb3NlZCBieSB0aGlzIG1vZHVsZVxuICByZXR1cm4ge1xuICAgIHJ1bmlmOiBydW5pZixcbiAgICBydW5pZl9kaXNjcmV0ZTogcnVuaWZfZGlzY3JldGUsXG4gICAgcm5vcm06IHJub3JtLFxuICAgIHBhcmFtX2luaXRfZml4ZWQ6IHBhcmFtX2luaXRfZml4ZWQsIFxuICAgIGNvbXBsZXRlX3BhcmFtczogY29tcGxldGVfcGFyYW1zLCBcbiAgICBSZWFsTWV0cm9wb2xpc1N0ZXBwZXI6IFJlYWxNZXRyb3BvbGlzU3RlcHBlciwgXG4gICAgSW50TWV0cm9wb2xpc1N0ZXBwZXI6IEludE1ldHJvcG9saXNTdGVwcGVyLCBcbiAgICBNdWx0aVJlYWxDb21wb25lbnRNZXRyb3BvbGlzU3RlcHBlcjogTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIsIFxuICAgIE11bHRpSW50Q29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXI6IE11bHRpSW50Q29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIsIFxuICAgIEJpbmFyeVN0ZXBwZXI6IEJpbmFyeVN0ZXBwZXIsIFxuICAgIEJpbmFyeUNvbXBvbmVudFN0ZXBwZXI6IEJpbmFyeUNvbXBvbmVudFN0ZXBwZXIsIFxuICAgIEFtd2dTdGVwcGVyOiBBbXdnU3RlcHBlciwgXG4gICAgQW13Z1NhbXBsZXI6IEFtd2dTYW1wbGVyXG4gIH07XG59KSk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA9PSBudWxsIHx8IGIgPT0gbnVsbCA/IE5hTiA6IGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBudW1iZXJzKHZhbHVlcywgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IHBlcm11dGUgZnJvbSBcIi4vcGVybXV0ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0KHZhbHVlcywgLi4uRikge1xuICBpZiAodHlwZW9mIHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB2YWx1ZXMgPSBBcnJheS5mcm9tKHZhbHVlcyk7XG4gIGxldCBbZl0gPSBGO1xuICBpZiAoKGYgJiYgZi5sZW5ndGggIT09IDIpIHx8IEYubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGluZGV4ID0gVWludDMyQXJyYXkuZnJvbSh2YWx1ZXMsIChkLCBpKSA9PiBpKTtcbiAgICBpZiAoRi5sZW5ndGggPiAxKSB7XG4gICAgICBGID0gRi5tYXAoZiA9PiB2YWx1ZXMubWFwKGYpKTtcbiAgICAgIGluZGV4LnNvcnQoKGksIGopID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIEYpIHtcbiAgICAgICAgICBjb25zdCBjID0gYXNjZW5kaW5nRGVmaW5lZChmW2ldLCBmW2pdKTtcbiAgICAgICAgICBpZiAoYykgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmID0gdmFsdWVzLm1hcChmKTtcbiAgICAgIGluZGV4LnNvcnQoKGksIGopID0+IGFzY2VuZGluZ0RlZmluZWQoZltpXSwgZltqXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGVybXV0ZSh2YWx1ZXMsIGluZGV4KTtcbiAgfVxuICByZXR1cm4gdmFsdWVzLnNvcnQoY29tcGFyZURlZmluZWQoZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZURlZmluZWQoY29tcGFyZSA9IGFzY2VuZGluZykge1xuICBpZiAoY29tcGFyZSA9PT0gYXNjZW5kaW5nKSByZXR1cm4gYXNjZW5kaW5nRGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBjb21wYXJlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb21wYXJlIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICBjb25zdCB4ID0gY29tcGFyZShhLCBiKTtcbiAgICBpZiAoeCB8fCB4ID09PSAwKSByZXR1cm4geDtcbiAgICByZXR1cm4gKGNvbXBhcmUoYiwgYikgPT09IDApIC0gKGNvbXBhcmUoYSwgYSkgPT09IDApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kaW5nRGVmaW5lZChhLCBiKSB7XG4gIHJldHVybiAoYSA9PSBudWxsIHx8ICEoYSA+PSBhKSkgLSAoYiA9PSBudWxsIHx8ICEoYiA+PSBiKSkgfHwgKGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1heCh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1heDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtYXggPCB2YWx1ZSB8fCAobWF4ID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtYXggPCB2YWx1ZSB8fCAobWF4ID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiIsImltcG9ydCB7YXNjZW5kaW5nRGVmaW5lZCwgY29tcGFyZURlZmluZWR9IGZyb20gXCIuL3NvcnQuanNcIjtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL21vdXJuZXIvcXVpY2tzZWxlY3Rcbi8vIElTQyBsaWNlbnNlLCBDb3B5cmlnaHQgMjAxOCBWbGFkaW1pciBBZ2Fmb25raW4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWlja3NlbGVjdChhcnJheSwgaywgbGVmdCA9IDAsIHJpZ2h0ID0gSW5maW5pdHksIGNvbXBhcmUpIHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGxlZnQgPSBNYXRoLmZsb29yKE1hdGgubWF4KDAsIGxlZnQpKTtcbiAgcmlnaHQgPSBNYXRoLmZsb29yKE1hdGgubWluKGFycmF5Lmxlbmd0aCAtIDEsIHJpZ2h0KSk7XG5cbiAgaWYgKCEobGVmdCA8PSBrICYmIGsgPD0gcmlnaHQpKSByZXR1cm4gYXJyYXk7XG5cbiAgY29tcGFyZSA9IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IGFzY2VuZGluZ0RlZmluZWQgOiBjb21wYXJlRGVmaW5lZChjb21wYXJlKTtcblxuICB3aGlsZSAocmlnaHQgPiBsZWZ0KSB7XG4gICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgY29uc3QgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICBjb25zdCBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgY29uc3QgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgY29uc3QgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICBjb25zdCBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgY29uc3QgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIHF1aWNrc2VsZWN0KGFycmF5LCBrLCBuZXdMZWZ0LCBuZXdSaWdodCwgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IGFycmF5W2tdO1xuICAgIGxldCBpID0gbGVmdDtcbiAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgc3dhcChhcnJheSwgbGVmdCwgayk7XG4gICAgaWYgKGNvbXBhcmUoYXJyYXlbcmlnaHRdLCB0KSA+IDApIHN3YXAoYXJyYXksIGxlZnQsIHJpZ2h0KTtcblxuICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgc3dhcChhcnJheSwgaSwgaiksICsraSwgLS1qO1xuICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyYXlbaV0sIHQpIDwgMCkgKytpO1xuICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyYXlbal0sIHQpID4gMCkgLS1qO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlKGFycmF5W2xlZnRdLCB0KSA9PT0gMCkgc3dhcChhcnJheSwgbGVmdCwgaik7XG4gICAgZWxzZSArK2osIHN3YXAoYXJyYXksIGosIHJpZ2h0KTtcblxuICAgIGlmIChqIDw9IGspIGxlZnQgPSBqICsgMTtcbiAgICBpZiAoayA8PSBqKSByaWdodCA9IGogLSAxO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBzd2FwKGFycmF5LCBpLCBqKSB7XG4gIGNvbnN0IHQgPSBhcnJheVtpXTtcbiAgYXJyYXlbaV0gPSBhcnJheVtqXTtcbiAgYXJyYXlbal0gPSB0O1xufVxuIiwiaW1wb3J0IG1heCBmcm9tIFwiLi9tYXguanNcIjtcbmltcG9ydCBtYXhJbmRleCBmcm9tIFwiLi9tYXhJbmRleC5qc1wiO1xuaW1wb3J0IG1pbiBmcm9tIFwiLi9taW4uanNcIjtcbmltcG9ydCBtaW5JbmRleCBmcm9tIFwiLi9taW5JbmRleC5qc1wiO1xuaW1wb3J0IHF1aWNrc2VsZWN0IGZyb20gXCIuL3F1aWNrc2VsZWN0LmpzXCI7XG5pbXBvcnQgbnVtYmVyLCB7bnVtYmVyc30gZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge2FzY2VuZGluZ0RlZmluZWR9IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBncmVhdGVzdCBmcm9tIFwiLi9ncmVhdGVzdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFudGlsZSh2YWx1ZXMsIHAsIHZhbHVlb2YpIHtcbiAgdmFsdWVzID0gRmxvYXQ2NEFycmF5LmZyb20obnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpKTtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpIHx8IGlzTmFOKHAgPSArcCkpIHJldHVybjtcbiAgaWYgKHAgPD0gMCB8fCBuIDwgMikgcmV0dXJuIG1pbih2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gbWF4KHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gbWF4KHF1aWNrc2VsZWN0KHZhbHVlcywgaTApLnN1YmFycmF5KDAsIGkwICsgMSkpLFxuICAgICAgdmFsdWUxID0gbWluKHZhbHVlcy5zdWJhcnJheShpMCArIDEpKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWFudGlsZVNvcnRlZCh2YWx1ZXMsIHAsIHZhbHVlb2YgPSBudW1iZXIpIHtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpIHx8IGlzTmFOKHAgPSArcCkpIHJldHVybjtcbiAgaWYgKHAgPD0gMCB8fCBuIDwgMikgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1swXSwgMCwgdmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1tuIC0gMV0sIG4gLSAxLCB2YWx1ZXMpO1xuICB2YXIgbixcbiAgICAgIGkgPSAobiAtIDEpICogcCxcbiAgICAgIGkwID0gTWF0aC5mbG9vcihpKSxcbiAgICAgIHZhbHVlMCA9ICt2YWx1ZW9mKHZhbHVlc1tpMF0sIGkwLCB2YWx1ZXMpLFxuICAgICAgdmFsdWUxID0gK3ZhbHVlb2YodmFsdWVzW2kwICsgMV0sIGkwICsgMSwgdmFsdWVzKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWFudGlsZUluZGV4KHZhbHVlcywgcCwgdmFsdWVvZiA9IG51bWJlcikge1xuICBpZiAoaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBudW1iZXJzID0gRmxvYXQ2NEFycmF5LmZyb20odmFsdWVzLCAoXywgaSkgPT4gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSk7XG4gIGlmIChwIDw9IDApIHJldHVybiBtaW5JbmRleChudW1iZXJzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuIG1heEluZGV4KG51bWJlcnMpO1xuICB2YXIgbnVtYmVycyxcbiAgICAgIGluZGV4ID0gVWludDMyQXJyYXkuZnJvbSh2YWx1ZXMsIChfLCBpKSA9PiBpKSxcbiAgICAgIGogPSBudW1iZXJzLmxlbmd0aCAtIDEsXG4gICAgICBpID0gTWF0aC5mbG9vcihqICogcCk7XG4gIHF1aWNrc2VsZWN0KGluZGV4LCBpLCAwLCBqLCAoaSwgaikgPT4gYXNjZW5kaW5nRGVmaW5lZChudW1iZXJzW2ldLCBudW1iZXJzW2pdKSk7XG4gIGkgPSBncmVhdGVzdChpbmRleC5zdWJhcnJheSgwLCBpICsgMSksIChpKSA9PiBudW1iZXJzW2ldKTtcbiAgcmV0dXJuIGkgPj0gMCA/IGkgOiAtMTtcbn1cbiIsImltcG9ydCBxdWFudGlsZSwge3F1YW50aWxlSW5kZXh9IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lZGlhbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgcmV0dXJuIHF1YW50aWxlKHZhbHVlcywgMC41LCB2YWx1ZW9mKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lZGlhbkluZGV4KHZhbHVlcywgdmFsdWVvZikge1xuICByZXR1cm4gcXVhbnRpbGVJbmRleCh2YWx1ZXMsIDAuNSwgdmFsdWVvZik7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gVHJhbnNmb3JtKGssIHgsIHkpIHtcbiAgdGhpcy5rID0gaztcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zZm9ybSxcbiAgc2NhbGU6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gayA9PT0gMSA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuayAqIGssIHRoaXMueCwgdGhpcy55KTtcbiAgfSxcbiAgdHJhbnNsYXRlOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPT09IDAgJiB5ID09PSAwID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rLCB0aGlzLnggKyB0aGlzLmsgKiB4LCB0aGlzLnkgKyB0aGlzLmsgKiB5KTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIFtwb2ludFswXSAqIHRoaXMuayArIHRoaXMueCwgcG9pbnRbMV0gKiB0aGlzLmsgKyB0aGlzLnldO1xuICB9LFxuICBhcHBseVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuayArIHRoaXMueDtcbiAgfSxcbiAgYXBwbHlZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmsgKyB0aGlzLnk7XG4gIH0sXG4gIGludmVydDogZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICByZXR1cm4gWyhsb2NhdGlvblswXSAtIHRoaXMueCkgLyB0aGlzLmssIChsb2NhdGlvblsxXSAtIHRoaXMueSkgLyB0aGlzLmtdO1xuICB9LFxuICBpbnZlcnRYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy54KSAvIHRoaXMuaztcbiAgfSxcbiAgaW52ZXJ0WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoeSAtIHRoaXMueSkgLyB0aGlzLms7XG4gIH0sXG4gIHJlc2NhbGVYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHguY29weSgpLmRvbWFpbih4LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCwgdGhpcykubWFwKHguaW52ZXJ0LCB4KSk7XG4gIH0sXG4gIHJlc2NhbGVZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkuY29weSgpLmRvbWFpbih5LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSwgdGhpcykubWFwKHkuaW52ZXJ0LCB5KSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiKSBzY2FsZShcIiArIHRoaXMuayArIFwiKVwiO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gbmV3IFRyYW5zZm9ybSgxLCAwLCAwKTtcblxudHJhbnNmb3JtLnByb3RvdHlwZSA9IFRyYW5zZm9ybS5wcm90b3R5cGU7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX3pvb20pIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHJldHVybiBub2RlLl9fem9vbTtcbn1cbiIsIlxuLypcbiAgSFRETWF0aCBTdGF0aWMgQ2xhc3MgLSBOb3QgaW50ZW5kZWQgZm9yIGluc3RhbnRpYXRpb24hXG5cbiAgVmFyaWFibGVzOlxuICAgIEEgPSBhbW91bnRcbiAgICBEID0gZGVsYXlcbiAgICBWID0gc3ViamVjdGl2ZSB2YWx1ZVxuXG4gICAgayA9IGRpc2NvdW50IGZhY3RvclxuXG4gIEVxdWF0aW9uczpcbiAgICBWID0gQSAvICgxICsga0QpXG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSFRETWF0aCB7XG4gIHN0YXRpYyBhZGsydihhLCBkLCBrKSB7XG4gICAgcmV0dXJuIGEgLyAoMSArIGsgKiBkKTtcbiAgfVxuXG4gIHN0YXRpYyBhZHYyayhhLCBkLCB2KSB7XG4gICAgcmV0dXJuIChhIC0gdikgLyAodiAqIGQpO1xuICB9XG59XG4iLCJcbi8vIEludGVybmFsIGRlcGVuZGVuY2llc1xuaW1wb3J0IEhURE1hdGggZnJvbSAnLi9odGQtbWF0aCc7XG5cbmV4cG9ydCBkZWZhdWx0IEhURE1hdGg7XG4iLCIvKiBlc2xpbnQgbm8tcmVzdHJpY3RlZC1nbG9iYWxzOiBbXCJvZmZcIiwgXCJzZWxmXCJdICovXG5cbi8vIE5lZWRlZCBmb3IgZDMgaW4gV2ViV29ya2VyIVxuaW1wb3J0ICdyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUnO1xuXG5pbXBvcnQgKiBhcyBCYXllc0Rpc3RyaWJ1dGlvbnMgZnJvbSAnYmF5ZXMuanMvZGlzdHJpYnV0aW9ucyc7XG5pbXBvcnQgKiBhcyBCYXllc01jbWMgZnJvbSAnYmF5ZXMuanMvbWNtYyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgSFRETWF0aCBmcm9tICdAZGVjaWRhYmxlcy9kaXNjb3VudGFibGUtbWF0aCc7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBrOiB7dHlwZTogJ3JlYWwnLCBsb3dlcjogMCwgdXBwZXI6IDEwMH0sXG4gICAgbHVjZToge3R5cGU6ICdyZWFsJywgbG93ZXI6IDAsIHVwcGVyOiAxMDB9LFxuICB9O1xuXG4gIGNvbnN0IGxvZ1Bvc3QgPSAoc3RhdGUsIGRhdGEpID0+IHtcbiAgICBsZXQgbHAgPSAwO1xuXG4gICAgLy8gUHJpb3JzXG4gICAgY29uc3Qga01lYW4gPSAyO1xuICAgIGNvbnN0IGtTaGFwZSA9IDM7XG4gICAgbHAgKz0gQmF5ZXNEaXN0cmlidXRpb25zLmdhbW1hKFxuICAgICAgc3RhdGUuayxcbiAgICAgIGtTaGFwZSxcbiAgICAgIGtTaGFwZSAvIGtNZWFuLFxuICAgICk7XG4gICAgLy8gbHAgKz0gQmF5ZXNEaXN0cmlidXRpb25zLnVuaWYoc3RhdGUuaywgMCwgMTAwKTtcblxuICAgIGNvbnN0IGx1Y2VNZWFuID0gMjtcbiAgICBjb25zdCBsdWNlU2hhcGUgPSAzO1xuICAgIGxwICs9IEJheWVzRGlzdHJpYnV0aW9ucy5nYW1tYShcbiAgICAgIHN0YXRlLmx1Y2UsXG4gICAgICBsdWNlU2hhcGUsXG4gICAgICBsdWNlU2hhcGUgLyBsdWNlTWVhbixcbiAgICApO1xuICAgIC8vIGxwICs9IEJheWVzRGlzdHJpYnV0aW9ucy51bmlmKHN0YXRlLmx1Y2UsIDAsIDEwMCk7XG5cbiAgICAvLyBMaWtlbGlob29kXG4gICAgZGF0YS5mb3JFYWNoKChjaG9pY2UpID0+IHtcbiAgICAgIC8vIFZhbHVlc1xuICAgICAgY29uc3QgdnMgPSBIVERNYXRoLmFkazJ2KGNob2ljZS5hcywgY2hvaWNlLmRzLCBzdGF0ZS5rKTtcbiAgICAgIGNvbnN0IHZsID0gSFRETWF0aC5hZGsydihjaG9pY2UuYWwsIGNob2ljZS5kbCwgc3RhdGUuayk7XG5cbiAgICAgIC8vIENob2ljZSBvZiBzb29uZXIgb3IgbGF0ZXIgaXMgc2FtcGxlZCBmcm9tIGEgQmVybm91bGxpIGRpc3RyaWJ1dGlvblxuICAgICAgLy8gTHVjZSBjaG9pY2UgcnVsZSBpcyB1c2VkIHRvIGNvbXB1dGUgcHJvYmFiaWxpdHkgb2Ygd2FpdGluZyEgKDAgPSBzb29uZXIsIDEgPSBsYXRlcilcbiAgICAgIGNvbnN0IGJpbnZhbCA9IDEgLyAoMSArIE1hdGguZXhwKHN0YXRlLmx1Y2UgKiAodnMgLSB2bCkpKTtcblxuICAgICAgLy8gQWN0dWFsIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZSA9IChjaG9pY2UucmVzcG9uc2UgPT09ICdmaXJzdCcpID8gMCA6IDE7XG5cbiAgICAgIGxwICs9IEJheWVzRGlzdHJpYnV0aW9ucy5iZXJuKHJlc3BvbnNlLCBiaW52YWwpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxwO1xuICB9O1xuXG4gIC8vIEluaXRpYWxpemluZyB0aGUgc2FtcGxlclxuICBjb25zdCBzYW1wbGVyID0gbmV3IEJheWVzTWNtYy5BbXdnU2FtcGxlcihwYXJhbXMsIGxvZ1Bvc3QsIGV2ZW50LmRhdGEpO1xuICAvLyBCdXJuaW5nIHNvbWUgc2FtcGxlcyB0byB0aGUgTUNNQyBnb2RzIGFuZCBzYW1wbGluZyA1MDAwIGRyYXdzXG4gIHNhbXBsZXIuYnVybigxMDAwKTtcbiAgY29uc3Qgc2FtcGxlcyA9IHNhbXBsZXIuc2FtcGxlKDUwMDApO1xuXG4gIC8vIEV4dHJhY3Qgc3VtbWFyeSBzdGF0c1xuICBjb25zdCByZXN1bHRzID0ge1xuICAgIGs6IGQzLm1lZGlhbihzYW1wbGVzLmspLFxuICAgIGx1Y2U6IGQzLm1lZGlhbihzYW1wbGVzLmx1Y2UpLFxuICB9O1xuXG4gIHNlbGYucG9zdE1lc3NhZ2Uoe3Jlc3VsdHM6IHJlc3VsdHMsIHNhbXBsZXM6IHNhbXBsZXN9KTtcbn07XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwibGQiLCJ0aGlzIiwibGdhbW1hIiwieCIsImoiLCJjb2YiLCJzZXIiLCJ4eCIsInkiLCJ0bXAiLCJsb2ciLCJsZmFjdG9yaWFsIiwibiIsIk5hTiIsImxjaG9vc2UiLCJrIiwibGJldGEiLCJhIiwiYiIsIk1hdGgiLCJleHAiLCJhYnMiLCJwb3ciLCJzcXJ0IiwicGkiLCJQSSIsImJldGEiLCJzaGFwZTEiLCJzaGFwZTIiLCJJbmZpbml0eSIsImNhdWNoeSIsImxvY2F0aW9uIiwic2NhbGUiLCJub3JtIiwibWVhbiIsInNkIiwiYml2YXJub3JtIiwiY29yciIsInoiLCJub3JtYWxpemluZ19mYWN0b3IiLCJiaXZhcl9sb2dfZGVucyIsImxhcGxhY2UiLCJkZXhwIiwiZ2FtbWEiLCJzaGFwZSIsInJhdGUiLCJpbnZnYW1tYSIsImxub3JtIiwibWVhbmxvZyIsInNkbG9nIiwicGFyZXRvIiwidCIsImRmIiwid2VpYnVsbCIsInRtcDEiLCJ0bXAyIiwibG9naXMiLCJlIiwiZiIsImRpcmljaGxldCIsImFscGhhIiwic3VtX2FscGhhIiwic3VtX2xnYW1tYV9hbHBoYSIsInN1bV9hbHBoYV9zdWJfMV9sb2dfeCIsImxlbmd0aCIsImkiLCJ1bmlmIiwibWluIiwibWF4IiwiYmVybiIsInByb2IiLCJjYXQiLCJwcm9icyIsImJpbm9tIiwic2l6ZSIsIm5iaW5vbSIsImh5cGVyIiwibSIsInBvaXMiLCJsYW1iZGEiLCJtY21jIiwicnVuaWYiLCJyYW5kb20iLCJydW5pZl9kaXNjcmV0ZSIsImZsb29yIiwicm5vcm0iLCJ1IiwidiIsInEiLCJkZWVwX2Nsb25lIiwic3JjIiwibWl4aW4iLCJkZXN0Iiwic291cmNlIiwiY29weUZ1bmMiLCJuYW1lIiwicyIsImVtcHR5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibm9kZVR5cGUiLCJjbG9uZU5vZGUiLCJEYXRlIiwiZ2V0VGltZSIsIlJlZ0V4cCIsInIiLCJsIiwiQXJyYXkiLCJwdXNoIiwiY29uc3RydWN0b3IiLCJjbG9uZV9wYXJhbV9kcmF3IiwiaXNBcnJheSIsInhfY29weSIsInNsaWNlIiwiaXNfbnVtYmVyIiwib2JqZWN0IiwiTnVtYmVyIiwiY3JlYXRlX2FycmF5IiwiZGltIiwiaW5pdCIsImFyciIsImFycmF5X2RpbSIsImNvbmNhdCIsImFycmF5X2VxdWFsIiwiYTEiLCJhMiIsIm5lc3RlZF9hcnJheV9hcHBseSIsImZ1biIsInJlc3VsdCIsInNodWZmbGVfYXJyYXkiLCJhcnJheSIsInRlbXAiLCJuZXN0ZWRfYXJyYXlfcmFuZG9tX2FwcGx5IiwibGVuIiwiYXJyYXlfaXMiLCJhcnJheV9pIiwiZ2V0X29wdGlvbiIsIm9wdGlvbl9uYW1lIiwib3B0aW9ucyIsImRlZmF1bF92YWx1ZSIsImhhc093blByb3BlcnR5IiwidW5kZWZpbmVkIiwiZ2V0X211bHRpZGltX29wdGlvbiIsInZhbHVlIiwicGFyYW1faW5pdF9maXhlZCIsInR5cGUiLCJsb3dlciIsInVwcGVyIiwicm91bmQiLCJjb21wbGV0ZV9wYXJhbXMiLCJwYXJhbXNfdG9fY29tcGxldGUiLCJwYXJhbV9pbml0IiwicGFyYW1zIiwicGFyYW1fbmFtZSIsInBhcmFtIiwiU3RlcHBlciIsInN0YXRlIiwibG9nX3Bvc3QiLCJzdGVwIiwic3RhcnRfYWRhcHRhdGlvbiIsInN0b3BfYWRhcHRhdGlvbiIsImluZm8iLCJPbmVkaW1NZXRyb3BvbGlzU3RlcHBlciIsImdlbmVyYXRlX3Byb3Bvc2FsIiwicGFyYW1fbmFtZXMiLCJrZXlzIiwicHJvcF9sb2dfc2NhbGUiLCJiYXRjaF9zaXplIiwibWF4X2FkYXB0YXRpb24iLCJpbml0aWFsX2FkYXB0YXRpb24iLCJ0YXJnZXRfYWNjZXB0X3JhdGUiLCJpc19hZGFwdGluZyIsImFjY2VwdGFuY2VfY291bnQiLCJiYXRjaF9jb3VudCIsIml0ZXJhdGlvbnNfc2luY2VfYWRhcHRpb24iLCJjcmVhdGUiLCJwYXJhbV9zdGF0ZSIsInBhcmFtX3Byb3Bvc2FsIiwiY3Vycl9sb2dfZGVucyIsInByb3BfbG9nX2RlbnMiLCJhY2NlcHRfcHJvYiIsImxvZ19zZF9hZGp1c3RtZW50Iiwibm9ybWFsX3Byb3Bvc2FsIiwiUmVhbE1ldHJvcG9saXNTdGVwcGVyIiwiZGlzY3JldGVfbm9ybWFsX3Byb3Bvc2FsIiwiSW50TWV0cm9wb2xpc1N0ZXBwZXIiLCJNdWx0aWRpbUNvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyIiwiU3ViU3RlcHBlciIsImNyZWF0ZV9zdWJzdGVwcGVycyIsInN1YnN0YXRlIiwic3Vic3RlcHBlcnMiLCJzdWJvcHRpb25zIiwic3VicGFyYW0iLCJzdWJzdGVwcGVyIiwiTXVsdGlSZWFsQ29tcG9uZW50TWV0cm9wb2xpc1N0ZXBwZXIiLCJNdWx0aUludENvbXBvbmVudE1ldHJvcG9saXNTdGVwcGVyIiwiQmluYXJ5U3RlcHBlciIsInplcm9fbG9nX2RlbnMiLCJvbmVfbG9nX2RlbnMiLCJtYXhfbG9nX2RlbnMiLCJ6ZXJvX3Byb2IiLCJCaW5hcnlDb21wb25lbnRTdGVwcGVyIiwic3VicGFyYW1zIiwiQW13Z1N0ZXBwZXIiLCJTZWxlY3RTdGVwcGVyIiwicGFyYW1fb2JqZWN0X3dyYXAiLCJwYXJhbV9vcHRpb25zIiwiU2FtcGxlciIsImRhdGEiLCJwYXJhbV9pbml0X2Z1biIsInRoaW5uaW5nX2ludGVydmFsIiwicGFyYW1zX3RvX21vbml0b3IiLCJ0aGluIiwibW9uaXRvciIsInN0ZXBwZXJzIiwiY3JlYXRlX3N0ZXBwZXJfZW5zYW1ibGUiLCJzYW1wbGUiLCJuX2l0ZXJhdGlvbnMiLCJtb25pdG9yZWRfcGFyYW1zIiwiY3Vycl9zYW1wbGUiLCJidXJuIiwiQW13Z1NhbXBsZXIiLCJhc2NlbmRpbmciLCJudW1iZXJzIiwidmFsdWVzIiwidmFsdWVvZiIsImluZGV4IiwiY29tcGFyZURlZmluZWQiLCJjb21wYXJlIiwiYXNjZW5kaW5nRGVmaW5lZCIsIlR5cGVFcnJvciIsInF1aWNrc2VsZWN0IiwibGVmdCIsInJpZ2h0IiwibmV3TGVmdCIsIm5ld1JpZ2h0Iiwic3dhcCIsInF1YW50aWxlIiwicCIsIkZsb2F0NjRBcnJheSIsImZyb20iLCJpc05hTiIsImkwIiwidmFsdWUwIiwic3ViYXJyYXkiLCJ2YWx1ZTEiLCJtZWRpYW4iLCJUcmFuc2Zvcm0iLCJ0cmFuc2xhdGUiLCJhcHBseSIsInBvaW50IiwiYXBwbHlYIiwiYXBwbHlZIiwiaW52ZXJ0IiwiaW52ZXJ0WCIsImludmVydFkiLCJyZXNjYWxlWCIsImNvcHkiLCJkb21haW4iLCJyYW5nZSIsIm1hcCIsInJlc2NhbGVZIiwiSFRETWF0aCIsImFkazJ2IiwiZCIsImFkdjJrIiwic2VsZiIsIm9ubWVzc2FnZSIsImV2ZW50IiwibHVjZSIsImxvZ1Bvc3QiLCJscCIsImtNZWFuIiwia1NoYXBlIiwiQmF5ZXNEaXN0cmlidXRpb25zIiwibHVjZU1lYW4iLCJsdWNlU2hhcGUiLCJmb3JFYWNoIiwiY2hvaWNlIiwidnMiLCJhcyIsImRzIiwidmwiLCJhbCIsImRsIiwiYmludmFsIiwicmVzcG9uc2UiLCJzYW1wbGVyIiwiQmF5ZXNNY21jIiwic2FtcGxlcyIsInJlc3VsdHMiLCJkMyIsInBvc3RNZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Q0FHQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FFQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FPQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQyxDQUFVQSxVQUFBQSxJQUFJLEVBQUVDLE9BQU8sRUFBRTtLQUlmLElBQWtDQyxNQUFNLENBQUNDLE9BQU8sRUFBRTtDQUM3RDtDQUNBO0NBQ0E7Q0FDUUQsTUFBQUEsTUFBQSxDQUFBQyxPQUFBLEdBQWlCRixPQUFPLEVBQUUsQ0FBQTtDQUNsQyxLQUFLLE1BQU07Q0FDWDtDQUNRRCxNQUFBQSxJQUFJLENBQUNJLEVBQUUsR0FBR0gsT0FBTyxFQUFFLENBQUE7Q0FDeEIsS0FBQTtDQUNILEdBQUMsRUFBQ0ksY0FBSSxFQUFFLFlBQVc7Q0FDbkI7S0FDRSxJQUFJRCxFQUFFLEdBQUksRUFBRSxDQUFBOztDQUVkO0NBQ0E7O0NBRUUsSUFBQSxJQUFJRSxNQUFNLEdBQUcsVUFBU0MsQ0FBQyxFQUFFO09BQ3ZCLElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUE7Q0FDVCxNQUFBLElBQUlDLEdBQUcsR0FBRyxDQUNSLGlCQUFpQixFQUFFLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3hELENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FDL0QsQ0FBQTtPQUNELElBQUlDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQTtDQUMzQixNQUFBLElBQUlDLEVBQUUsRUFBRUMsQ0FBQyxFQUFFQyxHQUFHLENBQUE7T0FDZEEsR0FBRyxHQUFHLENBQUNELENBQUMsR0FBR0QsRUFBRSxHQUFHSixDQUFDLElBQUks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QkFBd0IsQ0FDNUJ0SCxLQUFLLENBQUNpSCxJQUFJLEVBQ1ZPLFNBQVMsRUFDVEEsU0FBUyxHQUFHRCxRQUNkLENBQUMsQ0FBQTtDQUNEOztDQUVBO0NBQ0FuRSxJQUFBQSxJQUFJLENBQUNxRSxPQUFPLENBQUVDLE1BQU0sSUFBSztDQUN2QjtDQUNBLE1BQUEsTUFBTUMsRUFBRSxHQUFHakIsT0FBTyxDQUFDQyxLQUFLLENBQUNlLE1BQU0sQ0FBQ0UsRUFBRSxFQUFFRixNQUFNLENBQUNHLEVBQUUsRUFBRTdILEtBQUssQ0FBQy9JLENBQUMsQ0FBQyxDQUFBO0NBQ3ZELE1BQUEsTUFBTTZRLEVBQUUsR0FBR3BCLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDZSxNQUFNLENBQUNLLEVBQUUsRUFBRUwsTUFBTSxDQUFDTSxFQUFFLEVBQUVoSSxLQUFLLENBQUMvSSxDQUFDLENBQUMsQ0FBQTs7Q0FFdkQ7Q0FDQTtDQUNBLE1BQUEsTUFBTWdSLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHNVEsSUFBSSxDQUFDQyxHQUFHLENBQUMwSSxLQUFLLENBQUNpSCxJQUFJLElBQUlVLEVBQUUsR0FBR0csRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBOztDQUV6RDtPQUNBLE1BQU1JLFFBQVEsR0FBSVIsTUFBTSxDQUFDUSxRQUFRLEtBQUssT0FBTyxHQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7T0FFdERmLEVBQUUsSUFBSUcseUJBQXVCLENBQUNZLFFBQVEsRUFBRUQsTUFBTSxDQUFDLENBQUE7Q0FDakQsS0FBQyxDQUFDLENBQUE7Q0FFRixJQUFBLE9BQU9kLEVBQUUsQ0FBQTtJQUNWLENBQUE7O0NBRUQ7Q0FDQSxFQUFBLE1BQU1nQixPQUFPLEdBQUcsSUFBSUMsdUJBQXFCLENBQUN4SSxNQUFNLEVBQUVzSCxPQUFPLEVBQUVGLEtBQUssQ0FBQzVELElBQUksQ0FBQyxDQUFBO0NBQ3RFO0NBQ0ErRSxFQUFBQSxPQUFPLENBQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Q0FDbEIsRUFBQSxNQUFNcUUsT0FBTyxHQUFHRixPQUFPLENBQUN2RSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7O0NBRXBDO0NBQ0EsRUFBQSxNQUFNMEUsT0FBTyxHQUFHO0tBQ2RyUixDQUFDLEVBQUVzUixNQUFTLENBQUNGLE9BQU8sQ0FBQ3BSLENBQUMsQ0FBQztDQUN2QmdRLElBQUFBLElBQUksRUFBRXNCLE1BQVMsQ0FBQ0YsT0FBTyxDQUFDcEIsSUFBSSxDQUFBO0lBQzdCLENBQUE7R0FFREgsSUFBSSxDQUFDMEIsV0FBVyxDQUFDO0NBQUNGLElBQUFBLE9BQU8sRUFBRUEsT0FBTztDQUFFRCxJQUFBQSxPQUFPLEVBQUVBLE9BQUFBO0NBQU8sR0FBQyxDQUFDLENBQUE7Q0FDeEQsQ0FBQzs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwXX0=",pp=!1,function(t){return mp=mp||yp(fp,Gp,pp),new Worker(mp,t)});class xp extends Lu{static get properties(){return{}}constructor(){super(),this.k=.05,this.choices=[],this.samples=null,this.working=!1,this.queued=!1,this.worker=new Ap,this.worker.onmessage=t=>{this.working=!1,this.samples=t.data.samples,this.k=t.data.results.k,this.requestUpdate(),this.dispatchEvent(new CustomEvent("htd-fit-update",{detail:{k:this.k},bubbles:!0})),this.queued&&this.fit()},this.fit()}fit(){this.working?this.queued=!0:(this.worker.postMessage(this.choices),this.working=!0,this.queued=!1)}clear(){this.choices=[],this.fit()}get(t="default"){const e=this.choices.find((e=>e.name===t));return void 0===e?null:e}set(t,e,n,i,s,c="",a=""){const l=this.choices.find((t=>t.name===c));void 0===l?this.choices.push({as:t,ds:e,al:n,dl:i,response:s,name:c,label:a}):(l.as=t,l.ds=e,l.al=n,l.dl=i,l.response=s,l.label=a),this.fit()}static get styles(){return[super.styles,l`
1376
+ /* :host {
1377
+ display: inline-block;
1378
+ } */
1379
+
1380
+ figure {
1381
+ margin: 0.625rem;
1382
+ }
1383
+
1384
+ figure h2 {
1385
+ margin: 0.25rem 0;
1386
+
1387
+ font-size: 1.125rem;
1388
+ font-weight: 600;
1389
+ }
1390
+
1391
+ .trace,
1392
+ .hist {
1393
+ display: inline-block;
1394
+ }
1395
+ `]}render(){return D`
1396
+ <div>
1397
+ <div>After ${this.choices.length} trials:</div>
1398
+ <div>Current:
1399
+ <var class="math-var k">k</var> = ${this.k.toFixed(2)}
1400
+ </div>
1401
+ <div class="param">
1402
+ <div class="trace k"></div>
1403
+ <div class="hist k"></div>
1404
+ </div>
1405
+ <div class="param">
1406
+ <div class="trace luce"></div>
1407
+ <div class="hist luce"></div>
1408
+ </div>
1409
+ </div>
1410
+ `}plotParam(t){this.shadowRoot.querySelector(`.hist.${t}`).replaceChildren(hG({title:`Posterior of ${t}`,x:{label:`${t}`},width:320,height:240,style:"font-size: 0.75rem; font-family: var(---font-family-base);",marks:[Cp(this.samples[t],WG({y:"count"},{x:MF}))]})),this.shadowRoot.querySelector(`.trace.${t}`).replaceChildren(hG({title:`Traceplot of ${t}`,x:{label:"Samples"},y:{label:`${t}`},width:320,height:240,style:"font-size: 0.75rem; font-family: var(---font-family-base);",marks:[hp(this.samples[t])]}))}update(t){super.update(t),null!==this.samples&&(this.plotParam("k"),this.plotParam("luce"))}}customElements.define("htd-fit",xp);class Lp extends Lu{static get properties(){return{state:{attribute:"state",type:String,reflect:!0},a:{attribute:"amount",type:Number,reflect:!0},d:{attribute:"delay",type:Number,reflect:!0}}}constructor(){super(),this.states=["choice","fixation","blank"],this.state="choice",this.a=0,this.d=0}static get styles(){return[super.styles,l`
1411
+ :host {
1412
+ display: inline-block;
1413
+
1414
+ width: 10rem;
1415
+ height: 10rem;
1416
+ }
1417
+
1418
+ .holder {
1419
+ display: flex;
1420
+
1421
+ flex-flow: column nowrap;
1422
+
1423
+ align-items: center;
1424
+ justify-content: center;
1425
+
1426
+ width: 100%;
1427
+ height: 100%;
1428
+ overflow: visible;
1429
+
1430
+
1431
+ background: var(---color-element-background);
1432
+ border: 2px solid var(---color-element-emphasis);
1433
+ border-radius: 50%;
1434
+ }
1435
+
1436
+ .interactive,
1437
+ .static {
1438
+ font-size: 1.75rem;
1439
+ }
1440
+
1441
+ .interactive {
1442
+ --decidables-spinner-font-size: 1.75rem;
1443
+ }
1444
+
1445
+ .static {
1446
+ padding: 0 0.25rem;
1447
+
1448
+ border-radius: var(---border-radius);
1449
+ }
1450
+
1451
+ .amount {
1452
+ --decidables-spinner-prefix: "$";
1453
+ background-color: var(---color-a-light);
1454
+ }
1455
+
1456
+ .amount.interactive {
1457
+ --decidables-spinner-input-width: 4rem;
1458
+ }
1459
+
1460
+ .delay {
1461
+ background-color: var(---color-d-light);
1462
+ }
1463
+
1464
+ .delay.interactive {
1465
+ --decidables-spinner-input-width: 6.75rem;
1466
+ --decidables-spinner-postfix: "days";
1467
+ --decidables-spinner-postfix-padding: 3.75rem;
1468
+ }
1469
+ `]}sendEvent(){this.dispatchEvent(new CustomEvent("itc-option-change",{detail:{a:this.a,d:this.d},bubbles:!0}))}aInput(t){this.a=parseFloat(t.target.value),this.sendEvent()}dInput(t){this.d=parseFloat(t.target.value),this.sendEvent()}render(){return D`
1470
+ <div class="holder">
1471
+ ${"choice"===this.state?this.interactive?D`<decidables-spinner
1472
+ class="amount interactive"
1473
+ ?disabled=${!this.interactive}
1474
+ step="1"
1475
+ .value="${this.a}"
1476
+ @input=${this.aInput.bind(this)}
1477
+ ></decidables-spinner>`:D`<div
1478
+ class="amount static"
1479
+ >$${this.a}</div>`:""}
1480
+ ${"choice"===this.state?D`<div class="in">in</div>`:""}
1481
+ ${"choice"===this.state?this.interactive?D`<decidables-spinner
1482
+ class="delay interactive"
1483
+ ?disabled=${!this.interactive}
1484
+ min="0"
1485
+ step="1"
1486
+ .value="${this.d}"
1487
+ @input=${this.dInput.bind(this)}
1488
+ ></decidables-spinner>`:D`<div
1489
+ class="delay static"
1490
+ >${this.d} days</div>`:""}
1491
+ </div>
1492
+ `}}customElements.define("itc-option",Lp);class Sp extends Lu{static get properties(){return{state:{attribute:"state",type:String,reflect:!0},as:{attribute:"amount-ss",type:Number,reflect:!0},ds:{attribute:"delay-ss",type:Number,reflect:!0},al:{attribute:"amount-ll",type:Number,reflect:!0},dl:{attribute:"delay-ll",type:Number,reflect:!0}}}constructor(){super(),this.states=["choice","fixation","blank"],this.state="choice",this.as=10,this.ds=5,this.al=40,this.dl=30}static get styles(){return[super.styles,l`
1493
+ :host {
1494
+ display: inline-block;
1495
+ }
1496
+
1497
+ .holder {
1498
+ user-select: none;
1499
+ }
1500
+
1501
+ .holder > * {
1502
+ vertical-align: middle;
1503
+ }
1504
+
1505
+ .query {
1506
+ margin: 0 0.5rem;
1507
+
1508
+ font-family: var(--font-family-code);
1509
+ font-size: 1.75rem;
1510
+ }
1511
+
1512
+ itc-option {
1513
+ width: 10rem;
1514
+ height: 10rem;
1515
+ }
1516
+ `]}sendEvent(){this.dispatchEvent(new CustomEvent("itc-choice-change",{detail:{as:this.as,ds:this.ds,al:this.al,dl:this.dl},bubbles:!0}))}ssChange(t){this.as=parseFloat(t.detail.a),this.ds=parseFloat(t.detail.d),this.sendEvent()}llChange(t){this.al=parseFloat(t.detail.a),this.dl=parseFloat(t.detail.d),this.sendEvent()}render(){return D`
1517
+ <div class="holder">
1518
+ <itc-option
1519
+ state=${this.state}
1520
+ ?interactive=${this.interactive}
1521
+ amount="${this.as}"
1522
+ delay="${this.ds}"
1523
+ @itc-option-change=${this.ssChange.bind(this)}>
1524
+ </itc-option><span class="query"
1525
+ >${"choice"===this.state?"?":"fixation"===this.state?"+":D`∙`}</span
1526
+ ><itc-option
1527
+ state=${this.state}
1528
+ ?interactive=${this.interactive}
1529
+ amount="${this.al}"
1530
+ delay="${this.dl}"
1531
+ @itc-option-change=${this.llChange.bind(this)}>
1532
+ </itc-option>
1533
+ </div>`}}customElements.define("itc-choice",Sp);class Rp extends Lu{static get properties(){return{duration:{attribute:"duration",type:Number,reflect:!0},iti:{attribute:"iti",type:Number,reflect:!0},trials:{attribute:"trials",type:Number,reflect:!0},running:{attribute:"running",type:Boolean,reflect:!0},state:{attribute:!1,type:String,reflect:!1}}}constructor(){super(),this.duration=2e3,this.iti=2e3,this.trials=5,this.running=!1,this.states=["resetted","iti","stimulus","ended"],this.state="resetted",this.range={},this.range.as={start:10,stop:20,step:1},this.range.ds={start:10,stop:40,step:1},this.range.al={start:20,stop:40,step:1},this.range.dl={start:50,stop:80,step:1},this.range.as.values=Be(this.range.as.start,this.range.as.stop+.01,this.range.as.step),this.range.ds.values=Be(this.range.ds.start,this.range.ds.stop+.01,this.range.ds.step),this.range.al.values=Be(this.range.al.start,this.range.al.stop+.01,this.range.al.step),this.range.dl.values=Be(this.range.dl.start,this.range.dl.stop+.01,this.range.dl.step),this.firstUpdate=!0,this.as=0,this.ds=0,this.al=0,this.dl=0,this.trial=0,this.baseTime=0,this.pauseTime=0,this.startTime=0,this.lastTime=0,this.runner=void 0}static get styles(){return[super.styles,l`
1534
+ :host {
1535
+ display: inline-block;
1536
+ }
1537
+ `]}render(){return D`
1538
+ <div class="holder">
1539
+ <itc-choice
1540
+ state="${"stimulus"===this.state?"choice":"iti"===this.state?"fixation":"blank"}"
1541
+ amount-ss="${this.as}"
1542
+ delay-ss="${this.ds}"
1543
+ amount-ll="${this.al}"
1544
+ delay-ll="${this.dl}">
1545
+ </itc-choice>
1546
+ </div>`}update(t){super.update(t),(this.firstUpdate||t.has("running"))&&(this.running?(this.pauseTime&&(this.baseTime+=ic()-this.pauseTime,this.pauseTime=0),this.runner=function(t,e,n){var i=new cc,s=e;return null==e?(i.restart(t,e,n),i):(i._restart=i.restart,i.restart=function(t,e,n){e=+e,n=null==n?ic():+n,i._restart((function c(a){a+=s,i._restart(c,s+=e,n),t(a)}),e,n)},i.restart(t,e,n),i)}(this.run.bind(this),20)):void 0!==this.runner&&(this.runner.stop(),this.pauseTime=ic())),this.firstUpdate=!1}reset(){this.runner.stop(),this.running=!1,this.trial=0,this.state="resetted",this.as=0,this.ds=0,this.al=0,this.dl=0,this.baseTime=0,this.pauseTime=0,this.startTime=0,this.lastTime=0}run(){const t=ic(),e=this.baseTime?t-this.baseTime:0,n=this.baseTime?e-this.startTime:0;this.lastTime=e,"resetted"===this.state?(this.state="iti",this.baseTime=t,this.startTime=0,this.dispatchEvent(new CustomEvent("itc-block-start",{detail:{trials:this.trials},bubbles:!0}))):"iti"===this.state&&n>=this.iti?(this.trial+=1,this.state="stimulus",this.startTime=e,this.as=this.range.as.values[Math.floor(Math.random()*this.range.as.values.length)],this.ds=this.range.ds.values[Math.floor(Math.random()*this.range.ds.values.length)],this.al=this.range.al.values[Math.floor(Math.random()*this.range.al.values.length)],this.dl=this.range.dl.values[Math.floor(Math.random()*this.range.dl.values.length)],this.dispatchEvent(new CustomEvent("itc-trial-start",{detail:{trials:this.trials,duration:this.duration,iti:this.iti,trial:this.trial,as:this.as,ds:this.ds,al:this.al,dl:this.dl},bubbles:!0}))):"stimulus"===this.state&&n>=this.duration&&(this.dispatchEvent(new CustomEvent("itc-trial-end",{detail:{trials:this.trials,duration:this.duration,iti:this.iti,trial:this.trial,as:this.as,ds:this.ds,al:this.al,dl:this.dl},bubbles:!0})),this.trial>=this.trials?(this.runner.stop(),this.running=!1,this.state="ended",this.baseTime=0,this.pauseTime=0,this.startTime=0,this.lastTime=0,this.dispatchEvent(new CustomEvent("itc-block-end",{detail:{trials:this.trial},bubbles:!0}))):(this.state="iti",this.startTime=e))}}customElements.define("itc-task",Rp);class Xp extends tF{static get properties(){return{a:{attribute:"amount",type:Number,reflect:!0},d:{attribute:"delay",type:Number,reflect:!0},k:{attribute:"k",type:Number,reflect:!0},v:{attribute:!1,type:Number,reflect:!1}}}constructor(){super(),this.a=100,this.d=30,this.k=.05,this.alignState()}alignState(){this.v=qu.adk2v(this.a,this.d,this.k)}sendEvent(){this.dispatchEvent(new CustomEvent("htd-equation-adk2v-change",{detail:{a:this.a,d:this.d,k:this.k,v:this.v},bubbles:!0}))}aInput(t){this.a=parseFloat(t.target.value),this.alignState(),this.sendEvent()}dInput(t){this.d=parseFloat(t.target.value),this.alignState(),this.sendEvent()}kInput(t){this.k=parseFloat(t.target.value),this.alignState(),this.sendEvent()}render(){let t,e,n,i;this.alignState(),this.numeric?(t=D`<decidables-spinner class="a bottom" ?disabled=${!this.interactive} step="1" .value="${this.a}" @input=${this.aInput.bind(this)}>
1547
+ <var class="math-var">A</var>
1548
+ </decidables-spinner>`,e=D`<decidables-spinner class="d bottom" ?disabled=${!this.interactive} min="0" step="1" .value="${this.d}" @input=${this.dInput.bind(this)}>
1549
+ <var class="math-var">D</var>
1550
+ </decidables-spinner>`,n=D`<decidables-spinner class="k bottom" ?disabled=${!this.interactive} min="0" max="100" step=".001" .value="${this.k}" @input=${this.kInput.bind(this)}>
1551
+ <var class="math-var">k</var>
1552
+ </decidables-spinner>`,i=D`<decidables-spinner class="v bottom" disabled step=".001" .value="${+this.v.toFixed(3)}">
1553
+ <var class="math-var">V</var>
1554
+ </decidables-spinner>`):(t=D`<var class="math-var a">A</var>`,e=D`<var class="math-var d">D</var>`,n=D`<var class="math-var k">k</var>`,i=D`<var class="math-var v">V</var>`);const s=D`
1555
+ <tr>
1556
+ <td rowspan="2">
1557
+ ${i}<span class="equals">=</span>
1558
+ </td>
1559
+ <td class="underline">
1560
+ ${t}
1561
+ </td>
1562
+ </tr>
1563
+ <tr>
1564
+ <td class="">
1565
+ <span class="paren tight">(</span>1<span class="plus">+</span>${n}${e}<span class="paren tight">)</span>
1566
+ </td>
1567
+ </tr>`;return D`
1568
+ <div class="holder">
1569
+ <table class="equation">
1570
+ <tbody>
1571
+ ${s}
1572
+ </tbody>
1573
+ </table>
1574
+ </div>`}}customElements.define("htd-equation-adk2v",Xp);class vp extends Lu{static get styles(){return[super.styles,l`
1575
+ :host {
1576
+ ---border: var(--border, 1px solid var(---color-border));
1577
+ display: inline-block;
1578
+
1579
+ margin-bottom: 1rem;
1580
+ }
1581
+
1582
+ .holder {
1583
+ display: flex;
1584
+ }
1585
+
1586
+ .body {
1587
+ display: flex;
1588
+
1589
+ flex-wrap: wrap;
1590
+
1591
+ align-items: center;
1592
+ justify-content: left;
1593
+
1594
+ padding: 0.625rem;
1595
+
1596
+ border: var(---border);
1597
+ border-radius: 0.25rem;
1598
+ }
1599
+
1600
+ .body ::slotted(*) {
1601
+ margin: 0.625rem;
1602
+ }
1603
+
1604
+ /* HACK: Sibling selectors not working with ::slotted */
1605
+ /* .body > rdk-task + sdt-response,
1606
+ ::slotted(rdk-task) + ::slotted(sdt-response) { */
1607
+ /* .body ::slotted(sdt-response) {
1608
+ margin-left: 0;
1609
+ } */
1610
+
1611
+ /* HACK: Sibling selectors not working with ::slotted */
1612
+ /* .body > sdt-control + rdk-task,
1613
+ ::slotted(sdt-control) + ::slotted(rdk-task) {
1614
+ margin-left: 0;
1615
+ } */
1616
+ /* .body ::slotted(rdk-task) {
1617
+ margin-left: 0;
1618
+ } */
1619
+ `]}render(){return D`
1620
+ <div class="holder">
1621
+ <div class="body">
1622
+ <slot>Empty!</slot>
1623
+ </div>
1624
+ </div>`}}customElements.define("htd-example",vp);class Np extends vp{firstUpdated(){this.discountableControl=this.querySelector("discountable-control"),this.itcTask=this.querySelector("itc-task"),this.discountableResponse=this.querySelector("discountable-response"),this.htdFit=this.querySelector("htd-fit"),this.htdCurves=this.querySelector("htd-curves"),this.discountableControl&&(this.discountableControl.hasAttribute("trials")&&this.discountableControl.addEventListener("discountable-control-trials",(t=>{this.itcTask&&(this.itcTask.trials=t.detail.trials),this.discountableResponse&&(this.discountableResponse.trialTotal=t.detail.trials)})),this.discountableControl.hasAttribute("duration")&&this.discountableControl.addEventListener("discountable-control-duration",(t=>{this.itcTask&&(this.itcTask.duration=t.detail.duration,this.itcTask.iti=t.detail.duration)})),this.discountableControl.hasAttribute("run")&&this.discountableControl.addEventListener("discountable-control-run",(()=>{this.itcTask&&(this.itcTask.running=!0)})),this.discountableControl.hasAttribute("pause")&&this.discountableControl.addEventListener("discountable-control-pause",(()=>{this.itcTask&&(this.itcTask.running=!1)})),this.discountableControl.hasAttribute("reset")&&this.discountableControl.addEventListener("discountable-control-reset",(()=>{this.itcTask&&this.itcTask.reset(),this.discountableResponse&&this.discountableResponse.reset(),this.htdFit&&this.htdFit.clear(),this.htdCurves&&this.htdCurves.clearOptions()}))),this.itcTask&&(this.discountableResponse&&(this.discountableResponse.trialTotal=this.itcTask.trials),this.itcTask.addEventListener("itc-trial-start",(t=>{this.discountableResponse&&this.discountableResponse.start(t.detail.as,t.detail.ds,t.detail.al,t.detail.dl,t.detail.trial),this.htdCurves&&(this.htdCurves.setOption(t.detail.as,t.detail.ds,"smaller-sooner","s"),this.htdCurves.setOption(t.detail.al,t.detail.dl,"larger-later","l"))})),this.itcTask.addEventListener("itc-trial-end",(()=>{this.discountableResponse&&this.discountableResponse.stop(),this.htdCurves&&(this.htdCurves.removeOption("smaller-sooner"),this.htdCurves.removeOption("larger-later"))})),this.itcTask.addEventListener("itc-block-end",(()=>{this.discountableControl&&this.discountableControl.complete()}))),this.discountableResponse&&this.discountableResponse.addEventListener("discountable-response",(t=>{this.htdFit&&this.htdFit.set(t.detail.as,t.detail.ds,t.detail.al,t.detail.dl,t.detail.response,t.detail.trial.toString(),t.detail.trial.toString())})),this.htdFit&&this.htdFit.addEventListener("htd-fit-update",(t=>{this.htdCurves&&(this.htdCurves.k=t.detail.k)}))}}customElements.define("htd-example-human",Np);class Zp extends vp{static get properties(){return{as:{attribute:"amount-ss",type:Number,reflect:!0},ds:{attribute:"delay-ss",type:Number,reflect:!0},al:{attribute:"amount-ll",type:Number,reflect:!0},dl:{attribute:"delay-ll",type:Number,reflect:!0},k:{attribute:"k",type:Number,reflect:!0}}}constructor(){super(),this.as=10,this.ds=1,this.al=50,this.dl=40,this.k=.05,this.htdCalculation=null,this.htdCurves=null,this.itcChoice=null}firstUpdated(){this.htdCalculation=this.querySelector("htd-calculation"),this.htdCurves=this.querySelector("htd-curves"),this.itcChoice=this.querySelector("itc-choice"),this.htdCalculation&&this.htdCalculation.addEventListener("htd-calculation-change",(t=>{this.as=t.detail.as,this.ds=t.detail.ds,this.al=t.detail.al,this.dl=t.detail.dl,this.k=t.detail.k})),this.htdCurves&&this.htdCurves.addEventListener("htd-curves-change",(t=>{this.k=t.detail.k,"default"===t.detail.name?(this.as=t.detail.a,this.ds=t.detail.d):"larger-later"===t.detail.name&&(this.al=t.detail.a,this.dl=t.detail.d)})),this.itcChoice&&this.itcChoice.addEventListener("itc-choice-change",(t=>{this.as=t.detail.as,this.ds=t.detail.ds,this.al=t.detail.al,this.dl=t.detail.dl})),this.requestUpdate()}update(t){super.update(t),this.htdCalculation&&(this.htdCalculation.as=this.as,this.htdCalculation.ds=this.ds,this.htdCalculation.al=this.al,this.htdCalculation.dl=this.dl,this.htdCalculation.k=this.k),this.htdCurves&&(this.htdCurves.setOption(this.as,this.ds,"default","s"),this.htdCurves.setOption(this.al,this.dl,"larger-later","l"),this.htdCurves.k=this.k),this.itcChoice&&(this.itcChoice.as=this.as,this.itcChoice.ds=this.ds,this.itcChoice.al=this.al,this.itcChoice.dl=this.dl)}}customElements.define("htd-example-interactive",Zp);class Ep extends vp{static get properties(){return{k:{attribute:"k",type:Number,reflect:!0}}}constructor(){super(),this.k=.2,this.discountableControl=null,this.discountableResponse=null,this.htdCalculation=null,this.htdCurves=null,this.itcTask=null}firstUpdated(){this.discountableControl=this.querySelector("discountable-control"),this.discountableResponse=this.querySelector("discountable-response"),this.htdCalculation=this.querySelector("htd-calculation"),this.htdCurves=this.querySelector("htd-curves"),this.itcTask=this.querySelector("itc-task"),this.discountableControl&&(this.discountableControl.hasAttribute("trials")&&this.discountableControl.addEventListener("discountable-control-trials",(t=>{this.itcTask&&(this.itcTask.trials=t.detail.trials),this.discountableResponse&&(this.discountableResponse.trialTotal=t.detail.trials)})),this.discountableControl.hasAttribute("duration")&&this.discountableControl.addEventListener("discountable-control-duration",(t=>{this.itcTask&&(this.itcTask.duration=t.detail.duration,this.itcTask.iti=t.detail.duration)})),this.discountableControl.hasAttribute("run")&&this.discountableControl.addEventListener("discountable-control-run",(()=>{this.htdCurves&&this.htdCurves.resumeTrial(),this.itcTask&&(this.itcTask.running=!0)})),this.discountableControl.hasAttribute("pause")&&this.discountableControl.addEventListener("discountable-control-pause",(()=>{this.htdCurves&&this.htdCurves.pauseTrial(),this.itcTask&&(this.itcTask.running=!1)})),this.discountableControl.hasAttribute("reset")&&this.discountableControl.addEventListener("discountable-control-reset",(()=>{this.discountableResponse&&this.discountableResponse.reset(),this.htdCurves&&this.htdCurves.clearOptions(),this.itcTask&&this.itcTask.reset()}))),this.htdCurves&&(this.htdCurves.addEventListener("htd-curves-change",(t=>{this.k=t.detail.k})),this.htdCurves.addEventListener("discountable-response",(t=>{this.discountableResponse&&this.discountableResponse.responded(t.detail.response)}))),this.itcTask&&(this.discountableResponse&&(this.discountableResponse.trialTotal=this.itcTask.trials),this.itcTask.addEventListener("itc-trial-start",(t=>{this.discountableResponse&&this.discountableResponse.start(t.detail.as,t.detail.ds,t.detail.al,t.detail.dl,t.detail.trial);const e=qu.adk2v(t.detail.as,t.detail.ds,this.k)>qu.adk2v(t.detail.al,t.detail.dl,this.k)?"first":"second";this.htdCurves&&this.htdCurves.trial(t.detail.as,t.detail.ds,t.detail.al,t.detail.dl,t.detail.trial,e)})),this.itcTask.addEventListener("itc-trial-end",(()=>{this.discountableResponse&&this.discountableResponse.stop()})),this.itcTask.addEventListener("itc-block-end",(()=>{this.discountableControl&&this.discountableControl.complete()}))),this.requestUpdate()}update(t){super.update(t),this.htdCalculation&&(this.htdCalculation.k=this.k),this.htdCurves&&(this.htdCurves.k=this.k)}}customElements.define("htd-example-model",Ep),t.DiscountableControl=Su,t.DiscountableElement=Lu,t.DiscountableResponse=Ru,t.HTDCalculation=eF,t.HTDCurves=nF,t.HTDEquationADK2V=Xp,t.HTDExampleHuman=Np,t.HTDExampleInteractive=Zp,t.HTDExampleModel=Ep,t.HTDFit=xp,t.ITCChoice=Sp,t.ITCOption=Lp,t.ITCTask=Rp}));
1625
+ //# sourceMappingURL=discountableElements.umd.min.js.map