valyrian.js 6.0.7 → 6.0.8

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.
package/dist/index.cjs CHANGED
@@ -2,30 +2,26 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
6
5
  var __export = (target, all) => {
7
6
  for (var name in all)
8
7
  __defProp(target, name, { get: all[name], enumerable: true });
9
8
  };
10
- var __reExport = (target, module2, copyDefault, desc) => {
11
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
12
- for (let key of __getOwnPropNames(module2))
13
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
14
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
14
  }
16
- return target;
15
+ return to;
17
16
  };
18
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
19
- return (module2, temp) => {
20
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
21
- };
22
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
18
 
24
19
  // lib/index.ts
25
20
  var lib_exports = {};
26
21
  __export(lib_exports, {
27
22
  default: () => lib_default
28
23
  });
24
+ module.exports = __toCommonJS(lib_exports);
29
25
  var ComponentString = "__component__";
30
26
  var TextString = "#text";
31
27
  var isNodeJs = Boolean(typeof process !== "undefined" && process.versions && process.versions.node);
@@ -561,4 +557,3 @@ v.setAttribute = setAttribute;
561
557
  v.directive = directive;
562
558
  v.use = use;
563
559
  var lib_default = v;
564
- module.exports = __toCommonJS(lib_exports);
package/dist/index.min.js CHANGED
@@ -1 +1 @@
1
- (()=>{var e="__component__",o="#text",n=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),t=void 0,r=function(e,o,n){this.props=o,this.children=n,this.tag=e};function i(e){return"function"==typeof e||"object"==typeof e&&null!==e&&"view"in e}function d(o){return o instanceof r&&o.tag===e}function p(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function l(e){if(3===e.nodeType){let n=G(o,{},[]);return n.nodeValue=e.nodeValue,n.dom=e,n}if(1===e.nodeType){let o=[];for(let n=0;n<e.childNodes.length;n++){let t=l(e.childNodes[n]);t&&o.push(t)}let n={};[].forEach.call(e.attributes,e=>n[e.nodeName]=e.nodeValue);let t=G(e.tagName.toLowerCase(),n,...o);return t.dom=e,t}}var s=e=>{let o=p("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>l(e))},a={key:!0,state:!0,oncreate:!0,onupdate:!0,onremove:!0,shouldupdate:!0,"v-once":!0,"v-if":!0,"v-unless":!0,"v-for":!0,"v-show":!0,"v-class":!0,"v-html":!0,"v-model":!0},u={},c=[],m=[],f=[],h=[],v={};function g(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||y());o=o.parentNode}}function V(e){for(let o=0;o<e.length;o++)e[o]();e=[]}function y(){if(G.component&&G.mainVnode){c.length&&V(c);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[G.component]),G.mainVnode.dom=e.dom,_(G.mainVnode,e),e=null,!1===G.isMounted?(m.length&&V(m),G.isMounted=!0):f.length&&V(f),n)return G.mainVnode.dom.innerHTML}}function w(){if(G.isMounted&&G.mainVnode&&G.component){c.length&&V(c),h.length&&V(h);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[]),G.mainVnode.dom=e.dom,G.mainVnode.isSVG=e.isSVG,_(G.mainVnode,e),e=null,G.component=null,G.isMounted=!1,n)return G.mainVnode.dom.innerHTML}}var N=new r("__empty__",{},[]);function C(e){for(let n=0;n<e.children.length;n++)e.children[n].tag!==o&&C(e.children[n]);e.props.onremove&&e.props.onremove(e)}function x(e,o,n,t){return a[e]?b[e]?b[e](n.props[e],n,t):void 0:"function"==typeof o?(e in u==!1&&(u[e]=!0,G.container.addEventListener(e.slice(2),g)),void(n.dom[`v-${e}`]=o)):void(e in n.dom&&!1===n.isSVG?n.dom[e]!=o&&(n.dom[e]=o):t&&t.props[e]===o||(!1===o?n.dom.removeAttribute(e):n.dom.setAttribute(e,o)))}function k(e,o,n,t){n.props[e]=o,x(e,o,n,t)}function M(e,o){for(let n in e.props)if(!1===x(n,e.props[n],e,o))return;if(o)for(let n in o.props)n in e.props==!1&&"function"!=typeof o.props[n]&&n in a==!1&&(n in o.dom&&!1===e.isSVG?o.dom[n]=null:o.dom.removeAttribute(n))}function _(n,i=N){v.vnode=n,v.oldVnode=i===N?t:i;let d=n.children,l=i.children;for(let i=0;i<d.length;i++){let p=d[i];if(p instanceof r){if(p.tag!==o){if(p.tag===e){let e=p.component;v.component=e;let o=("view"in e?e.view:e).call(e,p.props,...p.children);d.splice(i--,1,o);continue}p.isSVG=n.isSVG||"svg"===p.tag}}else Array.isArray(p)?d.splice(i--,1,...p):null===p||p===t?d.splice(i--,1):(d[i]=new r(o,{},[]),d[i].nodeValue=p)}let s=l.length,a=d.length;if(0!==a)if(s&&"key"in d[0].props&&"key"in l[0].props){let e={};for(let o=0;o<s;o++)e[l[o].props.key]=o;let o={};for(let e=0;e<a;e++)o[d[e].props.key]=e;for(let r=0;r<a;r++){let i=d[r],s=l[e[i.props.key]],a=!0;s?(i.dom=s.dom,"v-once"in i.props||i.props.shouldupdate&&!1===i.props.shouldupdate(i,s)?(i.children=s.children,a=!1):(M(i,s),G.isMounted?i.props.onupdate&&i.props.onupdate(i,s):i.props.oncreate&&i.props.oncreate(i))):(i.dom=p(i.tag,i.isSVG),M(i),i.props.oncreate&&i.props.oncreate(i)),n.dom.childNodes[r]===t?n.dom.appendChild(i.dom):n.dom.childNodes[r]!==i.dom&&(l[r]&&o[l[r].props.key]===t&&C(l[r]),n.dom.replaceChild(i.dom,n.dom.childNodes[r])),a&&_(i,s)}for(let e=a;e<s;e++)if(o[l[e].props.key]===t){let o=l[e];C(o),o.dom.parentNode&&o.dom.parentNode.removeChild(o.dom)}}else{for(let e=0;e<a;e++){let t=d[e];if(e<s){let r=l[e];if(t.tag===o){if(r.tag===o){t.dom=r.dom,t.dom.nodeValue!=t.nodeValue&&(t.dom.nodeValue=t.nodeValue);continue}t.dom=document.createTextNode(t.nodeValue),C(r),n.dom.replaceChild(t.dom,r.dom);continue}if(r.tag===t.tag){if(t.dom=r.dom,t.props["v-once"]||t.props.shouldupdate&&!1===t.props.shouldupdate(t,r)){t.children=r.children;continue}M(t,r),G.isMounted?t.props.onupdate&&t.props.onupdate(t,r):t.props.oncreate&&t.props.oncreate(t),_(t,r);continue}t.dom=p(t.tag,t.isSVG),M(t),r.tag!==o&&C(r),t.props.oncreate&&t.props.oncreate(t),n.dom.replaceChild(t.dom,r.dom),_(t,N)}else t.tag!==o?(t.dom=p(t.tag,t.isSVG),M(t),n.dom.appendChild(t.dom),t.props.oncreate&&t.props.oncreate(t),_(t,N)):(t.dom=document.createTextNode(t.nodeValue),n.dom.appendChild(t.dom))}for(let e=a;e<s;e++){let n=l[e];n.tag!==o&&C(n),n.dom.parentNode&&n.dom.parentNode.removeChild(n.dom)}}else{for(let e=0;e<s;e++)l[e].tag!==o&&C(l[e]);n.dom.textContent=""}}function S(e){return(n,t,r)=>{if(e?n:!n){let e=document.createTextNode("");return r&&r.dom&&r.dom.parentNode&&(r.tag!==o&&C(r),r.dom.parentNode.replaceChild(e,r.dom)),t.tag=o,t.children=[],t.props={},t.dom=e,!1}}}var b={"v-if":S(!1),"v-unless":S(!0),"v-for":(e,o)=>{o.children=e.map(o.children[0])},"v-show":(e,o)=>{o.dom.style.display=e?"":"none"},"v-class":(e,o)=>{for(let n in e)o.dom.classList.toggle(n,e[n])},"v-html":(e,o)=>{o.children=[s(e)]},"v-model":([e,o,n],t,r)=>{let i,d;if("input"===t.tag)switch(n=n||"oninput",t.props.type){case"checkbox":Array.isArray(e[o])?(d=n=>{let t=n.target.value,r=e[o].indexOf(t);-1===r?e[o].push(t):e[o].splice(r,1)},i=-1!==e[o].indexOf(t.dom.value)):"value"in t.props?(d=()=>{e[o]===t.props.value?e[o]=null:e[o]=t.props.value},i=e[o]===t.props.value):(d=()=>e[o]=!e[o],i=e[o]),k("checked",i,t,r);break;case"radio":k("checked",e[o]===t.dom.value,t,r);break;default:k("value",e[o],t,r)}else"select"===t.tag?(n=n||"onclick",t.props.multiple?(d=n=>{let t=n.target.value;if(n.ctrlKey){let n=e[o].indexOf(t);-1===n?e[o].push(t):e[o].splice(n,1)}else e[o].splice(0,e[o].length),e[o].push(t)},t.children.forEach(n=>{if("option"===n.tag){let t="value"in n.props?n.props.value:n.children.join("").trim();n.props.selected=-1!==e[o].indexOf(t)}})):t.children.forEach(n=>{if("option"===n.tag){let t="value"in n.props?n.props.value:n.children.join("").trim();n.props.selected=t===e[o]}})):"textarea"===t.tag&&(n=n||"oninput",t.children=[e[o]]);t.props[n]||(d||(d=n=>e[o]=n.target.value),k(n,d,t,r))}},A=new Map;var G=function(e,o,...n){if("string"==typeof e)return new r(e,o||{},n);const t=new r("__component__",o||{},n);return t.component=e,t};G.fragment=(e,...o)=>o,G.current=v,G.directives=b,G.reservedProps=a,G.isVnode=function(e){return e instanceof r},G.isComponent=i,G.isVnodeComponent=d,G.isMounted=!1,G.isNodeJs=n,G.trust=s,G.onCleanup=function(e){-1===c.indexOf(e)&&c.push(e)},G.onUnmount=function(e){-1===h.indexOf(e)&&h.push(e)},G.onMount=function(e){-1===m.indexOf(e)&&m.push(e)},G.onUpdate=function(e){-1===f.indexOf(e)&&f.push(e)},G.mount=function(e,o){let t,r=null;if(r=n?"string"==typeof e?p("svg"===e?"svg":"div","svg"===e):e:"string"==typeof e?document.querySelectorAll(e)[0]:e,!r)throw new Error("Container not found");if(d(o))t=o;else{if(!i(o))throw new Error("Component must be a Valyrian Component or a Vnode component");t=G(o,{})}return G.isMounted&&w(),G.component=t,G.container=r,G.mainVnode=l(r),y()},G.unmount=w,G.update=y,G.setAttribute=k,G.directive=function(e,o){let n=`v-${e}`;b[n]=o,a[n]=!0},G.use=function(e,o){if(A.has(e))return A.get(e);let n=e(G,o);return A.set(e,n),n};var E={default:G};"undefined"!=typeof module?module.exports=E:self.Valyrian=E})();
1
+ (()=>{var e="__component__",o="#text",n=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),t=void 0,r=function(e,o,n){this.props=o,this.children=n,this.tag=e};function i(e){return"function"==typeof e||"object"==typeof e&&null!==e&&"view"in e}function d(o){return o instanceof r&&o.tag===e}function p(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function l(e){if(3===e.nodeType){let n=G(o,{},[]);return n.nodeValue=e.nodeValue,n.dom=e,n}if(1===e.nodeType){let o=[];for(let n=0;n<e.childNodes.length;n++){let t=l(e.childNodes[n]);t&&o.push(t)}let n={};[].forEach.call(e.attributes,e=>n[e.nodeName]=e.nodeValue);let t=G(e.tagName.toLowerCase(),n,...o);return t.dom=e,t}}var s=e=>{let o=p("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>l(e))},a={key:!0,state:!0,oncreate:!0,onupdate:!0,onremove:!0,shouldupdate:!0,"v-once":!0,"v-if":!0,"v-unless":!0,"v-for":!0,"v-show":!0,"v-class":!0,"v-html":!0,"v-model":!0},u={},c=[],m=[],f=[],h=[],v={};function g(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||y());o=o.parentNode}}function V(e){for(let o=0;o<e.length;o++)e[o]();e=[]}function y(){if(G.component&&G.mainVnode){c.length&&V(c);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[G.component]),G.mainVnode.dom=e.dom,_(G.mainVnode,e),e=null,!1===G.isMounted?(m.length&&V(m),G.isMounted=!0):f.length&&V(f),n)return G.mainVnode.dom.innerHTML}}function w(){if(G.isMounted&&G.mainVnode&&G.component){c.length&&V(c),h.length&&V(h);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[]),G.mainVnode.dom=e.dom,G.mainVnode.isSVG=e.isSVG,_(G.mainVnode,e),e=null,G.component=null,G.isMounted=!1,n)return G.mainVnode.dom.innerHTML}}var N=new r("__empty__",{},[]);function C(e){for(let n=0;n<e.children.length;n++)e.children[n].tag!==o&&C(e.children[n]);e.props.onremove&&e.props.onremove(e)}function x(e,o,n,t){return a[e]?b[e]?b[e](n.props[e],n,t):void 0:"function"==typeof o?(e in u==!1&&(u[e]=!0,G.container.addEventListener(e.slice(2),g)),void(n.dom[`v-${e}`]=o)):void(e in n.dom&&!1===n.isSVG?n.dom[e]!=o&&(n.dom[e]=o):t&&t.props[e]===o||(!1===o?n.dom.removeAttribute(e):n.dom.setAttribute(e,o)))}function k(e,o,n,t){n.props[e]=o,x(e,o,n,t)}function M(e,o){for(let n in e.props)if(!1===x(n,e.props[n],e,o))return;if(o)for(let n in o.props)n in e.props==!1&&"function"!=typeof o.props[n]&&n in a==!1&&(n in o.dom&&!1===e.isSVG?o.dom[n]=null:o.dom.removeAttribute(n))}function _(n,i=N){v.vnode=n,v.oldVnode=i===N?t:i;let d=n.children,l=i.children;for(let i=0;i<d.length;i++){let p=d[i];if(p instanceof r){if(p.tag!==o){if(p.tag===e){let e=p.component;v.component=e;let o=("view"in e?e.view:e).call(e,p.props,...p.children);d.splice(i--,1,o);continue}p.isSVG=n.isSVG||"svg"===p.tag}}else Array.isArray(p)?d.splice(i--,1,...p):null===p||p===t?d.splice(i--,1):(d[i]=new r(o,{},[]),d[i].nodeValue=p)}let s=l.length,a=d.length;if(0!==a)if(s&&"key"in d[0].props&&"key"in l[0].props){let e={};for(let o=0;o<s;o++)e[l[o].props.key]=o;let o={};for(let e=0;e<a;e++)o[d[e].props.key]=e;for(let r=0;r<a;r++){let i=d[r],s=l[e[i.props.key]],a=!0;s?(i.dom=s.dom,"v-once"in i.props||i.props.shouldupdate&&!1===i.props.shouldupdate(i,s)?(i.children=s.children,a=!1):(M(i,s),G.isMounted?i.props.onupdate&&i.props.onupdate(i,s):i.props.oncreate&&i.props.oncreate(i))):(i.dom=p(i.tag,i.isSVG),M(i),i.props.oncreate&&i.props.oncreate(i)),n.dom.childNodes[r]===t?n.dom.appendChild(i.dom):n.dom.childNodes[r]!==i.dom&&(l[r]&&o[l[r].props.key]===t&&C(l[r]),n.dom.replaceChild(i.dom,n.dom.childNodes[r])),a&&_(i,s)}for(let e=a;e<s;e++)if(o[l[e].props.key]===t){let o=l[e];C(o),o.dom.parentNode&&o.dom.parentNode.removeChild(o.dom)}}else{for(let e=0;e<a;e++){let t=d[e];if(e<s){let r=l[e];if(t.tag===o){if(r.tag===o){t.dom=r.dom,t.dom.nodeValue!=t.nodeValue&&(t.dom.nodeValue=t.nodeValue);continue}t.dom=document.createTextNode(t.nodeValue),C(r),n.dom.replaceChild(t.dom,r.dom);continue}if(r.tag===t.tag){if(t.dom=r.dom,t.props["v-once"]||t.props.shouldupdate&&!1===t.props.shouldupdate(t,r)){t.children=r.children;continue}M(t,r),G.isMounted?t.props.onupdate&&t.props.onupdate(t,r):t.props.oncreate&&t.props.oncreate(t),_(t,r);continue}t.dom=p(t.tag,t.isSVG),M(t),r.tag!==o&&C(r),t.props.oncreate&&t.props.oncreate(t),n.dom.replaceChild(t.dom,r.dom),_(t,N)}else t.tag!==o?(t.dom=p(t.tag,t.isSVG),M(t),n.dom.appendChild(t.dom),t.props.oncreate&&t.props.oncreate(t),_(t,N)):(t.dom=document.createTextNode(t.nodeValue),n.dom.appendChild(t.dom))}for(let e=a;e<s;e++){let n=l[e];n.tag!==o&&C(n),n.dom.parentNode&&n.dom.parentNode.removeChild(n.dom)}}else{for(let e=0;e<s;e++)l[e].tag!==o&&C(l[e]);n.dom.textContent=""}}function S(e){return(n,t,r)=>{if(e?n:!n){let e=document.createTextNode("");return r&&r.dom&&r.dom.parentNode&&(r.tag!==o&&C(r),r.dom.parentNode.replaceChild(e,r.dom)),t.tag=o,t.children=[],t.props={},t.dom=e,!1}}}var b={"v-if":S(!1),"v-unless":S(!0),"v-for":(e,o)=>{o.children=e.map(o.children[0])},"v-show":(e,o)=>{o.dom.style.display=e?"":"none"},"v-class":(e,o)=>{for(let n in e)o.dom.classList.toggle(n,e[n])},"v-html":(e,o)=>{o.children=[s(e)]},"v-model":([e,o,n],t,r)=>{let i,d;if("input"===t.tag)switch(n=n||"oninput",t.props.type){case"checkbox":Array.isArray(e[o])?(d=n=>{let t=n.target.value,r=e[o].indexOf(t);-1===r?e[o].push(t):e[o].splice(r,1)},i=-1!==e[o].indexOf(t.dom.value)):"value"in t.props?(d=()=>{e[o]===t.props.value?e[o]=null:e[o]=t.props.value},i=e[o]===t.props.value):(d=()=>e[o]=!e[o],i=e[o]),k("checked",i,t,r);break;case"radio":k("checked",e[o]===t.dom.value,t,r);break;default:k("value",e[o],t,r)}else"select"===t.tag?(n=n||"onclick",t.props.multiple?(d=n=>{let t=n.target.value;if(n.ctrlKey){let n=e[o].indexOf(t);-1===n?e[o].push(t):e[o].splice(n,1)}else e[o].splice(0,e[o].length),e[o].push(t)},t.children.forEach(n=>{if("option"===n.tag){let t="value"in n.props?n.props.value:n.children.join("").trim();n.props.selected=-1!==e[o].indexOf(t)}})):t.children.forEach(n=>{if("option"===n.tag){let t="value"in n.props?n.props.value:n.children.join("").trim();n.props.selected=t===e[o]}})):"textarea"===t.tag&&(n=n||"oninput",t.children=[e[o]]);t.props[n]||(d||(d=n=>e[o]=n.target.value),k(n,d,t,r))}},A=new Map;var G=function(e,o,...n){if("string"==typeof e)return new r(e,o||{},n);const t=new r("__component__",o||{},n);return t.component=e,t};G.fragment=(e,...o)=>o,G.current=v,G.directives=b,G.reservedProps=a,G.isVnode=function(e){return e instanceof r},G.isComponent=i,G.isVnodeComponent=d,G.isMounted=!1,G.isNodeJs=n,G.trust=s,G.onCleanup=function(e){-1===c.indexOf(e)&&c.push(e)},G.onUnmount=function(e){-1===h.indexOf(e)&&h.push(e)},G.onMount=function(e){-1===m.indexOf(e)&&m.push(e)},G.onUpdate=function(e){-1===f.indexOf(e)&&f.push(e)},G.mount=function(e,o){let t,r=null;if(r=n?"string"==typeof e?p("svg"===e?"svg":"div","svg"===e):e:"string"==typeof e?document.querySelectorAll(e)[0]:e,!r)throw new Error("Container not found");if(d(o))t=o;else{if(!i(o))throw new Error("Component must be a Valyrian Component or a Vnode component");t=G(o,{})}return G.isMounted&&w(),G.component=t,G.container=r,G.mainVnode=l(r),y()},G.unmount=w,G.update=y,G.setAttribute=k,G.directive=function(e,o){let n=`v-${e}`;b[n]=o,a[n]=!0},G.use=function(e,o){if(A.has(e))return A.get(e);let n=e(G,o);return A.set(e,n),n};var E=G;"undefined"!=typeof module?module.exports=E:self.Valyrian=E})();
@@ -1 +1 @@
1
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJDb21wb25lbnRTdHJpbmciLCJUZXh0U3RyaW5nIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsIlVuZCIsIlZub2RlIiwidGFnIiwicHJvcHMiLCJjaGlsZHJlbiIsInRoaXMiLCJpc0NvbXBvbmVudCIsImNvbXBvbmVudCIsImlzVm5vZGVDb21wb25lbnQiLCJ2bm9kZSIsImNyZWF0ZURvbUVsZW1lbnQiLCJpc1NWRyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsImRvbVRvVm5vZGUiLCJkb20iLCJub2RlVHlwZSIsInYiLCJub2RlVmFsdWUiLCJpIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkIiwicHVzaCIsImZvckVhY2giLCJjYWxsIiwiYXR0cmlidXRlcyIsInByb3AiLCJub2RlTmFtZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImlubmVySFRNTCIsInRyaW0iLCJtYXAiLCJpdGVtIiwicmVzZXJ2ZWRQcm9wcyIsImtleSIsInN0YXRlIiwib25jcmVhdGUiLCJvbnVwZGF0ZSIsIm9ucmVtb3ZlIiwic2hvdWxkdXBkYXRlIiwiZXZlbnRMaXN0ZW5lck5hbWVzIiwib25DbGVhbnVwTGlzdCIsIm9uTW91bnRMaXN0Iiwib25VcGRhdGVMaXN0Iiwib25Vbm1vdW50TGlzdCIsImN1cnJlbnQiLCJldmVudExpc3RlbmVyIiwiZSIsInRhcmdldCIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZGF0ZSIsInBhcmVudE5vZGUiLCJjYWxsQ2FsbGJhY2tMaXN0IiwibGlzdCIsIm1haW5Wbm9kZSIsIm9sZFZub2RlIiwicGF0Y2giLCJpc01vdW50ZWQiLCJ1bm1vdW50IiwiZW1wdHlWbm9kZSIsInNoYXJlZFNldEF0dHJpYnV0ZSIsInZhbHVlIiwiZGlyZWN0aXZlcyIsImNvbnRhaW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzbGljZSIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZXMiLCJuZXdWbm9kZSIsIm5ld1RyZWUiLCJvbGRUcmVlIiwiY2hpbGRWbm9kZSIsInJlc3VsdCIsInZpZXciLCJzcGxpY2UiLCJBcnJheSIsImlzQXJyYXkiLCJvbGRUcmVlTGVuZ3RoIiwibmV3VHJlZUxlbmd0aCIsIm9sZEtleWVkTGlzdCIsIm5ld0tleWVkTGlzdCIsIm9sZENoaWxkVm5vZGUiLCJzaG91bGRQYXRjaCIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicmVtb3ZlQ2hpbGQiLCJuZXdDaGlsZFZub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJ0ZXh0Q29udGVudCIsImhpZGVEaXJlY3RpdmUiLCJ0ZXN0IiwiYm9vbCIsIm5ld2RvbSIsInNldCIsInN0eWxlIiwiZGlzcGxheSIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJodG1sIiwibW9kZWwiLCJwcm9wZXJ0eSIsImV2ZW50IiwiaGFuZGxlciIsInZhbCIsImlkeCIsImluZGV4T2YiLCJtdWx0aXBsZSIsImN0cmxLZXkiLCJ2YWx1ZTIiLCJqb2luIiwic2VsZWN0ZWQiLCJwbHVnaW5zIiwiTWFwIiwidGFnT3JDb21wb25lbnQiLCJmcmFnbWVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJvbkNsZWFudXAiLCJjYWxsYmFjayIsIm9uVW5tb3VudCIsIm9uTW91bnQiLCJvblVwZGF0ZSIsIm1vdW50Iiwidm5vZGVDb21wb25lbnQiLCJhcHBDb250YWluZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwiRXJyb3IiLCJkaXJlY3RpdmUiLCJkaXJlY3RpdmUyIiwiZnVsbE5hbWUiLCJ1c2UiLCJwbHVnaW4iLCJvcHRpb25zIiwiaGFzIiwiZ2V0Il0sIm1hcHBpbmdzIjoiTUFxQkEsSUFBTUEsRUFBa0IsZ0JBQ2xCQyxFQUFhLFFBQ2JDLEVBQVdDLFFBQTJCLG9CQUFa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c291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHkgKi9cbi8qKiogVm5vZGUgKioqL1xuXG5pbXBvcnQge1xuICBDaGlsZHJlbixcbiAgQ3VycmVudCxcbiAgRGlyZWN0aXZlLFxuICBEaXJlY3RpdmVzLFxuICBEb21FbGVtZW50LFxuICBJVm5vZGUsXG4gIFBsdWdpbixcbiAgUHJvcHMsXG4gIFJlc2VydmVkUHJvcHMsXG4gIFZhbHlyaWFuLFxuICBWYWx5cmlhbkNvbXBvbmVudCxcbiAgVm5vZGVDb21wb25lbnQsXG4gIFZub2RlV2l0aERvbVxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5cbi8qKiogQ29uc3RhbnRzICoqKi9cbmNvbnN0IENvbXBvbmVudFN0cmluZyA9IFwiX19jb21wb25lbnRfX1wiO1xuY29uc3QgVGV4dFN0cmluZyA9IFwiI3RleHRcIjtcbmNvbnN0IGlzTm9kZUpzID0gQm9vbGVhbih0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSk7XG5jb25zdCBVbmQgPSB1bmRlZmluZWQ7XG5cbi8qKiogVm5vZGUgKioqL1xuXG5jb25zdCBWbm9kZSA9IGZ1bmN0aW9uIFZub2RlKHRoaXM6IElWbm9kZSwgdGFnOiBzdHJpbmcsIHByb3BzOiBQcm9wcywgY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRhZyA9IHRhZztcbn0gYXMgdW5rbm93biBhcyBJVm5vZGU7XG5cbmZ1bmN0aW9uIGlzVm5vZGUob2JqZWN0PzogdW5rbm93biB8IElWbm9kZSk6IG9iamVjdCBpcyBJVm5vZGUge1xuICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgVm5vZGU7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KGNvbXBvbmVudD86IHVua25vd24gfCBWYWx5cmlhbkNvbXBvbmVudCk6IGNvbXBvbmVudCBpcyBWYWx5cmlhbkNvbXBvbmVudCB7XG4gIHJldHVybiB0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgfHwgKHR5cGVvZiBjb21wb25lbnQgPT09IFwib2JqZWN0XCIgJiYgY29tcG9uZW50ICE9PSBudWxsICYmIFwidmlld1wiIGluIGNvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzVm5vZGVDb21wb25lbnQodm5vZGU/OiB1bmtub3duIHwgVm5vZGVDb21wb25lbnQpOiB2bm9kZSBpcyBWbm9kZUNvbXBvbmVudCB7XG4gIHJldHVybiB2bm9kZSBpbnN0YW5jZW9mIFZub2RlICYmIHZub2RlLnRhZyA9PT0gQ29tcG9uZW50U3RyaW5nO1xufVxuXG4vKioqIFV0aWwgKioqL1xuXG5mdW5jdGlvbiBjcmVhdGVEb21FbGVtZW50KHRhZzogc3RyaW5nLCBpc1NWRzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBpc1NWRyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHRhZykgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG59XG5cbmZ1bmN0aW9uIGRvbVRvVm5vZGUoZG9tOiBEb21FbGVtZW50KTogdm9pZCB8IFZub2RlV2l0aERvbSB7XG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDMpIHtcbiAgICBsZXQgdm5vZGUgPSB2KFRleHRTdHJpbmcsIHt9LCBbXSk7XG4gICAgdm5vZGUubm9kZVZhbHVlID0gZG9tLm5vZGVWYWx1ZSBhcyBzdHJpbmc7XG4gICAgdm5vZGUuZG9tID0gZG9tO1xuICAgIHJldHVybiB2bm9kZSBhcyBWbm9kZVdpdGhEb207XG4gIH1cblxuICBpZiAoZG9tLm5vZGVUeXBlID09PSAxKSB7XG4gICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb20uY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkID0gZG9tVG9Wbm9kZShkb20uY2hpbGROb2Rlc1tpXSBhcyBEb21FbGVtZW50KTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcHJvcHM6IFByb3BzID0ge307XG4gICAgW10uZm9yRWFjaC5jYWxsKGRvbS5hdHRyaWJ1dGVzLCAocHJvcDogQXR0cikgPT4gKHByb3BzW3Byb3Aubm9kZU5hbWVdID0gcHJvcC5ub2RlVmFsdWUpKTtcblxuICAgIGxldCB2bm9kZSA9IHYoZG9tLnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgcHJvcHMsIC4uLmNoaWxkcmVuKTtcbiAgICB2bm9kZS5kb20gPSBkb207XG4gICAgcmV0dXJuIHZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgfVxufVxuXG5jb25zdCB0cnVzdCA9IChodG1sU3RyaW5nOiBzdHJpbmcpOiBDaGlsZHJlbiA9PiB7XG4gIGxldCBkaXYgPSBjcmVhdGVEb21FbGVtZW50KFwiZGl2XCIpO1xuICBkaXYuaW5uZXJIVE1MID0gaHRtbFN0cmluZy50cmltKCk7XG5cbiAgcmV0dXJuIFtdLm1hcC5jYWxsKGRpdi5jaGlsZE5vZGVzLCAoaXRlbSkgPT4gZG9tVG9Wbm9kZShpdGVtKSkgYXMgQ2hpbGRyZW47XG59O1xuXG5jb25zdCByZXNlcnZlZFByb3BzOiBSZXNlcnZlZFByb3BzID0ge1xuICBrZXk6IHRydWUsXG4gIHN0YXRlOiB0cnVlLFxuICBvbmNyZWF0ZTogdHJ1ZSxcbiAgb251cGRhdGU6IHRydWUsXG4gIG9ucmVtb3ZlOiB0cnVlLFxuICBzaG91bGR1cGRhdGU6IHRydWUsXG4gIFwidi1vbmNlXCI6IHRydWUsXG5cbiAgLy8gQnVpbHQgaW4gZGlyZWN0aXZlc1xuICBcInYtaWZcIjogdHJ1ZSxcbiAgXCJ2LXVubGVzc1wiOiB0cnVlLFxuICBcInYtZm9yXCI6IHRydWUsXG4gIFwidi1zaG93XCI6IHRydWUsXG4gIFwidi1jbGFzc1wiOiB0cnVlLFxuICBcInYtaHRtbFwiOiB0cnVlLFxuICBcInYtbW9kZWxcIjogdHJ1ZVxufTtcblxuLyoqKiBNb3VudCAqKiovXG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJOYW1lczogUmVjb3JkPHN0cmluZywgdHJ1ZT4gPSB7fTtcbmxldCBvbkNsZWFudXBMaXN0OiBGdW5jdGlvbltdID0gW107XG5sZXQgb25Nb3VudExpc3Q6IEZ1bmN0aW9uW10gPSBbXTtcbmxldCBvblVwZGF0ZUxpc3Q6IEZ1bmN0aW9uW10gPSBbXTtcbmxldCBvblVubW91bnRMaXN0OiBGdW5jdGlvbltdID0gW107XG5jb25zdCBjdXJyZW50OiBDdXJyZW50ID0ge307XG5mdW5jdGlvbiBldmVudExpc3RlbmVyKGU6IEV2ZW50KSB7XG4gIGxldCBkb20gPSBlLnRhcmdldCBhcyBEb21FbGVtZW50O1xuICBsZXQgbmFtZSA9IGB2LW9uJHtlLnR5cGV9YDtcbiAgd2hpbGUgKGRvbSkge1xuICAgIGlmIChkb21bbmFtZV0pIHtcbiAgICAgIGRvbVtuYW1lXShlLCBkb20pO1xuICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRvbSA9IGRvbS5wYXJlbnROb2RlIGFzIERvbUVsZW1lbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25DbGVhbnVwKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25DbGVhbnVwTGlzdC5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICBvbkNsZWFudXBMaXN0LnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5mdW5jdGlvbiBvblVubW91bnQoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmIChvblVubW91bnRMaXN0LmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgIG9uVW5tb3VudExpc3QucHVzaChjYWxsYmFjayk7XG4gIH1cbn1cbmZ1bmN0aW9uIG9uTW91bnQoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmIChvbk1vdW50TGlzdC5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICBvbk1vdW50TGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gb25VcGRhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmIChvblVwZGF0ZUxpc3QuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgb25VcGRhdGVMaXN0LnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5cbi8qXG4gICogTW91bnRzIGEgY29tcG9uZW50IHRvIHRoZSBET01cbiAgbW91bnQoJyNhcHAnLCAoKSA9PiA8ZGl2PkhlbGxvIHdvcmxkPC9kaXY+KTsgLy8gQXBwIGlzIGEgRnVuY3Rpb25hbCBDb21wb25lbnRcbiAgbW91bnQoJyNhcHAnLCB7IHZpZXc6ICgpID0+IDxkaXY+SGVsbG8gd29ybGQ8L2Rpdj4gfSk7IC8vIEFwcCBpcyBhIFBPSk8gY29tcG9uZW50IHdpdGggYSB2aWV3IG1ldGhvZFxuICBtb3VudCgnI2FwcCcsIGNsYXNzSW5zdGFuY2UpOyAvLyBBcHAgaXMgYSBjbGFzcyBpbnN0YW5jZSB3aXRoIGEgdmlldyBtZXRob2RcbiAgbW91bnQoJyNhcHAnLCA8QXBwPjxkaXY+SGVsbG8gd29ybGQ8L2Rpdj48L0FwcD4pOyAvLyBBcHAgaXMgYSBWbm9kZSBjb21wb25lbnQgKFZub2RlIHdpdGggdGFnIF9fY29tcG9uZW50X18pXG4qL1xuXG5mdW5jdGlvbiBtb3VudChjb250YWluZXI6IERvbUVsZW1lbnQgfCBzdHJpbmcsIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQgfCBJVm5vZGUpOiB2b2lkIHwgc3RyaW5nIHtcbiAgbGV0IGFwcENvbnRhaW5lciA9IG51bGw7XG5cbiAgaWYgKGlzTm9kZUpzKSB7XG4gICAgYXBwQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGNyZWF0ZURvbUVsZW1lbnQoY29udGFpbmVyID09PSBcInN2Z1wiID8gXCJzdmdcIiA6IFwiZGl2XCIsIGNvbnRhaW5lciA9PT0gXCJzdmdcIikgOiBjb250YWluZXI7XG4gIH0gZWxzZSB7XG4gICAgYXBwQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY29udGFpbmVyKVswXSA6IGNvbnRhaW5lcjtcbiAgfVxuXG4gIGlmICghYXBwQ29udGFpbmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udGFpbmVyIG5vdCBmb3VuZFwiKTtcbiAgfVxuXG4gIGxldCB2bm9kZUNvbXBvbmVudDogVm5vZGVDb21wb25lbnQgfCBJVm5vZGU7XG5cbiAgaWYgKGlzVm5vZGVDb21wb25lbnQoY29tcG9uZW50KSkge1xuICAgIHZub2RlQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9IGVsc2UgaWYgKGlzQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICB2bm9kZUNvbXBvbmVudCA9IHYoY29tcG9uZW50LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tcG9uZW50IG11c3QgYmUgYSBWYWx5cmlhbiBDb21wb25lbnQgb3IgYSBWbm9kZSBjb21wb25lbnRcIik7XG4gIH1cblxuICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICB1bm1vdW50KCk7XG4gIH1cblxuICB2LmNvbXBvbmVudCA9IHZub2RlQ29tcG9uZW50IGFzIFZub2RlQ29tcG9uZW50O1xuICB2LmNvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcbiAgdi5tYWluVm5vZGUgPSBkb21Ub1Zub2RlKGFwcENvbnRhaW5lcikgYXMgVm5vZGVXaXRoRG9tO1xuXG4gIC8vIHVwZGF0ZVxuICByZXR1cm4gdXBkYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFja0xpc3QobGlzdDogRnVuY3Rpb25bXSk6IHZvaWQge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsaXN0W2ldKCk7XG4gIH1cbiAgbGlzdCA9IFtdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUoKTogdm9pZCB8IHN0cmluZyB7XG4gIGlmICh2LmNvbXBvbmVudCAmJiB2Lm1haW5Wbm9kZSkge1xuICAgIG9uQ2xlYW51cExpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25DbGVhbnVwTGlzdCk7XG4gICAgbGV0IG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsID0gdi5tYWluVm5vZGUgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHYubWFpblZub2RlID0gbmV3IFZub2RlKHYubWFpblZub2RlLnRhZywgdi5tYWluVm5vZGUucHJvcHMsIFt2LmNvbXBvbmVudF0pIGFzIFZub2RlV2l0aERvbTtcbiAgICB2Lm1haW5Wbm9kZS5kb20gPSBvbGRWbm9kZS5kb207XG4gICAgcGF0Y2godi5tYWluVm5vZGUsIG9sZFZub2RlKTtcbiAgICBvbGRWbm9kZSA9IG51bGw7XG4gICAgaWYgKHYuaXNNb3VudGVkID09PSBmYWxzZSkge1xuICAgICAgb25Nb3VudExpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25Nb3VudExpc3QpO1xuICAgICAgdi5pc01vdW50ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvblVwZGF0ZUxpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25VcGRhdGVMaXN0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb2RlSnMpIHtcbiAgICAgIHJldHVybiB2Lm1haW5Wbm9kZS5kb20uaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50KCk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAodi5pc01vdW50ZWQgJiYgdi5tYWluVm5vZGUgJiYgdi5jb21wb25lbnQpIHtcbiAgICBvbkNsZWFudXBMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uQ2xlYW51cExpc3QpO1xuICAgIG9uVW5tb3VudExpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25Vbm1vdW50TGlzdCk7XG4gICAgbGV0IG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsID0gdi5tYWluVm5vZGUgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHYubWFpblZub2RlID0gbmV3IFZub2RlKHYubWFpblZub2RlLnRhZywgdi5tYWluVm5vZGUucHJvcHMsIFtdKSBhcyBWbm9kZVdpdGhEb207XG4gICAgdi5tYWluVm5vZGUuZG9tID0gb2xkVm5vZGUuZG9tO1xuICAgIHYubWFpblZub2RlLmlzU1ZHID0gb2xkVm5vZGUuaXNTVkc7XG4gICAgcGF0Y2godi5tYWluVm5vZGUsIG9sZFZub2RlKTtcbiAgICBvbGRWbm9kZSA9IG51bGw7XG4gICAgdi5jb21wb25lbnQgPSBudWxsO1xuICAgIHYuaXNNb3VudGVkID0gZmFsc2U7XG4gICAgaWYgKGlzTm9kZUpzKSB7XG4gICAgICByZXR1cm4gdi5tYWluVm5vZGUuZG9tLmlubmVySFRNTDtcbiAgICB9XG4gIH1cbn1cblxubGV0IGVtcHR5Vm5vZGUgPSBuZXcgVm5vZGUoXCJfX2VtcHR5X19cIiwge30sIFtdKTtcblxuZnVuY3Rpb24gb25yZW1vdmUodm5vZGU6IElWbm9kZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdm5vZGUuY2hpbGRyZW5baV0udGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKHZub2RlLmNoaWxkcmVuW2ldKTtcbiAgfVxuXG4gIHZub2RlLnByb3BzLm9ucmVtb3ZlICYmIHZub2RlLnByb3BzLm9ucmVtb3ZlKHZub2RlKTtcbn1cblxuZnVuY3Rpb24gc2hhcmVkU2V0QXR0cmlidXRlKHByb3A6IHN0cmluZywgdmFsdWU6IGFueSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pOiB2b2lkIHwgYm9vbGVhbiB7XG4gIC8vIEl0IGlzIGEgcmVzZXJ2ZWQgcHJvcFxuICBpZiAocmVzZXJ2ZWRQcm9wc1twcm9wXSkge1xuICAgIC8vIElmIGl0IGlzIGEgZGlyZWN0aXZlIG5hbWUgY2FsbCB0aGUgZGlyZWN0aXZlXG4gICAgaWYgKGRpcmVjdGl2ZXNbcHJvcF0pIHtcbiAgICAgIHJldHVybiBkaXJlY3RpdmVzW3Byb3BdKHZub2RlLnByb3BzW3Byb3BdLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEl0IGlzIG5vdCBhIHJlc2VydmVkIHByb3Agc28gd2UgYWRkIGl0IHRvIHRoZSBkb21cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgaWYgKHByb3AgaW4gZXZlbnRMaXN0ZW5lck5hbWVzID09PSBmYWxzZSkge1xuICAgICAgZXZlbnRMaXN0ZW5lck5hbWVzW3Byb3BdID0gdHJ1ZTtcbiAgICAgICh2LmNvbnRhaW5lciBhcyBEb21FbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKHByb3Auc2xpY2UoMiksIGV2ZW50TGlzdGVuZXIpO1xuICAgIH1cbiAgICB2bm9kZS5kb21bYHYtJHtwcm9wfWBdID0gdmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb3AgaW4gdm5vZGUuZG9tICYmIHZub2RlLmlzU1ZHID09PSBmYWxzZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAodm5vZGUuZG9tW3Byb3BdICE9IHZhbHVlKSB7XG4gICAgICB2bm9kZS5kb21bcHJvcF0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVXNlIHNldCBhdHRyaWJ1dGVcbiAgaWYgKCFvbGRWbm9kZSB8fCBvbGRWbm9kZS5wcm9wc1twcm9wXSAhPT0gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICB2bm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5kb20uc2V0QXR0cmlidXRlKHByb3AsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pIHtcbiAgdm5vZGUucHJvcHNbbmFtZV0gPSB2YWx1ZTtcblxuICBzaGFyZWRTZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHZub2RlLCBvbGRWbm9kZSk7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXModm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pIHtcbiAgZm9yIChsZXQgcHJvcCBpbiB2bm9kZS5wcm9wcykge1xuICAgIGlmIChzaGFyZWRTZXRBdHRyaWJ1dGUocHJvcCwgdm5vZGUucHJvcHNbcHJvcF0sIHZub2RlLCBvbGRWbm9kZSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG9sZFZub2RlKSB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBvbGRWbm9kZS5wcm9wcykge1xuICAgICAgaWYgKHByb3AgaW4gdm5vZGUucHJvcHMgPT09IGZhbHNlICYmIHR5cGVvZiBvbGRWbm9kZS5wcm9wc1twcm9wXSAhPT0gXCJmdW5jdGlvblwiICYmIHByb3AgaW4gcmVzZXJ2ZWRQcm9wcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gb2xkVm5vZGUuZG9tICYmIHZub2RlLmlzU1ZHID09PSBmYWxzZSkge1xuICAgICAgICAgIG9sZFZub2RlLmRvbVtwcm9wXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkVm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcGF0Y2gobmV3Vm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU6IFZub2RlV2l0aERvbSB8IElWbm9kZSA9IGVtcHR5Vm5vZGUpIHtcbiAgY3VycmVudC52bm9kZSA9IG5ld1Zub2RlO1xuICBjdXJyZW50Lm9sZFZub2RlID0gb2xkVm5vZGUgPT09IGVtcHR5Vm5vZGUgPyBVbmQgOiAob2xkVm5vZGUgYXMgVm5vZGVXaXRoRG9tKTtcbiAgbGV0IG5ld1RyZWUgPSBuZXdWbm9kZS5jaGlsZHJlbjtcbiAgbGV0IG9sZFRyZWUgPSBvbGRWbm9kZS5jaGlsZHJlbjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWUubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG4gICAgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgaWYgKGNoaWxkVm5vZGUudGFnICE9PSBUZXh0U3RyaW5nKSB7XG4gICAgICAgIGlmIChjaGlsZFZub2RlLnRhZyA9PT0gQ29tcG9uZW50U3RyaW5nKSB7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNoaWxkVm5vZGUuY29tcG9uZW50IGFzIFZhbHlyaWFuQ29tcG9uZW50O1xuICAgICAgICAgIGN1cnJlbnQuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICAgIGxldCByZXN1bHQgPSAoXCJ2aWV3XCIgaW4gY29tcG9uZW50ID8gY29tcG9uZW50LnZpZXcgOiBjb21wb25lbnQpLmNhbGwoY29tcG9uZW50LCBjaGlsZFZub2RlLnByb3BzLCAuLi5jaGlsZFZub2RlLmNoaWxkcmVuKTtcblxuICAgICAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSwgcmVzdWx0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFZub2RlLmlzU1ZHID0gbmV3Vm5vZGUuaXNTVkcgfHwgY2hpbGRWbm9kZS50YWcgPT09IFwic3ZnXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkVm5vZGUpKSB7XG4gICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIC4uLmNoaWxkVm5vZGUpO1xuICAgIH0gZWxzZSBpZiAoY2hpbGRWbm9kZSA9PT0gbnVsbCB8fCBjaGlsZFZub2RlID09PSBVbmQpIHtcbiAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1RyZWVbaV0gPSBuZXcgVm5vZGUoVGV4dFN0cmluZywge30sIFtdKTtcbiAgICAgIG5ld1RyZWVbaV0ubm9kZVZhbHVlID0gY2hpbGRWbm9kZTtcbiAgICB9XG4gIH1cblxuICBsZXQgb2xkVHJlZUxlbmd0aCA9IG9sZFRyZWUubGVuZ3RoO1xuICBsZXQgbmV3VHJlZUxlbmd0aCA9IG5ld1RyZWUubGVuZ3RoO1xuXG4gIC8vIElmIG5ldyB0cmVlIGlzIGVtcHR5LCByZW1vdmUgYWxsIG9sZCBub2Rlc1xuICBpZiAobmV3VHJlZUxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRUcmVlW2ldLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICB9XG5cbiAgICBuZXdWbm9kZS5kb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHRoZSB0cmVlIGlzIGtleWVkIGxpc3QgYW5kIGlzIG5vdCBmaXJzdCByZW5kZXIgYW5kIG9sZCB0cmVlIGlzIGtleWVkIGxpc3QgdG9vXG4gIGlmIChvbGRUcmVlTGVuZ3RoICYmIFwia2V5XCIgaW4gbmV3VHJlZVswXS5wcm9wcyAmJiBcImtleVwiIGluIG9sZFRyZWVbMF0ucHJvcHMpIHtcbiAgICBsZXQgb2xkS2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG9sZEtleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIGxldCBuZXdLZXllZExpc3Q6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgICAgbmV3S2V5ZWRMaXN0W25ld1RyZWVbaV0ucHJvcHMua2V5XSA9IGk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcbiAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtvbGRLZXllZExpc3RbY2hpbGRWbm9kZS5wcm9wcy5rZXldXTtcbiAgICAgIGxldCBzaG91bGRQYXRjaCA9IHRydWU7XG5cbiAgICAgIGlmIChvbGRDaGlsZFZub2RlKSB7XG4gICAgICAgIGNoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgIGlmIChcInYtb25jZVwiIGluIGNoaWxkVm5vZGUucHJvcHMgfHwgKGNoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoaXMgcGF0Y2hcbiAgICAgICAgICBjaGlsZFZub2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICBzaG91bGRQYXRjaCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEF0dHJpYnV0ZXMoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChjaGlsZFZub2RlLnRhZywgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgIHNldEF0dHJpYnV0ZXMoY2hpbGRWbm9kZSk7XG4gICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzW2ldID09PSBVbmQpIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGNoaWxkVm5vZGUuZG9tKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gIT09IGNoaWxkVm5vZGUuZG9tKSB7XG4gICAgICAgIG9sZFRyZWVbaV0gJiYgbmV3S2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSA9PT0gVW5kICYmIG9ucmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGNoaWxkVm5vZGUuZG9tLCBuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHNob3VsZFBhdGNoICYmIHBhdGNoKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgIH1cblxuICAgIC8vIEZvciB0aGUgcmVzdCBvZiB0aGUgY2hpbGRyZW4sIHdlIHNob3VsZCByZW1vdmUgdGhlbVxuICAgIGZvciAobGV0IGkgPSBuZXdUcmVlTGVuZ3RoOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmV3S2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSA9PT0gVW5kKSB7XG4gICAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICAgICAgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUgJiYgb2xkQ2hpbGRWbm9kZS5kb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRDaGlsZFZub2RlLmRvbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgbmV3IHRyZWUgYW5kIG9sZCB0cmVlIGhhdmUgbW9yZSB0aGFuIG9uZSBjaGlsZCwgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgZG9tXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5ld0NoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuXG4gICAgLy8gT2xkIGNoaWxkIGV4aXN0c1xuICAgIGlmIChpIDwgb2xkVHJlZUxlbmd0aCkge1xuICAgICAgbGV0IG9sZENoaWxkVm5vZGUgPSBvbGRUcmVlW2ldO1xuICAgICAgLy8gTmV3IGNoaWxkIGlzIGEgdGV4dCBub2RlXG4gICAgICBpZiAobmV3Q2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgICAgLy8gT2xkIGNoaWxkIGlzIGEgdGV4dCBub2RlXG4gICAgICAgIGlmIChvbGRDaGlsZFZub2RlLnRhZyA9PT0gVGV4dFN0cmluZykge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICAgIGlmIChuZXdDaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgIT0gbmV3Q2hpbGRWbm9kZS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tLm5vZGVWYWx1ZSA9IG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbGQgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlIGFzIHN0cmluZykgYXMgdW5rbm93biBhcyBEb21FbGVtZW50O1xuICAgICAgICBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChuZXdDaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20pO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBOZXcgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgICAgLy8gT2xkIGNoaWxkIGlzIHRoZSBzYW1lIHR5cGUgYXMgbmV3IGNoaWxkXG4gICAgICBpZiAob2xkQ2hpbGRWbm9kZS50YWcgPT09IG5ld0NoaWxkVm5vZGUudGFnKSB7XG4gICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSB2LW9uY2UgZGlyZWN0aXZlIG9yIGEgc2hvdWxkdXBkYXRlIG1ldGhvZCB0aGF0IHJldHVybnMgZmFsc2UsIHdlIHNraXAgdGhlIHVwZGF0ZVxuICAgICAgICBpZiAobmV3Q2hpbGRWbm9kZS5wcm9wc1tcInYtb25jZVwiXSB8fCAobmV3Q2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUobmV3Q2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUuY2hpbGRyZW4gPSBvbGRDaGlsZFZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgdXBkYXRlIHRoZSBkb20gZWxlbWVudFxuICAgICAgICBzZXRBdHRyaWJ1dGVzKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9udXBkYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub251cGRhdGUobmV3Q2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKG5ld0NoaWxkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF0Y2gobmV3Q2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBPbGQgY2hpbGQgaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIG5ldyBjaGlsZFxuICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBjcmVhdGVEb21FbGVtZW50KG5ld0NoaWxkVm5vZGUudGFnLCBuZXdDaGlsZFZub2RlLmlzU1ZHKTtcbiAgICAgIHNldEF0dHJpYnV0ZXMobmV3Q2hpbGRWbm9kZSk7XG4gICAgICBvbGRDaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tKTtcbiAgICAgIHBhdGNoKG5ld0NoaWxkVm5vZGUsIGVtcHR5Vm5vZGUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gT2xkIGNoaWxkIGRvZXMgbm90IGV4aXN0c1xuICAgIC8vIE5ldyBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgIGlmIChuZXdDaGlsZFZub2RlLnRhZyA9PT0gVGV4dFN0cmluZykge1xuICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmcpIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChuZXdDaGlsZFZub2RlLmRvbSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBOZXcgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChuZXdDaGlsZFZub2RlLnRhZywgbmV3Q2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgc2V0QXR0cmlidXRlcyhuZXdDaGlsZFZub2RlKTtcbiAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20pO1xuICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICBwYXRjaChuZXdDaGlsZFZub2RlLCBlbXB0eVZub2RlKTtcbiAgfVxuXG4gIC8vIEZvciB0aGUgcmVzdCBvZiB0aGUgY2hpbGRyZW4sIHdlIHNob3VsZCByZW1vdmUgdGhlbVxuICBmb3IgKGxldCBpID0gbmV3VHJlZUxlbmd0aDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICBvbGRDaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlICYmIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkQ2hpbGRWbm9kZS5kb20pO1xuICB9XG59XG5cbi8qKiogRGlyZWN0aXZlcyAqKiovXG5cbmZ1bmN0aW9uIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZTogRGlyZWN0aXZlKSB7XG4gIGxldCBmdWxsTmFtZSA9IGB2LSR7bmFtZX1gO1xuICBkaXJlY3RpdmVzW2Z1bGxOYW1lXSA9IGRpcmVjdGl2ZTtcbiAgcmVzZXJ2ZWRQcm9wc1tmdWxsTmFtZV0gPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBoaWRlRGlyZWN0aXZlKHRlc3Q6IGJvb2xlYW4pOiBEaXJlY3RpdmUge1xuICByZXR1cm4gKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBJVm5vZGUsIG9sZFZub2RlPzogSVZub2RlKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gdGVzdCA/IGJvb2wgOiAhYm9vbDtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGxldCBuZXdkb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcbiAgICAgIGlmIChvbGRWbm9kZSAmJiBvbGRWbm9kZS5kb20gJiYgb2xkVm5vZGUuZG9tLnBhcmVudE5vZGUpIHtcbiAgICAgICAgb2xkVm5vZGUudGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKG9sZFZub2RlKTtcbiAgICAgICAgb2xkVm5vZGUuZG9tLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld2RvbSwgb2xkVm5vZGUuZG9tKTtcbiAgICAgIH1cbiAgICAgIHZub2RlLnRhZyA9IFRleHRTdHJpbmc7XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgdm5vZGUucHJvcHMgPSB7fTtcbiAgICAgIHZub2RlLmRvbSA9IG5ld2RvbSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnQ7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBkaXJlY3RpdmVzOiBEaXJlY3RpdmVzID0ge1xuICBcInYtaWZcIjogaGlkZURpcmVjdGl2ZShmYWxzZSksXG4gIFwidi11bmxlc3NcIjogaGlkZURpcmVjdGl2ZSh0cnVlKSxcbiAgXCJ2LWZvclwiOiAoc2V0OiB1bmtub3duW10sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IHNldC5tYXAodm5vZGUuY2hpbGRyZW5bMF0pO1xuICB9LFxuICBcInYtc2hvd1wiOiAoYm9vbDogYm9vbGVhbiwgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgICh2bm9kZS5kb20gYXMgdW5rbm93biBhcyB7IHN0eWxlOiB7IGRpc3BsYXk6IHN0cmluZyB9IH0pLnN0eWxlLmRpc3BsYXkgPSBib29sID8gXCJcIiA6IFwibm9uZVwiO1xuICB9LFxuICBcInYtY2xhc3NcIjogKGNsYXNzZXM6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSwgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIGZvciAobGV0IG5hbWUgaW4gY2xhc3Nlcykge1xuICAgICAgKHZub2RlLmRvbSBhcyBEb21FbGVtZW50KS5jbGFzc0xpc3QudG9nZ2xlKG5hbWUsIGNsYXNzZXNbbmFtZV0pO1xuICAgIH1cbiAgfSxcbiAgXCJ2LWh0bWxcIjogKGh0bWw6IHN0cmluZywgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gW3RydXN0KGh0bWwpXTtcbiAgfSxcbiAgXCJ2LW1vZGVsXCI6IChbbW9kZWwsIHByb3BlcnR5LCBldmVudF06IGFueVtdLCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIGxldCB2YWx1ZTtcbiAgICBsZXQgaGFuZGxlcjtcbiAgICBpZiAodm5vZGUudGFnID09PSBcImlucHV0XCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmlucHV0XCI7XG4gICAgICBzd2l0Y2ggKHZub2RlLnByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoZWNrYm94XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgICAgICBsZXQgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlciA9ICgpID0+IChtb2RlbFtwcm9wZXJ0eV0gPSAhbW9kZWxbcHJvcGVydHldKTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLmRvbS52YWx1ZSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09IFwic2VsZWN0XCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmNsaWNrXCI7XG4gICAgICBpZiAodm5vZGUucHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBsZXQgdmFsID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZTtcbiAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICBsZXQgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoMCwgbW9kZWxbcHJvcGVydHldLmxlbmd0aCk7XG4gICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IElWbm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBJVm5vZGUpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSB2YWx1ZSA9PT0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09IFwidGV4dGFyZWFcIikge1xuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uaW5wdXRcIjtcbiAgICAgIHZub2RlLmNoaWxkcmVuID0gW21vZGVsW3Byb3BlcnR5XV07XG4gICAgfVxuXG4gICAgaWYgKCF2bm9kZS5wcm9wc1tldmVudF0pIHtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiAobW9kZWxbcHJvcGVydHldID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZSk7XG4gICAgICB9XG4gICAgICBzZXRBdHRyaWJ1dGUoZXZlbnQsIGhhbmRsZXIsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgfVxuICB9XG59O1xuXG4vKioqIFBsdWdpbnMgKioqL1xuY29uc3QgcGx1Z2lucyA9IG5ldyBNYXA8UGx1Z2luLCBhbnk+KCk7XG5cbmZ1bmN0aW9uIHVzZShwbHVnaW46IFBsdWdpbiwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIGFueT4pOiB2b2lkIHwgYW55IHtcbiAgaWYgKHBsdWdpbnMuaGFzKHBsdWdpbikpIHtcbiAgICByZXR1cm4gcGx1Z2lucy5nZXQocGx1Z2luKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBwbHVnaW4odiwgb3B0aW9ucyk7XG4gIHBsdWdpbnMuc2V0KHBsdWdpbiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqKiBIeXBlcnNjcmlwdCAqKiovXG5cbmNvbnN0IHY6IFZhbHlyaWFuID0gZnVuY3Rpb24gdih0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgVmFseXJpYW5Db21wb25lbnQsIHByb3BzOiBQcm9wcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKTogSVZub2RlIHwgVm5vZGVDb21wb25lbnQge1xuICBpZiAodHlwZW9mIHRhZ09yQ29tcG9uZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIG5ldyBWbm9kZSh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgfVxuXG4gIGNvbnN0IHZub2RlID0gbmV3IFZub2RlKFwiX19jb21wb25lbnRfX1wiLCBwcm9wcyB8fCB7fSwgY2hpbGRyZW4pO1xuICB2bm9kZS5jb21wb25lbnQgPSB0YWdPckNvbXBvbmVudDtcbiAgcmV0dXJuIHZub2RlIGFzIFZub2RlQ29tcG9uZW50O1xufTtcblxudi5mcmFnbWVudCA9IChwcm9wczogUHJvcHMsIC4uLmNoaWxkcmVuOiBDaGlsZHJlbik6IENoaWxkcmVuID0+IHtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufTtcblxuLyoqKiBWIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgKioqL1xuLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBtYWtlIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGF2YWlsYWJsZSBmb3IgcGx1Z2luc1xudi5jdXJyZW50ID0gY3VycmVudDtcblxudi5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcblxudi5yZXNlcnZlZFByb3BzID0gcmVzZXJ2ZWRQcm9wcztcblxudi5pc1Zub2RlID0gaXNWbm9kZTtcbnYuaXNDb21wb25lbnQgPSBpc0NvbXBvbmVudDtcbnYuaXNWbm9kZUNvbXBvbmVudCA9IGlzVm5vZGVDb21wb25lbnQ7XG5cbnYuaXNNb3VudGVkID0gZmFsc2U7XG52LmlzTm9kZUpzID0gaXNOb2RlSnM7XG52LnRydXN0ID0gdHJ1c3Q7XG5cbnYub25DbGVhbnVwID0gb25DbGVhbnVwO1xudi5vblVubW91bnQgPSBvblVubW91bnQ7XG52Lm9uTW91bnQgPSBvbk1vdW50O1xudi5vblVwZGF0ZSA9IG9uVXBkYXRlO1xuXG52Lm1vdW50ID0gbW91bnQ7XG52LnVubW91bnQgPSB1bm1vdW50O1xudi51cGRhdGUgPSB1cGRhdGU7XG5cbnYuc2V0QXR0cmlidXRlID0gc2V0QXR0cmlidXRlO1xudi5kaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG52LnVzZSA9IHVzZTtcblxuZXhwb3J0IGRlZmF1bHQgdjtcbiJdfQ==
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJDb21wb25lbnRTdHJpbmciLCJUZXh0U3RyaW5nIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsIlVuZCIsIlZub2RlIiwidGFnIiwicHJvcHMiLCJjaGlsZHJlbiIsInRoaXMiLCJpc0NvbXBvbmVudCIsImNvbXBvbmVudCIsImlzVm5vZGVDb21wb25lbnQiLCJ2bm9kZSIsImNyZWF0ZURvbUVsZW1lbnQiLCJpc1NWRyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsImRvbVRvVm5vZGUiLCJkb20iLCJub2RlVHlwZSIsInYiLCJub2RlVmFsdWUiLCJpIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkIiwicHVzaCIsImZvckVhY2giLCJjYWxsIiwiYXR0cmlidXRlcyIsInByb3AiLCJub2RlTmFtZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImlubmVySFRNTCIsInRyaW0iLCJtYXAiLCJpdGVtIiwicmVzZXJ2ZWRQcm9wcyIsImtleSIsInN0YXRlIiwib25jcmVhdGUiLCJvbnVwZGF0ZSIsIm9ucmVtb3ZlIiwic2hvdWxkdXBkYXRlIiwiZXZlbnRMaXN0ZW5lck5hbWVzIiwib25DbGVhbnVwTGlzdCIsIm9uTW91bnRMaXN0Iiwib25VcGRhdGVMaXN0Iiwib25Vbm1vdW50TGlzdCIsImN1cnJlbnQiLCJldmVudExpc3RlbmVyIiwiZSIsInRhcmdldCIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZGF0ZSIsInBhcmVudE5vZGUiLCJjYWxsQ2FsbGJhY2tMaXN0IiwibGlzdCIsIm1haW5Wbm9kZSIsIm9sZFZub2RlIiwicGF0Y2giLCJpc01vdW50ZWQiLCJ1bm1vdW50IiwiZW1wdHlWbm9kZSIsInNoYXJlZFNldEF0dHJpYnV0ZSIsInZhbHVlIiwiZGlyZWN0aXZlcyIsImNvbnRhaW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzbGljZSIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZXMiLCJuZXdWbm9kZSIsIm5ld1RyZWUiLCJvbGRUcmVlIiwiY2hpbGRWbm9kZSIsInJlc3VsdCIsInZpZXciLCJzcGxpY2UiLCJBcnJheSIsImlzQXJyYXkiLCJvbGRUcmVlTGVuZ3RoIiwibmV3VHJlZUxlbmd0aCIsIm9sZEtleWVkTGlzdCIsIm5ld0tleWVkTGlzdCIsIm9sZENoaWxkVm5vZGUiLCJzaG91bGRQYXRjaCIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicmVtb3ZlQ2hpbGQiLCJuZXdDaGlsZFZub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJ0ZXh0Q29udGVudCIsImhpZGVEaXJlY3RpdmUiLCJ0ZXN0IiwiYm9vbCIsIm5ld2RvbSIsInNldCIsInN0eWxlIiwiZGlzcGxheSIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJodG1sIiwibW9kZWwiLCJwcm9wZXJ0eSIsImV2ZW50IiwiaGFuZGxlciIsInZhbCIsImlkeCIsImluZGV4T2YiLCJtdWx0aXBsZSIsImN0cmxLZXkiLCJ2YWx1ZTIiLCJqb2luIiwic2VsZWN0ZWQiLCJwbHVnaW5zIiwiTWFwIiwidGFnT3JDb21wb25lbnQiLCJmcmFnbWVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJvbkNsZWFudXAiLCJjYWxsYmFjayIsIm9uVW5tb3VudCIsIm9uTW91bnQiLCJvblVwZGF0ZSIsIm1vdW50Iiwidm5vZGVDb21wb25lbnQiLCJhcHBDb250YWluZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwiRXJyb3IiLCJkaXJlY3RpdmUiLCJkaXJlY3RpdmUyIiwiZnVsbE5hbWUiLCJ1c2UiLCJwbHVnaW4iLCJvcHRpb25zIiwiaGFzIiwiZ2V0Il0sIm1hcHBpbmdzIjoiTUFxQkEsSUFBTUEsRUFBa0IsZ0JBQ2xCQyxFQUFhLFFBQ2JDLEVBQVdDLFFBQTJCLG9CQUFa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InNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5ICovXG4vKioqIFZub2RlICoqKi9cblxuaW1wb3J0IHtcbiAgQ2hpbGRyZW4sXG4gIEN1cnJlbnQsXG4gIERpcmVjdGl2ZSxcbiAgRGlyZWN0aXZlcyxcbiAgRG9tRWxlbWVudCxcbiAgSVZub2RlLFxuICBQbHVnaW4sXG4gIFByb3BzLFxuICBSZXNlcnZlZFByb3BzLFxuICBWYWx5cmlhbixcbiAgVmFseXJpYW5Db21wb25lbnQsXG4gIFZub2RlQ29tcG9uZW50LFxuICBWbm9kZVdpdGhEb21cbn0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vKioqIENvbnN0YW50cyAqKiovXG5jb25zdCBDb21wb25lbnRTdHJpbmcgPSBcIl9fY29tcG9uZW50X19cIjtcbmNvbnN0IFRleHRTdHJpbmcgPSBcIiN0ZXh0XCI7XG5jb25zdCBpc05vZGVKcyA9IEJvb2xlYW4odHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuY29uc3QgVW5kID0gdW5kZWZpbmVkO1xuXG4vKioqIFZub2RlICoqKi9cblxuY29uc3QgVm5vZGUgPSBmdW5jdGlvbiBWbm9kZSh0aGlzOiBJVm5vZGUsIHRhZzogc3RyaW5nLCBwcm9wczogUHJvcHMsIGNoaWxkcmVuOiBDaGlsZHJlbikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy50YWcgPSB0YWc7XG59IGFzIHVua25vd24gYXMgSVZub2RlO1xuXG5mdW5jdGlvbiBpc1Zub2RlKG9iamVjdD86IHVua25vd24gfCBJVm5vZGUpOiBvYmplY3QgaXMgSVZub2RlIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIFZub2RlO1xufVxuXG5mdW5jdGlvbiBpc0NvbXBvbmVudChjb21wb25lbnQ/OiB1bmtub3duIHwgVmFseXJpYW5Db21wb25lbnQpOiBjb21wb25lbnQgaXMgVmFseXJpYW5Db21wb25lbnQge1xuICByZXR1cm4gdHlwZW9mIGNvbXBvbmVudCA9PT0gXCJmdW5jdGlvblwiIHx8ICh0eXBlb2YgY29tcG9uZW50ID09PSBcIm9iamVjdFwiICYmIGNvbXBvbmVudCAhPT0gbnVsbCAmJiBcInZpZXdcIiBpbiBjb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1Zub2RlQ29tcG9uZW50KHZub2RlPzogdW5rbm93biB8IFZub2RlQ29tcG9uZW50KTogdm5vZGUgaXMgVm5vZGVDb21wb25lbnQge1xuICByZXR1cm4gdm5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiB2bm9kZS50YWcgPT09IENvbXBvbmVudFN0cmluZztcbn1cblxuLyoqKiBVdGlsICoqKi9cblxuZnVuY3Rpb24gY3JlYXRlRG9tRWxlbWVudCh0YWc6IHN0cmluZywgaXNTVkc6IGJvb2xlYW4gPSBmYWxzZSkge1xuICByZXR1cm4gaXNTVkcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB0YWcpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xufVxuXG5mdW5jdGlvbiBkb21Ub1Zub2RlKGRvbTogRG9tRWxlbWVudCk6IHZvaWQgfCBWbm9kZVdpdGhEb20ge1xuICBpZiAoZG9tLm5vZGVUeXBlID09PSAzKSB7XG4gICAgbGV0IHZub2RlID0gdihUZXh0U3RyaW5nLCB7fSwgW10pO1xuICAgIHZub2RlLm5vZGVWYWx1ZSA9IGRvbS5ub2RlVmFsdWUgYXMgc3RyaW5nO1xuICAgIHZub2RlLmRvbSA9IGRvbTtcbiAgICByZXR1cm4gdm5vZGUgYXMgVm5vZGVXaXRoRG9tO1xuICB9XG5cbiAgaWYgKGRvbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgIGxldCBjaGlsZHJlbiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZCA9IGRvbVRvVm5vZGUoZG9tLmNoaWxkTm9kZXNbaV0gYXMgRG9tRWxlbWVudCk7XG4gICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHByb3BzOiBQcm9wcyA9IHt9O1xuICAgIFtdLmZvckVhY2guY2FsbChkb20uYXR0cmlidXRlcywgKHByb3A6IEF0dHIpID0+IChwcm9wc1twcm9wLm5vZGVOYW1lXSA9IHByb3Aubm9kZVZhbHVlKSk7XG5cbiAgICBsZXQgdm5vZGUgPSB2KGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCksIHByb3BzLCAuLi5jaGlsZHJlbik7XG4gICAgdm5vZGUuZG9tID0gZG9tO1xuICAgIHJldHVybiB2bm9kZSBhcyBWbm9kZVdpdGhEb207XG4gIH1cbn1cblxuY29uc3QgdHJ1c3QgPSAoaHRtbFN0cmluZzogc3RyaW5nKTogQ2hpbGRyZW4gPT4ge1xuICBsZXQgZGl2ID0gY3JlYXRlRG9tRWxlbWVudChcImRpdlwiKTtcbiAgZGl2LmlubmVySFRNTCA9IGh0bWxTdHJpbmcudHJpbSgpO1xuXG4gIHJldHVybiBbXS5tYXAuY2FsbChkaXYuY2hpbGROb2RlcywgKGl0ZW0pID0+IGRvbVRvVm5vZGUoaXRlbSkpIGFzIENoaWxkcmVuO1xufTtcblxuY29uc3QgcmVzZXJ2ZWRQcm9wczogUmVzZXJ2ZWRQcm9wcyA9IHtcbiAga2V5OiB0cnVlLFxuICBzdGF0ZTogdHJ1ZSxcbiAgb25jcmVhdGU6IHRydWUsXG4gIG9udXBkYXRlOiB0cnVlLFxuICBvbnJlbW92ZTogdHJ1ZSxcbiAgc2hvdWxkdXBkYXRlOiB0cnVlLFxuICBcInYtb25jZVwiOiB0cnVlLFxuXG4gIC8vIEJ1aWx0IGluIGRpcmVjdGl2ZXNcbiAgXCJ2LWlmXCI6IHRydWUsXG4gIFwidi11bmxlc3NcIjogdHJ1ZSxcbiAgXCJ2LWZvclwiOiB0cnVlLFxuICBcInYtc2hvd1wiOiB0cnVlLFxuICBcInYtY2xhc3NcIjogdHJ1ZSxcbiAgXCJ2LWh0bWxcIjogdHJ1ZSxcbiAgXCJ2LW1vZGVsXCI6IHRydWVcbn07XG5cbi8qKiogTW91bnQgKioqL1xuXG5jb25zdCBldmVudExpc3RlbmVyTmFtZXM6IFJlY29yZDxzdHJpbmcsIHRydWU+ID0ge307XG5sZXQgb25DbGVhbnVwTGlzdDogRnVuY3Rpb25bXSA9IFtdO1xubGV0IG9uTW91bnRMaXN0OiBGdW5jdGlvbltdID0gW107XG5sZXQgb25VcGRhdGVMaXN0OiBGdW5jdGlvbltdID0gW107XG5sZXQgb25Vbm1vdW50TGlzdDogRnVuY3Rpb25bXSA9IFtdO1xuY29uc3QgY3VycmVudDogQ3VycmVudCA9IHt9O1xuZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcihlOiBFdmVudCkge1xuICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgbGV0IG5hbWUgPSBgdi1vbiR7ZS50eXBlfWA7XG4gIHdoaWxlIChkb20pIHtcbiAgICBpZiAoZG9tW25hbWVdKSB7XG4gICAgICBkb21bbmFtZV0oZSwgZG9tKTtcbiAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uQ2xlYW51cChjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgaWYgKG9uQ2xlYW51cExpc3QuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgb25DbGVhbnVwTGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gb25Vbm1vdW50KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25Vbm1vdW50TGlzdC5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICBvblVubW91bnRMaXN0LnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5mdW5jdGlvbiBvbk1vdW50KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25Nb3VudExpc3QuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgb25Nb3VudExpc3QucHVzaChjYWxsYmFjayk7XG4gIH1cbn1cbmZ1bmN0aW9uIG9uVXBkYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25VcGRhdGVMaXN0LmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgIG9uVXBkYXRlTGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuXG4vKlxuICAqIE1vdW50cyBhIGNvbXBvbmVudCB0byB0aGUgRE9NXG4gIG1vdW50KCcjYXBwJywgKCkgPT4gPGRpdj5IZWxsbyB3b3JsZDwvZGl2Pik7IC8vIEFwcCBpcyBhIEZ1bmN0aW9uYWwgQ29tcG9uZW50XG4gIG1vdW50KCcjYXBwJywgeyB2aWV3OiAoKSA9PiA8ZGl2PkhlbGxvIHdvcmxkPC9kaXY+IH0pOyAvLyBBcHAgaXMgYSBQT0pPIGNvbXBvbmVudCB3aXRoIGEgdmlldyBtZXRob2RcbiAgbW91bnQoJyNhcHAnLCBjbGFzc0luc3RhbmNlKTsgLy8gQXBwIGlzIGEgY2xhc3MgaW5zdGFuY2Ugd2l0aCBhIHZpZXcgbWV0aG9kXG4gIG1vdW50KCcjYXBwJywgPEFwcD48ZGl2PkhlbGxvIHdvcmxkPC9kaXY+PC9BcHA+KTsgLy8gQXBwIGlzIGEgVm5vZGUgY29tcG9uZW50IChWbm9kZSB3aXRoIHRhZyBfX2NvbXBvbmVudF9fKVxuKi9cblxuZnVuY3Rpb24gbW91bnQoY29udGFpbmVyOiBEb21FbGVtZW50IHwgc3RyaW5nLCBjb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50IHwgSVZub2RlKTogdm9pZCB8IHN0cmluZyB7XG4gIGxldCBhcHBDb250YWluZXIgPSBudWxsO1xuXG4gIGlmIChpc05vZGVKcykge1xuICAgIGFwcENvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09IFwic3RyaW5nXCIgPyBjcmVhdGVEb21FbGVtZW50KGNvbnRhaW5lciA9PT0gXCJzdmdcIiA/IFwic3ZnXCIgOiBcImRpdlwiLCBjb250YWluZXIgPT09IFwic3ZnXCIpIDogY29udGFpbmVyO1xuICB9IGVsc2Uge1xuICAgIGFwcENvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcilbMF0gOiBjb250YWluZXI7XG4gIH1cblxuICBpZiAoIWFwcENvbnRhaW5lcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnRhaW5lciBub3QgZm91bmRcIik7XG4gIH1cblxuICBsZXQgdm5vZGVDb21wb25lbnQ6IFZub2RlQ29tcG9uZW50IHwgSVZub2RlO1xuXG4gIGlmIChpc1Zub2RlQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICB2bm9kZUNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChpc0NvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgdm5vZGVDb21wb25lbnQgPSB2KGNvbXBvbmVudCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbXBvbmVudCBtdXN0IGJlIGEgVmFseXJpYW4gQ29tcG9uZW50IG9yIGEgVm5vZGUgY29tcG9uZW50XCIpO1xuICB9XG5cbiAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgdW5tb3VudCgpO1xuICB9XG5cbiAgdi5jb21wb25lbnQgPSB2bm9kZUNvbXBvbmVudCBhcyBWbm9kZUNvbXBvbmVudDtcbiAgdi5jb250YWluZXIgPSBhcHBDb250YWluZXI7XG4gIHYubWFpblZub2RlID0gZG9tVG9Wbm9kZShhcHBDb250YWluZXIpIGFzIFZub2RlV2l0aERvbTtcblxuICAvLyB1cGRhdGVcbiAgcmV0dXJuIHVwZGF0ZSgpO1xufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2tMaXN0KGxpc3Q6IEZ1bmN0aW9uW10pOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdFtpXSgpO1xuICB9XG4gIGxpc3QgPSBbXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlKCk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAodi5jb21wb25lbnQgJiYgdi5tYWluVm5vZGUpIHtcbiAgICBvbkNsZWFudXBMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uQ2xlYW51cExpc3QpO1xuICAgIGxldCBvbGRWbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IHYubWFpblZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgICB2Lm1haW5Wbm9kZSA9IG5ldyBWbm9kZSh2Lm1haW5Wbm9kZS50YWcsIHYubWFpblZub2RlLnByb3BzLCBbdi5jb21wb25lbnRdKSBhcyBWbm9kZVdpdGhEb207XG4gICAgdi5tYWluVm5vZGUuZG9tID0gb2xkVm5vZGUuZG9tO1xuICAgIHBhdGNoKHYubWFpblZub2RlLCBvbGRWbm9kZSk7XG4gICAgb2xkVm5vZGUgPSBudWxsO1xuICAgIGlmICh2LmlzTW91bnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIG9uTW91bnRMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uTW91bnRMaXN0KTtcbiAgICAgIHYuaXNNb3VudGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25VcGRhdGVMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uVXBkYXRlTGlzdCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZUpzKSB7XG4gICAgICByZXR1cm4gdi5tYWluVm5vZGUuZG9tLmlubmVySFRNTDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudCgpOiB2b2lkIHwgc3RyaW5nIHtcbiAgaWYgKHYuaXNNb3VudGVkICYmIHYubWFpblZub2RlICYmIHYuY29tcG9uZW50KSB7XG4gICAgb25DbGVhbnVwTGlzdC5sZW5ndGggJiYgY2FsbENhbGxiYWNrTGlzdChvbkNsZWFudXBMaXN0KTtcbiAgICBvblVubW91bnRMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uVW5tb3VudExpc3QpO1xuICAgIGxldCBvbGRWbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IHYubWFpblZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgICB2Lm1haW5Wbm9kZSA9IG5ldyBWbm9kZSh2Lm1haW5Wbm9kZS50YWcsIHYubWFpblZub2RlLnByb3BzLCBbXSkgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHYubWFpblZub2RlLmRvbSA9IG9sZFZub2RlLmRvbTtcbiAgICB2Lm1haW5Wbm9kZS5pc1NWRyA9IG9sZFZub2RlLmlzU1ZHO1xuICAgIHBhdGNoKHYubWFpblZub2RlLCBvbGRWbm9kZSk7XG4gICAgb2xkVm5vZGUgPSBudWxsO1xuICAgIHYuY29tcG9uZW50ID0gbnVsbDtcbiAgICB2LmlzTW91bnRlZCA9IGZhbHNlO1xuICAgIGlmIChpc05vZGVKcykge1xuICAgICAgcmV0dXJuIHYubWFpblZub2RlLmRvbS5pbm5lckhUTUw7XG4gICAgfVxuICB9XG59XG5cbmxldCBlbXB0eVZub2RlID0gbmV3IFZub2RlKFwiX19lbXB0eV9fXCIsIHt9LCBbXSk7XG5cbmZ1bmN0aW9uIG9ucmVtb3ZlKHZub2RlOiBJVm5vZGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZub2RlLmNoaWxkcmVuW2ldLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZSh2bm9kZS5jaGlsZHJlbltpXSk7XG4gIH1cblxuICB2bm9kZS5wcm9wcy5vbnJlbW92ZSAmJiB2bm9kZS5wcm9wcy5vbnJlbW92ZSh2bm9kZSk7XG59XG5cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB8IGJvb2xlYW4ge1xuICAvLyBJdCBpcyBhIHJlc2VydmVkIHByb3BcbiAgaWYgKHJlc2VydmVkUHJvcHNbcHJvcF0pIHtcbiAgICAvLyBJZiBpdCBpcyBhIGRpcmVjdGl2ZSBuYW1lIGNhbGwgdGhlIGRpcmVjdGl2ZVxuICAgIGlmIChkaXJlY3RpdmVzW3Byb3BdKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aXZlc1twcm9wXSh2bm9kZS5wcm9wc1twcm9wXSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJdCBpcyBub3QgYSByZXNlcnZlZCBwcm9wIHNvIHdlIGFkZCBpdCB0byB0aGUgZG9tXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGlmIChwcm9wIGluIGV2ZW50TGlzdGVuZXJOYW1lcyA9PT0gZmFsc2UpIHtcbiAgICAgIGV2ZW50TGlzdGVuZXJOYW1lc1twcm9wXSA9IHRydWU7XG4gICAgICAodi5jb250YWluZXIgYXMgRG9tRWxlbWVudCkuYWRkRXZlbnRMaXN0ZW5lcihwcm9wLnNsaWNlKDIpLCBldmVudExpc3RlbmVyKTtcbiAgICB9XG4gICAgdm5vZGUuZG9tW2B2LSR7cHJvcH1gXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wIGluIHZub2RlLmRvbSAmJiB2bm9kZS5pc1NWRyA9PT0gZmFsc2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgaWYgKHZub2RlLmRvbVtwcm9wXSAhPSB2YWx1ZSkge1xuICAgICAgdm5vZGUuZG9tW3Byb3BdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFVzZSBzZXQgYXR0cmlidXRlXG4gIGlmICghb2xkVm5vZGUgfHwgb2xkVm5vZGUucHJvcHNbcHJvcF0gIT09IHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgdm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm5vZGUuZG9tLnNldEF0dHJpYnV0ZShwcm9wLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKSB7XG4gIHZub2RlLnByb3BzW25hbWVdID0gdmFsdWU7XG5cbiAgc2hhcmVkU2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKSB7XG4gIGZvciAobGV0IHByb3AgaW4gdm5vZGUucHJvcHMpIHtcbiAgICBpZiAoc2hhcmVkU2V0QXR0cmlidXRlKHByb3AsIHZub2RlLnByb3BzW3Byb3BdLCB2bm9kZSwgb2xkVm5vZGUpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbGRWbm9kZSkge1xuICAgIGZvciAobGV0IHByb3AgaW4gb2xkVm5vZGUucHJvcHMpIHtcbiAgICAgIGlmIChwcm9wIGluIHZub2RlLnByb3BzID09PSBmYWxzZSAmJiB0eXBlb2Ygb2xkVm5vZGUucHJvcHNbcHJvcF0gIT09IFwiZnVuY3Rpb25cIiAmJiBwcm9wIGluIHJlc2VydmVkUHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChwcm9wIGluIG9sZFZub2RlLmRvbSAmJiB2bm9kZS5pc1NWRyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBvbGRWbm9kZS5kb21bcHJvcF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9sZFZub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHBhdGNoKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBJVm5vZGUgPSBlbXB0eVZub2RlKSB7XG4gIGN1cnJlbnQudm5vZGUgPSBuZXdWbm9kZTtcbiAgY3VycmVudC5vbGRWbm9kZSA9IG9sZFZub2RlID09PSBlbXB0eVZub2RlID8gVW5kIDogKG9sZFZub2RlIGFzIFZub2RlV2l0aERvbSk7XG4gIGxldCBuZXdUcmVlID0gbmV3Vm5vZGUuY2hpbGRyZW47XG4gIGxldCBvbGRUcmVlID0gb2xkVm5vZGUuY2hpbGRyZW47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIGlmIChjaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZykge1xuICAgICAgICBpZiAoY2hpbGRWbm9kZS50YWcgPT09IENvbXBvbmVudFN0cmluZykge1xuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBjaGlsZFZub2RlLmNvbXBvbmVudCBhcyBWYWx5cmlhbkNvbXBvbmVudDtcbiAgICAgICAgICBjdXJyZW50LmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gKFwidmlld1wiIGluIGNvbXBvbmVudCA/IGNvbXBvbmVudC52aWV3IDogY29tcG9uZW50KS5jYWxsKGNvbXBvbmVudCwgY2hpbGRWbm9kZS5wcm9wcywgLi4uY2hpbGRWbm9kZS5jaGlsZHJlbik7XG5cbiAgICAgICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIHJlc3VsdCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRWbm9kZS5pc1NWRyA9IG5ld1Zub2RlLmlzU1ZHIHx8IGNoaWxkVm5vZGUudGFnID09PSBcInN2Z1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZFZub2RlKSkge1xuICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxLCAuLi5jaGlsZFZub2RlKTtcbiAgICB9IGVsc2UgaWYgKGNoaWxkVm5vZGUgPT09IG51bGwgfHwgY2hpbGRWbm9kZSA9PT0gVW5kKSB7XG4gICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdUcmVlW2ldID0gbmV3IFZub2RlKFRleHRTdHJpbmcsIHt9LCBbXSk7XG4gICAgICBuZXdUcmVlW2ldLm5vZGVWYWx1ZSA9IGNoaWxkVm5vZGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IG9sZFRyZWVMZW5ndGggPSBvbGRUcmVlLmxlbmd0aDtcbiAgbGV0IG5ld1RyZWVMZW5ndGggPSBuZXdUcmVlLmxlbmd0aDtcblxuICAvLyBJZiBuZXcgdHJlZSBpcyBlbXB0eSwgcmVtb3ZlIGFsbCBvbGQgbm9kZXNcbiAgaWYgKG5ld1RyZWVMZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgb2xkVHJlZVtpXS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgfVxuXG4gICAgbmV3Vm5vZGUuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiB0aGUgdHJlZSBpcyBrZXllZCBsaXN0IGFuZCBpcyBub3QgZmlyc3QgcmVuZGVyIGFuZCBvbGQgdHJlZSBpcyBrZXllZCBsaXN0IHRvb1xuICBpZiAob2xkVHJlZUxlbmd0aCAmJiBcImtleVwiIGluIG5ld1RyZWVbMF0ucHJvcHMgJiYgXCJrZXlcIiBpbiBvbGRUcmVlWzBdLnByb3BzKSB7XG4gICAgbGV0IG9sZEtleWVkTGlzdDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRLZXllZExpc3Rbb2xkVHJlZVtpXS5wcm9wcy5rZXldID0gaTtcbiAgICB9XG5cbiAgICBsZXQgbmV3S2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0tleWVkTGlzdFtuZXdUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG4gICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbb2xkS2V5ZWRMaXN0W2NoaWxkVm5vZGUucHJvcHMua2V5XV07XG4gICAgICBsZXQgc2hvdWxkUGF0Y2ggPSB0cnVlO1xuXG4gICAgICBpZiAob2xkQ2hpbGRWbm9kZSkge1xuICAgICAgICBjaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICBpZiAoXCJ2LW9uY2VcIiBpbiBjaGlsZFZub2RlLnByb3BzIHx8IChjaGlsZFZub2RlLnByb3BzLnNob3VsZHVwZGF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLnNob3VsZHVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGlzIHBhdGNoXG4gICAgICAgICAgY2hpbGRWbm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgc2hvdWxkUGF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRBdHRyaWJ1dGVzKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgIGlmICh2LmlzTW91bnRlZCkge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZFZub2RlLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQoY2hpbGRWbm9kZS50YWcsIGNoaWxkVm5vZGUuaXNTVkcpO1xuICAgICAgICBzZXRBdHRyaWJ1dGVzKGNoaWxkVm5vZGUpO1xuICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSA9PT0gVW5kKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChjaGlsZFZub2RlLmRvbSk7XG4gICAgICB9IGVsc2UgaWYgKG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzW2ldICE9PSBjaGlsZFZub2RlLmRvbSkge1xuICAgICAgICBvbGRUcmVlW2ldICYmIG5ld0tleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPT09IFVuZCAmJiBvbnJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChjaGlsZFZub2RlLmRvbSwgbmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgfVxuXG4gICAgICBzaG91bGRQYXRjaCAmJiBwYXRjaChjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGNoaWxkcmVuLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW1cbiAgICBmb3IgKGxldCBpID0gbmV3VHJlZUxlbmd0aDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5ld0tleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPT09IFVuZCkge1xuICAgICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbaV07XG4gICAgICAgIG9ucmVtb3ZlKG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlICYmIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkQ2hpbGRWbm9kZS5kb20pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIG5ldyB0cmVlIGFuZCBvbGQgdHJlZSBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQsIHdlIHNob3VsZCB1cGRhdGUgdGhlIGRvbVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgIGxldCBuZXdDaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcblxuICAgIC8vIE9sZCBjaGlsZCBleGlzdHNcbiAgICBpZiAoaSA8IG9sZFRyZWVMZW5ndGgpIHtcbiAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICAgIC8vIE5ldyBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgICAgaWYgKG5ld0NoaWxkVm5vZGUudGFnID09PSBUZXh0U3RyaW5nKSB7XG4gICAgICAgIC8vIE9sZCBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgICAgICBpZiAob2xkQ2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgICBpZiAobmV3Q2hpbGRWbm9kZS5kb20ubm9kZVZhbHVlICE9IG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICBuZXdDaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgPSBuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2xkIGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmcpIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgICAgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTmV3IGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICAgIC8vIE9sZCBjaGlsZCBpcyB0aGUgc2FtZSB0eXBlIGFzIG5ldyBjaGlsZFxuICAgICAgaWYgKG9sZENoaWxkVm5vZGUudGFnID09PSBuZXdDaGlsZFZub2RlLnRhZykge1xuICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdi1vbmNlIGRpcmVjdGl2ZSBvciBhIHNob3VsZHVwZGF0ZSBtZXRob2QgdGhhdCByZXR1cm5zIGZhbHNlLCB3ZSBza2lwIHRoZSB1cGRhdGVcbiAgICAgICAgaWYgKG5ld0NoaWxkVm5vZGUucHJvcHNbXCJ2LW9uY2VcIl0gfHwgKG5ld0NoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpID09PSBmYWxzZSkpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIHVwZGF0ZSB0aGUgZG9tIGVsZW1lbnRcbiAgICAgICAgc2V0QXR0cmlidXRlcyhuZXdDaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICAgICAgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZSAmJiBuZXdDaGlsZFZub2RlLnByb3BzLm9udXBkYXRlKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhdGNoKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gT2xkIGNoaWxkIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBuZXcgY2hpbGRcbiAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChuZXdDaGlsZFZub2RlLnRhZywgbmV3Q2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICBzZXRBdHRyaWJ1dGVzKG5ld0NoaWxkVm5vZGUpO1xuICAgICAgb2xkQ2hpbGRWbm9kZS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUobmV3Q2hpbGRWbm9kZSk7XG4gICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKG5ld0NoaWxkVm5vZGUuZG9tLCBvbGRDaGlsZFZub2RlLmRvbSk7XG4gICAgICBwYXRjaChuZXdDaGlsZFZub2RlLCBlbXB0eVZub2RlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIE9sZCBjaGlsZCBkb2VzIG5vdCBleGlzdHNcbiAgICAvLyBOZXcgY2hpbGQgaXMgYSB0ZXh0IG5vZGVcbiAgICBpZiAobmV3Q2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3Q2hpbGRWbm9kZS5ub2RlVmFsdWUgYXMgc3RyaW5nKSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnQ7XG4gICAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTmV3IGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICBuZXdDaGlsZFZub2RlLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQobmV3Q2hpbGRWbm9kZS50YWcsIG5ld0NoaWxkVm5vZGUuaXNTVkcpO1xuICAgIHNldEF0dHJpYnV0ZXMobmV3Q2hpbGRWbm9kZSk7XG4gICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKG5ld0NoaWxkVm5vZGUuZG9tKTtcbiAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUobmV3Q2hpbGRWbm9kZSk7XG4gICAgcGF0Y2gobmV3Q2hpbGRWbm9kZSwgZW1wdHlWbm9kZSk7XG4gIH1cblxuICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGNoaWxkcmVuLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW1cbiAgZm9yIChsZXQgaSA9IG5ld1RyZWVMZW5ndGg7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbaV07XG4gICAgb2xkQ2hpbGRWbm9kZS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgb2xkQ2hpbGRWbm9kZS5kb20ucGFyZW50Tm9kZSAmJiBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG9sZENoaWxkVm5vZGUuZG9tKTtcbiAgfVxufVxuXG4vKioqIERpcmVjdGl2ZXMgKioqL1xuXG5mdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBsZXQgZnVsbE5hbWUgPSBgdi0ke25hbWV9YDtcbiAgZGlyZWN0aXZlc1tmdWxsTmFtZV0gPSBkaXJlY3RpdmU7XG4gIHJlc2VydmVkUHJvcHNbZnVsbE5hbWVdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGlkZURpcmVjdGl2ZSh0ZXN0OiBib29sZWFuKTogRGlyZWN0aXZlIHtcbiAgcmV0dXJuIChib29sOiBib29sZWFuLCB2bm9kZTogSVZub2RlLCBvbGRWbm9kZT86IElWbm9kZSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IHRlc3QgPyBib29sIDogIWJvb2w7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsZXQgbmV3ZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICBpZiAob2xkVm5vZGUgJiYgb2xkVm5vZGUuZG9tICYmIG9sZFZub2RlLmRvbS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG9sZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRWbm9kZSk7XG4gICAgICAgIG9sZFZub2RlLmRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdkb20sIG9sZFZub2RlLmRvbSk7XG4gICAgICB9XG4gICAgICB2bm9kZS50YWcgPSBUZXh0U3RyaW5nO1xuICAgICAgdm5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHZub2RlLnByb3BzID0ge307XG4gICAgICB2bm9kZS5kb20gPSBuZXdkb20gYXMgdW5rbm93biBhcyBEb21FbGVtZW50O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgZGlyZWN0aXZlczogRGlyZWN0aXZlcyA9IHtcbiAgXCJ2LWlmXCI6IGhpZGVEaXJlY3RpdmUoZmFsc2UpLFxuICBcInYtdW5sZXNzXCI6IGhpZGVEaXJlY3RpdmUodHJ1ZSksXG4gIFwidi1mb3JcIjogKHNldDogdW5rbm93bltdLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSBzZXQubWFwKHZub2RlLmNoaWxkcmVuWzBdKTtcbiAgfSxcbiAgXCJ2LXNob3dcIjogKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAodm5vZGUuZG9tIGFzIHVua25vd24gYXMgeyBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfSB9KS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSxcbiAgXCJ2LWNsYXNzXCI6IChjbGFzc2VzOiB7IFt4OiBzdHJpbmddOiBib29sZWFuIH0sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBmb3IgKGxldCBuYW1lIGluIGNsYXNzZXMpIHtcbiAgICAgICh2bm9kZS5kb20gYXMgRG9tRWxlbWVudCkuY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCBjbGFzc2VzW25hbWVdKTtcbiAgICB9XG4gIH0sXG4gIFwidi1odG1sXCI6IChodG1sOiBzdHJpbmcsIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IFt0cnVzdChodG1sKV07XG4gIH0sXG4gIFwidi1tb2RlbFwiOiAoW21vZGVsLCBwcm9wZXJ0eSwgZXZlbnRdOiBhbnlbXSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBsZXQgdmFsdWU7XG4gICAgbGV0IGhhbmRsZXI7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBldmVudCA9IGV2ZW50IHx8IFwib25pbnB1dFwiO1xuICAgICAgc3dpdGNoICh2bm9kZS5wcm9wcy50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJjaGVja2JveFwiOiB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxbcHJvcGVydHldKSkge1xuICAgICAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdmFsID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZTtcbiAgICAgICAgICAgICAgbGV0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YWx1ZSA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZub2RlLmRvbS52YWx1ZSkgIT09IC0xO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIHZub2RlLnByb3BzKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAobW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XSA9IG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gdm5vZGUucHJvcHMudmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YWx1ZSA9IG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUucHJvcHMudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiAobW9kZWxbcHJvcGVydHldID0gIW1vZGVsW3Byb3BlcnR5XSk7XG4gICAgICAgICAgICB2YWx1ZSA9IG1vZGVsW3Byb3BlcnR5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB2YWx1ZSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmFkaW9cIjoge1xuICAgICAgICAgIHNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5kb20udmFsdWUsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHNldEF0dHJpYnV0ZShcInZhbHVlXCIsIG1vZGVsW3Byb3BlcnR5XSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodm5vZGUudGFnID09PSBcInNlbGVjdFwiKSB7XG4gICAgICBldmVudCA9IGV2ZW50IHx8IFwib25jbGlja1wiO1xuICAgICAgaWYgKHZub2RlLnByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgIGhhbmRsZXIgPSAoZTogRXZlbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICAgICAgbGV0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKDAsIG1vZGVsW3Byb3BlcnR5XS5sZW5ndGgpO1xuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBJVm5vZGUpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogSVZub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gXCJvcHRpb25cIikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gXCJ2YWx1ZVwiIGluIGNoaWxkLnByb3BzID8gY2hpbGQucHJvcHMudmFsdWUgOiBjaGlsZC5jaGlsZHJlbi5qb2luKFwiXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnNlbGVjdGVkID0gdmFsdWUgPT09IG1vZGVsW3Byb3BlcnR5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodm5vZGUudGFnID09PSBcInRleHRhcmVhXCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmlucHV0XCI7XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFttb2RlbFtwcm9wZXJ0eV1dO1xuICAgIH1cblxuICAgIGlmICghdm5vZGUucHJvcHNbZXZlbnRdKSB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWUpO1xuICAgICAgfVxuICAgICAgc2V0QXR0cmlidXRlKGV2ZW50LCBoYW5kbGVyLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqKiBQbHVnaW5zICoqKi9cbmNvbnN0IHBsdWdpbnMgPSBuZXcgTWFwPFBsdWdpbiwgYW55PigpO1xuXG5mdW5jdGlvbiB1c2UocGx1Z2luOiBQbHVnaW4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhbnk+KTogdm9pZCB8IGFueSB7XG4gIGlmIChwbHVnaW5zLmhhcyhwbHVnaW4pKSB7XG4gICAgcmV0dXJuIHBsdWdpbnMuZ2V0KHBsdWdpbik7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gcGx1Z2luKHYsIG9wdGlvbnMpO1xuICBwbHVnaW5zLnNldChwbHVnaW4sIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiogSHlwZXJzY3JpcHQgKioqL1xuXG5jb25zdCB2OiBWYWx5cmlhbiA9IGZ1bmN0aW9uIHYodGFnT3JDb21wb25lbnQ6IHN0cmluZyB8IFZhbHlyaWFuQ29tcG9uZW50LCBwcm9wczogUHJvcHMsIC4uLmNoaWxkcmVuOiBDaGlsZHJlbik6IElWbm9kZSB8IFZub2RlQ29tcG9uZW50IHtcbiAgaWYgKHR5cGVvZiB0YWdPckNvbXBvbmVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBuZXcgVm5vZGUodGFnT3JDb21wb25lbnQsIHByb3BzIHx8IHt9LCBjaGlsZHJlbik7XG4gIH1cblxuICBjb25zdCB2bm9kZSA9IG5ldyBWbm9kZShcIl9fY29tcG9uZW50X19cIiwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgdm5vZGUuY29tcG9uZW50ID0gdGFnT3JDb21wb25lbnQ7XG4gIHJldHVybiB2bm9kZSBhcyBWbm9kZUNvbXBvbmVudDtcbn07XG5cbnYuZnJhZ21lbnQgPSAocHJvcHM6IFByb3BzLCAuLi5jaGlsZHJlbjogQ2hpbGRyZW4pOiBDaGlsZHJlbiA9PiB7XG4gIHJldHVybiBjaGlsZHJlbjtcbn07XG5cbi8qKiogViBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzICoqKi9cbi8vIFRoaXMgaXMgaW50ZW5kZWQgdG8gbWFrZSB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBhdmFpbGFibGUgZm9yIHBsdWdpbnNcbnYuY3VycmVudCA9IGN1cnJlbnQ7XG5cbnYuZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXM7XG5cbnYucmVzZXJ2ZWRQcm9wcyA9IHJlc2VydmVkUHJvcHM7XG5cbnYuaXNWbm9kZSA9IGlzVm5vZGU7XG52LmlzQ29tcG9uZW50ID0gaXNDb21wb25lbnQ7XG52LmlzVm5vZGVDb21wb25lbnQgPSBpc1Zub2RlQ29tcG9uZW50O1xuXG52LmlzTW91bnRlZCA9IGZhbHNlO1xudi5pc05vZGVKcyA9IGlzTm9kZUpzO1xudi50cnVzdCA9IHRydXN0O1xuXG52Lm9uQ2xlYW51cCA9IG9uQ2xlYW51cDtcbnYub25Vbm1vdW50ID0gb25Vbm1vdW50O1xudi5vbk1vdW50ID0gb25Nb3VudDtcbnYub25VcGRhdGUgPSBvblVwZGF0ZTtcblxudi5tb3VudCA9IG1vdW50O1xudi51bm1vdW50ID0gdW5tb3VudDtcbnYudXBkYXRlID0gdXBkYXRlO1xuXG52LnNldEF0dHJpYnV0ZSA9IHNldEF0dHJpYnV0ZTtcbnYuZGlyZWN0aXZlID0gZGlyZWN0aXZlO1xudi51c2UgPSB1c2U7XG5cbmV4cG9ydCBkZWZhdWx0IHY7XG4iXX0=
File without changes
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "valyrian.js",
3
- "version": "6.0.7",
3
+ "version": "6.0.8",
4
4
  "description": "Lightweight steel to forge PWAs. (Minimal Frontend Framework with server side rendering and other capabilities)",
5
5
  "sideEffects": false,
6
6
  "source": "lib/index.ts",
7
7
  "main": "dist/index.cjs",
8
- "module": "dist/index.js",
8
+ "module": "dist/index.mjs",
9
9
  "unpkg": "dist/index.cjs",
10
10
  "browser": "dist/index.min.js",
11
11
  "types": "dist/@types/lib/index.d.ts",
@@ -58,7 +58,7 @@
58
58
  "dependencies": {
59
59
  "clean-css": "^5.2.4",
60
60
  "esbuild": "^0.14.22",
61
- "favicons": "^6.2.2",
61
+ "favicons": "^7.0.0-beta.4",
62
62
  "form-data": "^4.0.0",
63
63
  "node-fetch": "2.6.7",
64
64
  "parse5": "^6.0.1",
@@ -78,7 +78,7 @@
78
78
  "buffalo-test": "^2.0.0",
79
79
  "compression": "^1.7.4",
80
80
  "cross-env": "^7.0.3",
81
- "cz-conventional-changelog": "3.3.0",
81
+ "cz-conventional-changelog": "^3.3.0",
82
82
  "dayjs": "^1.10.7",
83
83
  "eslint": "^8.9.0",
84
84
  "eslint-plugin-sonarjs": "^0.11.0",
@@ -92,10 +92,8 @@
92
92
  "remark-cli": "^10.0.1",
93
93
  "remark-toc": "^8.0.1"
94
94
  },
95
- "resolutions": {
96
- "jpeg-js": "^0.4.0",
97
- "minimist": "^0.2.1",
98
- "ansi-regex": "^5.0.1"
95
+ "overrides": {
96
+ "minimist": "^1.2.6"
99
97
  },
100
98
  "nyc": {
101
99
  "exclude": [
@@ -184,13 +182,13 @@
184
182
  },
185
183
  "hooks": {
186
184
  "before:init": [
187
- "yarn test"
185
+ "npm run test"
188
186
  ],
189
187
  "after:bump": [
190
- "yarn build"
188
+ "npm run build"
191
189
  ],
192
190
  "after:@release-it/conventional-changelog": [
193
- "yarn remark"
191
+ "npm run remark"
194
192
  ]
195
193
  }
196
194
  },
package/plugins/hooks.js CHANGED
@@ -119,8 +119,18 @@ const useRef = createHook({
119
119
  });
120
120
 
121
121
  const useCallback = createHook({
122
- create: (callback) => {
123
- return callback;
122
+ create: (callback, changes) => {
123
+ callback();
124
+ return { callback, changes };
125
+ },
126
+ update: (hook, callback, changes) => {
127
+ for (let i = 0, l = changes.length; i < l; i++) {
128
+ if (changes[i] !== hook.changes[i]) {
129
+ hook.changes = changes;
130
+ hook.callback();
131
+ return;
132
+ }
133
+ }
124
134
  }
125
135
  });
126
136
 
package/plugins/node.js CHANGED
@@ -189,9 +189,11 @@ function sw(file, options = {}) {
189
189
  }
190
190
 
191
191
  function icons(source, configuration = {}) {
192
- let favicons = require("favicons"),
192
+ let { default: favicons } = require("favicons"),
193
193
  options = Object.assign({}, icons.options, configuration);
194
194
 
195
+ console.log(favicons);
196
+
195
197
  if (options.iconsPath) {
196
198
  options.iconsPath = options.iconsPath.replace(/\/$/gi, "") + "/";
197
199
  }
package/plugins/router.js CHANGED
@@ -77,7 +77,7 @@ function searchMiddlewares(router, path) {
77
77
  matches.push(match.shift());
78
78
  }
79
79
 
80
- if (item.method === "get") {
80
+ if (item.method === "add") {
81
81
  router.path = item.path;
82
82
  break;
83
83
  }
@@ -97,7 +97,11 @@ async function searchComponent(router, middlewares) {
97
97
  query: router.query,
98
98
  url: router.url,
99
99
  path: router.path,
100
- matches: router.matches
100
+ matches: router.matches,
101
+ redirect: (...args) => {
102
+ router.go(...args);
103
+ return false;
104
+ }
101
105
  };
102
106
  let i = 0;
103
107
 
@@ -107,6 +111,10 @@ async function searchComponent(router, middlewares) {
107
111
  if (response !== undefined && (router.v.isComponent(response) || router.v.isVnodeComponent(response))) {
108
112
  return response;
109
113
  }
114
+
115
+ if (response === false) {
116
+ return false;
117
+ }
110
118
  }
111
119
  }
112
120
 
@@ -120,8 +128,8 @@ class Router {
120
128
  params = {};
121
129
  matches = [];
122
130
 
123
- get(path, ...args) {
124
- addPath(this, "get", path, args);
131
+ add(path, ...args) {
132
+ addPath(this, "add", path, args);
125
133
  return this;
126
134
  }
127
135
 
@@ -152,7 +160,7 @@ class Router {
152
160
  routes() {
153
161
  let routes = [];
154
162
  this.paths.forEach((path) => {
155
- if (path.method === "get") {
163
+ if (path.method === "add") {
156
164
  routes.push(path.path);
157
165
  }
158
166
  });
@@ -174,6 +182,10 @@ class Router {
174
182
 
175
183
  let component = await searchComponent(this, middlewares);
176
184
 
185
+ if (component === false) {
186
+ return;
187
+ }
188
+
177
189
  if (!component) {
178
190
  throw new Error(`The url ${path} requested wasn't found`);
179
191
  }