valyrian.js 6.0.3 → 6.0.4
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 +15 -11
- package/dist/index.js +15 -11
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/lib/index.ts +23 -20
- package/package.json +1 -1
- package/plugins/router.js +17 -15
package/dist/index.cjs
CHANGED
|
@@ -49,18 +49,22 @@ function createDomElement(tag, isSVG = false) {
|
|
|
49
49
|
return isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tag) : document.createElement(tag);
|
|
50
50
|
}
|
|
51
51
|
function domToVnode(dom) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
if (dom.nodeType === 1 || dom.nodeType === 3) {
|
|
53
|
+
let vnode = v(dom.tagName.toLowerCase(), {}, ...Array.from(dom.childNodes).filter((child) => child.nodeType === 1 || child.nodeType === 3).map((child) => {
|
|
54
|
+
if (child.nodeType === 1) {
|
|
55
|
+
return domToVnode(child);
|
|
56
|
+
}
|
|
57
|
+
let text = new Vnode(TextString, {}, []);
|
|
58
|
+
text.nodeValue = String(child.nodeValue);
|
|
59
|
+
text.dom = child;
|
|
60
|
+
return text;
|
|
61
|
+
}));
|
|
62
|
+
if (dom.nodeType === 1) {
|
|
63
|
+
[].forEach.call(dom.attributes, (prop) => vnode.props[prop.nodeName] = prop.nodeValue);
|
|
55
64
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return text;
|
|
60
|
-
}));
|
|
61
|
-
[].forEach.call(dom.attributes, (prop) => vnode.props[prop.nodeName] = prop.nodeValue);
|
|
62
|
-
vnode.dom = dom;
|
|
63
|
-
return vnode;
|
|
65
|
+
vnode.dom = dom;
|
|
66
|
+
return vnode;
|
|
67
|
+
}
|
|
64
68
|
}
|
|
65
69
|
var trust = (htmlString) => {
|
|
66
70
|
let div = createDomElement("div");
|
package/dist/index.js
CHANGED
|
@@ -22,18 +22,22 @@ function createDomElement(tag, isSVG = false) {
|
|
|
22
22
|
return isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tag) : document.createElement(tag);
|
|
23
23
|
}
|
|
24
24
|
function domToVnode(dom) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if (dom.nodeType === 1 || dom.nodeType === 3) {
|
|
26
|
+
let vnode = v(dom.tagName.toLowerCase(), {}, ...Array.from(dom.childNodes).filter((child) => child.nodeType === 1 || child.nodeType === 3).map((child) => {
|
|
27
|
+
if (child.nodeType === 1) {
|
|
28
|
+
return domToVnode(child);
|
|
29
|
+
}
|
|
30
|
+
let text = new Vnode(TextString, {}, []);
|
|
31
|
+
text.nodeValue = String(child.nodeValue);
|
|
32
|
+
text.dom = child;
|
|
33
|
+
return text;
|
|
34
|
+
}));
|
|
35
|
+
if (dom.nodeType === 1) {
|
|
36
|
+
[].forEach.call(dom.attributes, (prop) => vnode.props[prop.nodeName] = prop.nodeValue);
|
|
28
37
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return text;
|
|
33
|
-
}));
|
|
34
|
-
[].forEach.call(dom.attributes, (prop) => vnode.props[prop.nodeName] = prop.nodeValue);
|
|
35
|
-
vnode.dom = dom;
|
|
36
|
-
return vnode;
|
|
38
|
+
vnode.dom = dom;
|
|
39
|
+
return vnode;
|
|
40
|
+
}
|
|
37
41
|
}
|
|
38
42
|
var trust = (htmlString) => {
|
|
39
43
|
let div = createDomElement("div");
|
package/dist/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e="__component__",n="#text",o=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),t=Symbol("Valyrian"),r=void 0,
|
|
1
|
+
(()=>{var e="__component__",n="#text",o=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),t=Symbol("Valyrian"),r=void 0,p=function(e,n,o){this.props=n,this.children=o,this.tag=e};function i(e){return"function"==typeof e||"object"==typeof e&&null!==e&&"view"in e}function d(n){return n instanceof p&&n.tag===e}function l(e,n=!1){return n?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function a(e){if(1===e.nodeType||3===e.nodeType){let o=U(e.tagName.toLowerCase(),{},...Array.from(e.childNodes).filter(e=>1===e.nodeType||3===e.nodeType).map(e=>{if(1===e.nodeType)return a(e);let o=new p(n,{},[]);return o.nodeValue=String(e.nodeValue),o.dom=e,o}));return 1===e.nodeType&&[].forEach.call(e.attributes,e=>o.props[e.nodeName]=e.nodeValue),o.dom=e,o}}var s=e=>{let n=l("div");return n.innerHTML=e.trim(),[].map.call(n.childNodes,e=>a(e))},u={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},c={};function m(e){for(let n=0;n<e.onCleanup.length;n++)e.onCleanup[n]();e.onCleanup=[]}function f(e){if(e&&e[t]){let n=e[t];c.app=n,n.onCleanup.length&&m(n);let r=n.mainVnode;if(n.mainVnode=new p(n.mainVnode.tag,n.mainVnode.props,[n.component]),n.mainVnode.dom=r.dom,w(n.mainVnode,r,n),r=null,!1===n.isMounted?(n.onMount.length&&function(e){for(let n=0;n<e.onMount.length;n++)e.onMount[n]();e.onMount=[]}(n),n.isMounted=!0):n.onUpdate.length&&function(e){for(let n=0;n<e.onUpdate.length;n++)e.onUpdate[n]();e.onUpdate=[]}(n),o)return n.mainVnode.dom.innerHTML}}function h(e){if(!e||!e[t])return;let n=e[t];if(n.isMounted){n.onCleanup.length&&m(n),n.onUnmount.length&&function(e){for(let n=0;n<e.onUnmount.length;n++)e.onUnmount[n]();e.onUnmount=[]}(n);let r=n.mainVnode;if(n.mainVnode=new p(n.mainVnode.tag,n.mainVnode.props,[]),n.mainVnode.dom=r.dom,n.mainVnode.isSVG=r.isSVG,w(n.mainVnode,r,n),r=null,o)return n.mainVnode.dom.innerHTML;n=null,Reflect.deleteProperty(e,t)}}var v=new p("__empty__",{},[]);function g(e){for(let o=0;o<e.children.length;o++)e.children[o].tag!==n&&g(e.children[o]);e.props.onremove&&e.props.onremove(e)}function V(e,n,o,t){if(u[e])return M[e]?M[e](o.props[e],o,t):void 0;if("function"==typeof n){let t=c.app;return e in t.eventListenerNames==!1&&(t.eventListenerNames[e]=!0,t.container.addEventListener(e.slice(2),t.eventListener)),void(o.dom[`v-${e}`]=n)}e in o.dom&&!1===o.isSVG?o.dom[e]!=n&&(o.dom[e]=n):t&&t.props[e]===n||(!1===n?o.dom.removeAttribute(e):o.dom.setAttribute(e,n))}function y(e,n,o,t){o.props[e]=n,V(e,n,o,t)}function C(e,n){for(let o in e.props)if(!1===V(o,e.props[o],e,n))return;if(n)for(let o in n.props)o in e.props==!1&&"function"!=typeof n.props[o]&&o in u==!1&&(o in n.dom&&!1===e.isSVG?n.dom[o]=null:n.dom.removeAttribute(o))}function w(o,t=v,i){c.vnode=o,c.oldVnode=t===v?r:t;let d=o.children,a=t.children;for(let t=0;t<d.length;t++){let i=d[t];if(i instanceof p){if(i.tag!==n){if(i.tag===e){let e=i.component;c.component=e;let n=("view"in e?e.view:e).call(e,i.props,...i.children);d.splice(t--,1,n);continue}i.isSVG=o.isSVG||"svg"===i.tag}}else Array.isArray(i)?d.splice(t--,1,...i):null===i||i===r?d.splice(t--,1):(d[t]=new p(n,{},[]),d[t].nodeValue=i)}let s=a.length,u=d.length;if(0!==u)if(s&&"key"in d[0].props&&"key"in a[0].props){let e={};for(let n=0;n<s;n++)e[a[n].props.key]=n;let n={};for(let e=0;e<u;e++)n[d[e].props.key]=e;for(let t=0;t<u;t++){let p=d[t],s=a[e[p.props.key]],u=!0;s?(p.dom=s.dom,"v-once"in p.props||p.props.shouldupdate&&!1===p.props.shouldupdate(p,s)?(p.children=s.children,u=!1):(C(p,s),i.isMounted?p.props.onupdate&&p.props.onupdate(p,s):p.props.oncreate&&p.props.oncreate(p))):(p.dom=l(p.tag,p.isSVG),C(p),p.props.oncreate&&p.props.oncreate(p)),o.dom.childNodes[t]===r?o.dom.appendChild(p.dom):o.dom.childNodes[t]!==p.dom&&(a[t]&&n[a[t].props.key]===r&&g(a[t]),o.dom.replaceChild(p.dom,o.dom.childNodes[t])),u&&w(p,s,i)}for(let e=u;e<s;e++)if(n[a[e].props.key]===r){let n=a[e];g(n),n.dom.parentNode&&n.dom.parentNode.removeChild(n.dom)}}else{for(let e=0;e<u;e++){let t=d[e];if(e<s){let r=a[e];if(t.tag===n){if(r.tag===n){t.dom=r.dom,t.dom.nodeValue!=t.nodeValue&&(t.dom.nodeValue=t.nodeValue);continue}t.dom=document.createTextNode(t.nodeValue),g(r),o.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}C(t,r),i.isMounted?t.props.onupdate&&t.props.onupdate(t,r):t.props.oncreate&&t.props.oncreate(t),w(t,r,i);continue}t.dom=l(t.tag,t.isSVG),C(t),r.tag!==n&&g(r),t.props.oncreate&&t.props.oncreate(t),o.dom.replaceChild(t.dom,r.dom),w(t,v,i)}else t.tag!==n?(t.dom=l(t.tag,t.isSVG),C(t),o.dom.appendChild(t.dom),t.props.oncreate&&t.props.oncreate(t),w(t,v,i)):(t.dom=document.createTextNode(t.nodeValue),o.dom.appendChild(t.dom))}for(let e=u;e<s;e++){let o=a[e];o.tag!==n&&g(o),o.dom.parentNode&&o.dom.parentNode.removeChild(o.dom)}}else{for(let e=0;e<s;e++)a[e].tag!==n&&g(a[e]);o.dom.textContent=""}}function N(e){return(o,t,r)=>{if(e?o:!o){let e=document.createTextNode("");return r&&r.dom&&r.dom.parentNode&&(r.tag!==n&&g(r),r.dom.parentNode.replaceChild(e,r.dom)),t.tag=n,t.children=[],t.props={},t.dom=e,!1}}}var M={"v-if":N(!1),"v-unless":N(!0),"v-for":(e,n)=>{n.children=e.map(n.children[0])},"v-show":(e,n)=>{n.dom.style.display=e?"":"none"},"v-class":(e,n)=>{for(let o in e)n.dom.classList.toggle(o,e[o])},"v-html":(e,n)=>{n.children=[s(e)]},"v-model":([e,n,o],t,r)=>{let p,i;if("input"===t.name)switch(o=o||"oninput",t.props.type){case"checkbox":Array.isArray(e[n])?(i=o=>{let t=o.target.value,r=e[n].indexOf(t);-1===r?e[n].push(t):e[n].splice(r,1)},p=-1!==e[n].indexOf(t.dom.value)):"value"in t.props?(i=()=>{e[n]===t.props.value?e[n]=null:e[n]=t.props.value},p=e[n]===t.props.value):(i=()=>e[n]=!e[n],p=e[n]),y("checked",p,t,r);break;case"radio":y("checked",e[n]===t.dom.value,t,r);break;default:y("value",e[n],t,r)}else"select"===t.name?(o=o||"onclick",t.props.multiple?(i=o=>{let t=o.target.value;if(o.ctrlKey){let o=e[n].indexOf(t);-1===o?e[n].push(t):e[n].splice(o,1)}else e[n].splice(0,e[n].length),e[n].push(t)},t.children.forEach(o=>{if("option"===o.tag){let t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=-1!==e[n].indexOf(t)}})):t.children.forEach(o=>{if("option"===o.tag){let t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=t===e[n]}})):"textarea"===t.name&&(o=o||"oninput",t.children=[e[n]]);t.props[o]||(i||(i=o=>e[n]=o.target.value),y(o,i,t,r))}},x=new Map;var U=function(e,n,...o){if("string"==typeof e)return new p(e,n||{},o);const t=new p("__component__",n||{},o);return t.component=e,t};U.fragment=(e,...n)=>n,U.current=c,U.directives=M,U.reservedProps=u,U.isVnode=function(e){return e instanceof p},U.isComponent=i,U.isVnodeComponent=d,U.isNodeJs=o,U.trust=s,U.onCleanup=function(e){-1===c.app?.onCleanup.indexOf(e)&&c.app?.onCleanup.push(e)},U.onUnmount=function(e){-1===c.app?.onUnmount.indexOf(e)&&c.app?.onUnmount.push(e)},U.onMount=function(e){-1===c.app?.onMount.indexOf(e)&&c.app?.onMount.push(e)},U.onUpdate=function(e){-1===c.app?.onUpdate.indexOf(e)&&c.app?.onUpdate.push(e)},U.mount=function(e,n){let r,p=null;if(p=o?"string"==typeof e?l("svg"===e?"svg":"div","svg"===e):e:"string"==typeof e?document.querySelectorAll(e)[0]:e,!p)throw new Error("Container not found");if(d(n))r=n;else{if(!i(n))throw new Error("Component must be a Valyrian Component or a Vnode component");r=U(n,{})}if(n[t])h(n);else{let e=function(e){let o=e.target,t=`v-on${e.type}`;for(;o;){if(o[t])return o[t](e,o),void(e.defaultPrevented||f(n));o=o.parentNode}};n[t]={isMounted:!1,eventListenerNames:{},onCleanup:[],onMount:[],onUpdate:[],onUnmount:[]},n[t].eventListener=e}return n[t].component=r,n[t].container=p,n[t].mainVnode=a(p),f(n)},U.unmount=h,U.update=f,U.setAttribute=y,U.directive=function(e,n){let o=`v-${e}`;M[o]=n,u[o]=!0},U.use=function(e,n){if(x.has(e))return x.get(e);let o=e(U,n);return x.set(e,o),o};var k={v:U};"undefined"!=typeof module?module.exports=k:self.Valyrian=k})();
|
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJDb21wb25lbnRTdHJpbmciLCJUZXh0U3RyaW5nIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsIlZhbHlyaWFuU3ltYm9sIiwiU3ltYm9sIiwiVW5kIiwiVm5vZGUiLCJ0YWciLCJwcm9wcyIsImNoaWxkcmVuIiwidGhpcyIsImlzQ29tcG9uZW50IiwiY29tcG9uZW50IiwiaXNWbm9kZUNvbXBvbmVudCIsInZub2RlIiwiY3JlYXRlRG9tRWxlbWVudCIsImlzU1ZHIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVFbGVtZW50IiwiZG9tVG9Wbm9kZSIsImRvbSIsInYiLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImZyb20iLCJjaGlsZE5vZGVzIiwiZmlsdGVyIiwiY2hpbGQiLCJub2RlVHlwZSIsIm1hcCIsInRleHQiLCJub2RlVmFsdWUiLCJTdHJpbmciLCJmb3JFYWNoIiwiY2FsbCIsImF0dHJpYnV0ZXMiLCJwcm9wIiwibm9kZU5hbWUiLCJ0cnVzdCIsImh0bWxTdHJpbmciLCJkaXYiLCJpbm5lckhUTUwiLCJ0cmltIiwiaXRlbSIsInJlc2VydmVkUHJvcHMiLCJrZXkiLCJzdGF0ZSIsIm9uY3JlYXRlIiwib251cGRhdGUiLCJvbnJlbW92ZSIsInNob3VsZHVwZGF0ZSIsImN1cnJlbnQiLCJjYWxsQ2xlYW51cCIsInZhbHlyaWFuQXBwIiwiaSIsIm9uQ2xlYW51cCIsImxlbmd0aCIsInVwZGF0ZSIsImFwcCIsIm9sZFZub2RlIiwibWFpblZub2RlIiwicGF0Y2giLCJpc01vdW50ZWQiLCJvbk1vdW50IiwiY2FsbE1vdW50Iiwib25VcGRhdGUiLCJjYWxsVXBkYXRlIiwidW5tb3VudCIsIm9uVW5tb3VudCIsImNhbGxVbm1vdW50IiwiUmVmbGVjdCIsImRlbGV0ZVByb3BlcnR5IiwiZW1wdHlWbm9kZSIsInNoYXJlZFNldEF0dHJpYnV0ZSIsInZhbHVlIiwiZGlyZWN0aXZlcyIsImV2ZW50TGlzdGVuZXJOYW1lcyIsImNvbnRhaW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzbGljZSIsImV2ZW50TGlzdGVuZXIiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJuYW1lIiwic2V0QXR0cmlidXRlcyIsIm5ld1Zub2RlIiwibmV3VHJlZSIsIm9sZFRyZWUiLCJjaGlsZFZub2RlIiwicmVzdWx0IiwidmlldyIsInNwbGljZSIsImlzQXJyYXkiLCJvbGRUcmVlTGVuZ3RoIiwibmV3VHJlZUxlbmd0aCIsIm9sZEtleWVkTGlzdCIsIm5ld0tleWVkTGlzdCIsIm9sZENoaWxkVm5vZGUiLCJzaG91bGRQYXRjaCIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwibmV3Q2hpbGRWbm9kZSIsImNyZWF0ZVRleHROb2RlIiwidGV4dENvbnRlbnQiLCJoaWRlRGlyZWN0aXZlIiwidGVzdCIsImJvb2wiLCJuZXdkb20iLCJzZXQiLCJzdHlsZSIsImRpc3BsYXkiLCJjbGFzc2VzIiwiY2xhc3NMaXN0IiwidG9nZ2xlIiwiaHRtbCIsIm1vZGVsIiwicHJvcGVydHkiLCJldmVudCIsImhhbmRsZXIiLCJ0eXBlIiwiZSIsInZhbCIsInRhcmdldCIsImlkeCIsImluZGV4T2YiLCJwdXNoIiwibXVsdGlwbGUiLCJjdHJsS2V5IiwidmFsdWUyIiwiam9pbiIsInNlbGVjdGVkIiwicGx1Z2lucyIsIk1hcCIsInRhZ09yQ29tcG9uZW50IiwiZnJhZ21lbnQiLCJpc1Zub2RlIiwib2JqZWN0IiwiY2FsbGJhY2siLCJtb3VudCIsInZub2RlQ29tcG9uZW50IiwiYXBwQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsIkVycm9yIiwiZGVmYXVsdFByZXZlbnRlZCIsImRpcmVjdGl2ZSIsImRpcmVjdGl2ZTIiLCJmdWxsTmFtZSIsInVzZSIsInBsdWdpbiIsIm9wdGlvbnMiLCJoYXMiLCJn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Q3JCLElBQUl2RyxFQUFNdUcsRUFBRUUsT0FDUnpDLEVBQU8sT0FBT3VDLEVBQUVELE9BQ3BCLEtBQU90RyxHQUFLLENBQ1YsR0FBSUEsRUFBSWdFLEdBS04sT0FKQWhFLEVBQUlnRSxHQUFNdUMsRUFBR3ZHLFFBQ1J1RyxFQUFFdUIsa0JBQ0x4RixFQUFPL0MsSUFJWFMsRUFBTUEsRUFBSWtGLGFBbkJkM0YsRUFBVVQsR0FBa0IsQ0FDMUI2RCxXQUFXLEVBQ1hjLG1CQUFvQixHQUNwQnJCLFVBQVcsR0FDWFEsUUFBUyxHQUNURSxTQUFVLEdBQ1ZHLFVBQVcsSUFnQmIxRCxFQUFVVCxHQUFnQitFLGNBQWdCQSxFQVE1QyxPQUxBdEUsRUFBVVQsR0FBZ0JTLFVBQVltSSxFQUN0Q25JLEVBQVVULEdBQWdCNEUsVUFBWWlFLEVBQ3RDcEksRUFBVVQsR0FBZ0IyRCxVQUFZMUMsRUFBVzRILEdBRzFDckYsRUFBTy9DLElBMGdCaEJVLEVBQUUrQyxRQUFVQSxFQUNaL0MsRUFBRXFDLE9BQVNBLEVBRVhyQyxFQUFFOEQsYUFBZUEsRUFDakI5RCxFQUFFOEgsVUF0TEYsU0FBbUIvRCxFQUFjZ0UsR0FDL0IsSUFBSUMsRUFBVyxLQUFLakUsSUFDcEJSLEVBQVd5RSxHQUFZRCxFQUN2QnZHLEVBQWN3RyxJQUFZLEdBb0w1QmhJLEVBQUVpSSxJQXBERixTQUFhQyxFQUFnQkMsR0FDM0IsR0FBSWxCLEVBQVFtQixJQUFJRixHQUNkLE9BQU9qQixFQUFRb0IsSUFBSUgsR0FHckIsSUFBSTdELEVBQVM2RCxFQUFPbEksRUFBR21JLEdBRXZCLE9BREFsQixFQUFRdkIsSUFBSXdDLEVBQVE3RCxHQUNiQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5ICovXG4vKioqIFZub2RlICoqKi9cblxuaW1wb3J0IHtcbiAgQ2hpbGRyZW4sXG4gIEN1cnJlbnQsXG4gIERpcmVjdGl2ZSxcbiAgRGlyZWN0aXZlcyxcbiAgRG9tRWxlbWVudCxcbiAgSVZub2RlLFxuICBNb3VudGVkVmFseXJpYW5BcHAsXG4gIFBsdWdpbixcbiAgUHJvcHMsXG4gIFJlc2VydmVkUHJvcHMsXG4gIFZhbHlyaWFuLFxuICBWYWx5cmlhbkFwcCxcbiAgVmFseXJpYW5Db21wb25lbnQsXG4gIFZub2RlQ29tcG9uZW50LFxuICBWbm9kZVdpdGhEb21cbn0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vKioqIENvbnN0YW50cyAqKiovXG5jb25zdCBDb21wb25lbnRTdHJpbmcgPSBcIl9fY29tcG9uZW50X19cIjtcbmNvbnN0IFRleHRTdHJpbmcgPSBcIiN0ZXh0XCI7XG5jb25zdCBpc05vZGVKcyA9IEJvb2xlYW4odHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuY29uc3QgVmFseXJpYW5TeW1ib2wgPSBTeW1ib2woXCJWYWx5cmlhblwiKTtcbmNvbnN0IFVuZCA9IHVuZGVmaW5lZDtcblxuLyoqKiBWbm9kZSAqKiovXG5cbmNvbnN0IFZub2RlID0gZnVuY3Rpb24gVm5vZGUodGhpczogSVZub2RlLCB0YWc6IHN0cmluZywgcHJvcHM6IFByb3BzLCBjaGlsZHJlbjogQ2hpbGRyZW4pIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIHRoaXMudGFnID0gdGFnO1xufSBhcyB1bmtub3duIGFzIElWbm9kZTtcblxuZnVuY3Rpb24gaXNWbm9kZShvYmplY3Q/OiB1bmtub3duIHwgSVZub2RlKTogb2JqZWN0IGlzIElWbm9kZSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBWbm9kZTtcbn1cblxuZnVuY3Rpb24gaXNDb21wb25lbnQoY29tcG9uZW50PzogdW5rbm93biB8IFZhbHlyaWFuQ29tcG9uZW50KTogY29tcG9uZW50IGlzIFZhbHlyaWFuQ29tcG9uZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBjb21wb25lbnQgPT09IFwiZnVuY3Rpb25cIiB8fCAodHlwZW9mIGNvbXBvbmVudCA9PT0gXCJvYmplY3RcIiAmJiBjb21wb25lbnQgIT09IG51bGwgJiYgXCJ2aWV3XCIgaW4gY29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNWbm9kZUNvbXBvbmVudCh2bm9kZT86IHVua25vd24gfCBWbm9kZUNvbXBvbmVudCk6IHZub2RlIGlzIFZub2RlQ29tcG9uZW50IHtcbiAgcmV0dXJuIHZub2RlIGluc3RhbmNlb2YgVm5vZGUgJiYgdm5vZGUudGFnID09PSBDb21wb25lbnRTdHJpbmc7XG59XG5cbi8qKiogVXRpbCAqKiovXG5cbmZ1bmN0aW9uIGNyZWF0ZURvbUVsZW1lbnQodGFnOiBzdHJpbmcsIGlzU1ZHOiBib29sZWFuID0gZmFsc2UpIHtcbiAgcmV0dXJuIGlzU1ZHID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdGFnKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbn1cblxuZnVuY3Rpb24gZG9tVG9Wbm9kZShkb206IERvbUVsZW1lbnQpOiBWbm9kZVdpdGhEb20ge1xuICBsZXQgdm5vZGUgPSB2KFxuICAgIGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAge30sXG4gICAgLi4uQXJyYXkuZnJvbShkb20uY2hpbGROb2RlcylcbiAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiAoY2hpbGQgYXMgRG9tRWxlbWVudCkubm9kZVR5cGUgPT09IDEgfHwgKGNoaWxkIGFzIERvbUVsZW1lbnQpLm5vZGVUeXBlID09PSAzKVxuICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYgKChjaGlsZCBhcyBEb21FbGVtZW50KS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBkb21Ub1Zub2RlKGNoaWxkIGFzIERvbUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRleHQgPSBuZXcgVm5vZGUoVGV4dFN0cmluZywge30sIFtdKTtcbiAgICAgICAgdGV4dC5ub2RlVmFsdWUgPSBTdHJpbmcoKGNoaWxkIGFzIERvbUVsZW1lbnQpLm5vZGVWYWx1ZSk7XG4gICAgICAgIHRleHQuZG9tID0gY2hpbGQgYXMgRG9tRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICB9KVxuICApO1xuICBbXS5mb3JFYWNoLmNhbGwoZG9tLmF0dHJpYnV0ZXMsIChwcm9wOiBBdHRyKSA9PiAodm5vZGUucHJvcHNbcHJvcC5ub2RlTmFtZV0gPSBwcm9wLm5vZGVWYWx1ZSkpO1xuICB2bm9kZS5kb20gPSBkb207XG4gIHJldHVybiB2bm9kZSBhcyBWbm9kZVdpdGhEb207XG59XG5cbmNvbnN0IHRydXN0ID0gKGh0bWxTdHJpbmc6IHN0cmluZyk6IENoaWxkcmVuID0+IHtcbiAgbGV0IGRpdiA9IGNyZWF0ZURvbUVsZW1lbnQoXCJkaXZcIik7XG4gIGRpdi5pbm5lckhUTUwgPSBodG1sU3RyaW5nLnRyaW0oKTtcblxuICByZXR1cm4gW10ubWFwLmNhbGwoZGl2LmNoaWxkTm9kZXMsIChpdGVtKSA9PiBkb21Ub1Zub2RlKGl0ZW0pKSBhcyBDaGlsZHJlbjtcbn07XG5cbmNvbnN0IHJlc2VydmVkUHJvcHM6IFJlc2VydmVkUHJvcHMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgc3RhdGU6IHRydWUsXG4gIG9uY3JlYXRlOiB0cnVlLFxuICBvbnVwZGF0ZTogdHJ1ZSxcbiAgb25yZW1vdmU6IHRydWUsXG4gIHNob3VsZHVwZGF0ZTogdHJ1ZSxcbiAgXCJ2LW9uY2VcIjogdHJ1ZSxcblxuICAvLyBCdWlsdCBpbiBkaXJlY3RpdmVzXG4gIFwidi1pZlwiOiB0cnVlLFxuICBcInYtdW5sZXNzXCI6IHRydWUsXG4gIFwidi1mb3JcIjogdHJ1ZSxcbiAgXCJ2LXNob3dcIjogdHJ1ZSxcbiAgXCJ2LWNsYXNzXCI6IHRydWUsXG4gIFwidi1odG1sXCI6IHRydWVcbn07XG5cbi8qKiogTW91bnQgKioqL1xuXG5jb25zdCBjdXJyZW50OiBDdXJyZW50ID0ge307XG5cbmZ1bmN0aW9uIG9uQ2xlYW51cChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgaWYgKGN1cnJlbnQuYXBwPy5vbkNsZWFudXAuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgY3VycmVudC5hcHA/Lm9uQ2xlYW51cC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvblVubW91bnQoY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gIGlmIChjdXJyZW50LmFwcD8ub25Vbm1vdW50LmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgIGN1cnJlbnQuYXBwPy5vblVubW91bnQucHVzaChjYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Nb3VudChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgaWYgKGN1cnJlbnQuYXBwPy5vbk1vdW50LmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgIGN1cnJlbnQuYXBwPy5vbk1vdW50LnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uVXBkYXRlKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICBpZiAoY3VycmVudC5hcHA/Lm9uVXBkYXRlLmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgIGN1cnJlbnQuYXBwPy5vblVwZGF0ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuXG4vKlxuICAqIE1vdW50cyBhIGNvbXBvbmVudCB0byB0aGUgRE9NXG4gIG1vdW50KCcjYXBwJywgKCkgPT4gPGRpdj5IZWxsbyB3b3JsZDwvZGl2Pik7IC8vIEFwcCBpcyBhIEZ1bmN0aW9uYWwgQ29tcG9uZW50XG4gIG1vdW50KCcjYXBwJywgeyB2aWV3OiAoKSA9PiA8ZGl2PkhlbGxvIHdvcmxkPC9kaXY+IH0pOyAvLyBBcHAgaXMgYSBQT0pPIGNvbXBvbmVudCB3aXRoIGEgdmlldyBtZXRob2RcbiAgbW91bnQoJyNhcHAnLCBjbGFzc0luc3RhbmNlKTsgLy8gQXBwIGlzIGEgY2xhc3MgaW5zdGFuY2Ugd2l0aCBhIHZpZXcgbWV0aG9kXG4gIG1vdW50KCcjYXBwJywgPEFwcD48ZGl2PkhlbGxvIHdvcmxkPC9kaXY+PC9BcHA+KTsgLy8gQXBwIGlzIGEgVm5vZGUgY29tcG9uZW50IChWbm9kZSB3aXRoIHRhZyBfX2NvbXBvbmVudF9fKVxuKi9cblxuZnVuY3Rpb24gbW91bnQoY29udGFpbmVyOiBEb21FbGVtZW50IHwgc3RyaW5nLCBjb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50IHwgSVZub2RlKTogdm9pZCB8IHN0cmluZyB7XG4gIGxldCBhcHBDb250YWluZXIgPSBudWxsO1xuXG4gIGlmIChpc05vZGVKcykge1xuICAgIGFwcENvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09IFwic3RyaW5nXCIgPyBjcmVhdGVEb21FbGVtZW50KGNvbnRhaW5lciA9PT0gXCJzdmdcIiA/IFwic3ZnXCIgOiBcImRpdlwiLCBjb250YWluZXIgPT09IFwic3ZnXCIpIDogY29udGFpbmVyO1xuICB9IGVsc2Uge1xuICAgIGFwcENvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcilbMF0gOiBjb250YWluZXI7XG4gIH1cblxuICBpZiAoIWFwcENvbnRhaW5lcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnRhaW5lciBub3QgZm91bmRcIik7XG4gIH1cblxuICBsZXQgdm5vZGVDb21wb25lbnQ6IFZub2RlQ29tcG9uZW50IHwgSVZub2RlO1xuXG4gIGlmIChpc1Zub2RlQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICB2bm9kZUNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChpc0NvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgdm5vZGVDb21wb25lbnQgPSB2KGNvbXBvbmVudCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbXBvbmVudCBtdXN0IGJlIGEgVmFseXJpYW4gQ29tcG9uZW50IG9yIGEgVm5vZGUgY29tcG9uZW50XCIpO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudFtWYWx5cmlhblN5bWJvbF0pIHtcbiAgICB1bm1vdW50KGNvbXBvbmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY29tcG9uZW50W1ZhbHlyaWFuU3ltYm9sXSA9IHtcbiAgICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgICBldmVudExpc3RlbmVyTmFtZXM6IHt9LFxuICAgICAgb25DbGVhbnVwOiBbXSxcbiAgICAgIG9uTW91bnQ6IFtdLFxuICAgICAgb25VcGRhdGU6IFtdLFxuICAgICAgb25Vbm1vdW50OiBbXVxuICAgIH07XG4gICAgZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcihlOiBFdmVudCkge1xuICAgICAgbGV0IGRvbSA9IGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgbGV0IG5hbWUgPSBgdi1vbiR7ZS50eXBlfWA7XG4gICAgICB3aGlsZSAoZG9tKSB7XG4gICAgICAgIGlmIChkb21bbmFtZV0pIHtcbiAgICAgICAgICBkb21bbmFtZV0oZSwgZG9tKTtcbiAgICAgICAgICBpZiAoIWUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgdXBkYXRlKGNvbXBvbmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBjb21wb25lbnRbVmFseXJpYW5TeW1ib2xdLmV2ZW50TGlzdGVuZXIgPSBldmVudExpc3RlbmVyO1xuICB9XG5cbiAgY29tcG9uZW50W1ZhbHlyaWFuU3ltYm9sXS5jb21wb25lbnQgPSB2bm9kZUNvbXBvbmVudDtcbiAgY29tcG9uZW50W1ZhbHlyaWFuU3ltYm9sXS5jb250YWluZXIgPSBhcHBDb250YWluZXI7XG4gIGNvbXBvbmVudFtWYWx5cmlhblN5bWJvbF0ubWFpblZub2RlID0gZG9tVG9Wbm9kZShhcHBDb250YWluZXIpO1xuXG4gIC8vIHVwZGF0ZVxuICByZXR1cm4gdXBkYXRlKGNvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxDbGVhbnVwKHZhbHlyaWFuQXBwOiBWYWx5cmlhbkFwcCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHlyaWFuQXBwLm9uQ2xlYW51cC5sZW5ndGg7IGkrKykge1xuICAgIHZhbHlyaWFuQXBwLm9uQ2xlYW51cFtpXSgpO1xuICB9XG4gIHZhbHlyaWFuQXBwLm9uQ2xlYW51cCA9IFtdO1xufVxuXG5mdW5jdGlvbiBjYWxsVW5tb3VudCh2YWx5cmlhbkFwcDogVmFseXJpYW5BcHApIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx5cmlhbkFwcC5vblVubW91bnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YWx5cmlhbkFwcC5vblVubW91bnRbaV0oKTtcbiAgfVxuICB2YWx5cmlhbkFwcC5vblVubW91bnQgPSBbXTtcbn1cblxuZnVuY3Rpb24gY2FsbE1vdW50KHZhbHlyaWFuQXBwOiBWYWx5cmlhbkFwcCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHlyaWFuQXBwLm9uTW91bnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YWx5cmlhbkFwcC5vbk1vdW50W2ldKCk7XG4gIH1cbiAgdmFseXJpYW5BcHAub25Nb3VudCA9IFtdO1xufVxuXG5mdW5jdGlvbiBjYWxsVXBkYXRlKHZhbHlyaWFuQXBwOiBWYWx5cmlhbkFwcCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHlyaWFuQXBwLm9uVXBkYXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFseXJpYW5BcHAub25VcGRhdGVbaV0oKTtcbiAgfVxuICB2YWx5cmlhbkFwcC5vblVwZGF0ZSA9IFtdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUoY29tcG9uZW50PzogVmFseXJpYW5Db21wb25lbnQgfCBJVm5vZGUpOiB2b2lkIHwgc3RyaW5nIHtcbiAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnRbVmFseXJpYW5TeW1ib2xdKSB7XG4gICAgbGV0IHZhbHlyaWFuQXBwID0gY29tcG9uZW50W1ZhbHlyaWFuU3ltYm9sXTtcbiAgICBjdXJyZW50LmFwcCA9IHZhbHlyaWFuQXBwO1xuICAgIHZhbHlyaWFuQXBwLm9uQ2xlYW51cC5sZW5ndGggJiYgY2FsbENsZWFudXAodmFseXJpYW5BcHApO1xuICAgIGxldCBvbGRWbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IHZhbHlyaWFuQXBwLm1haW5Wbm9kZSBhcyBWbm9kZVdpdGhEb207XG4gICAgdmFseXJpYW5BcHAubWFpblZub2RlID0gbmV3IFZub2RlKHZhbHlyaWFuQXBwLm1haW5Wbm9kZS50YWcsIHZhbHlyaWFuQXBwLm1haW5Wbm9kZS5wcm9wcywgW3ZhbHlyaWFuQXBwLmNvbXBvbmVudF0pIGFzIFZub2RlV2l0aERvbTtcbiAgICB2YWx5cmlhbkFwcC5tYWluVm5vZGUuZG9tID0gb2xkVm5vZGUuZG9tO1xuICAgIHBhdGNoKHZhbHlyaWFuQXBwLm1haW5Wbm9kZSwgb2xkVm5vZGUsIHZhbHlyaWFuQXBwKTtcbiAgICBvbGRWbm9kZSA9IG51bGw7XG4gICAgaWYgKHZhbHlyaWFuQXBwLmlzTW91bnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHZhbHlyaWFuQXBwLm9uTW91bnQubGVuZ3RoICYmIGNhbGxNb3VudCh2YWx5cmlhbkFwcCk7XG4gICAgICB2YWx5cmlhbkFwcC5pc01vdW50ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx5cmlhbkFwcC5vblVwZGF0ZS5sZW5ndGggJiYgY2FsbFVwZGF0ZSh2YWx5cmlhbkFwcCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZUpzKSB7XG4gICAgICByZXR1cm4gdmFseXJpYW5BcHAubWFpblZub2RlLmRvbS5pbm5lckhUTUw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVubW91bnQoY29tcG9uZW50PzogVmFseXJpYW5Db21wb25lbnQgfCBJVm5vZGUpOiB2b2lkIHwgc3RyaW5nIHtcbiAgaWYgKCFjb21wb25lbnQgfHwgIWNvbXBvbmVudFtWYWx5cmlhblN5bWJvbF0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgdmFseXJpYW5BcHAgPSBjb21wb25lbnRbVmFseXJpYW5TeW1ib2xdIGFzIE1vdW50ZWRWYWx5cmlhbkFwcDtcblxuICBpZiAodmFseXJpYW5BcHAuaXNNb3VudGVkKSB7XG4gICAgdmFseXJpYW5BcHAub25DbGVhbnVwLmxlbmd0aCAmJiBjYWxsQ2xlYW51cCh2YWx5cmlhbkFwcCk7XG4gICAgdmFseXJpYW5BcHAub25Vbm1vdW50Lmxlbmd0aCAmJiBjYWxsVW5tb3VudCh2YWx5cmlhbkFwcCk7XG4gICAgbGV0IG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsID0gdmFseXJpYW5BcHAubWFpblZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgICB2YWx5cmlhbkFwcC5tYWluVm5vZGUgPSBuZXcgVm5vZGUodmFseXJpYW5BcHAubWFpblZub2RlLnRhZywgdmFseXJpYW5BcHAubWFpblZub2RlLnByb3BzLCBbXSkgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHZhbHlyaWFuQXBwLm1haW5Wbm9kZS5kb20gPSBvbGRWbm9kZS5kb207XG4gICAgdmFseXJpYW5BcHAubWFpblZub2RlLmlzU1ZHID0gb2xkVm5vZGUuaXNTVkc7XG4gICAgcGF0Y2godmFseXJpYW5BcHAubWFpblZub2RlLCBvbGRWbm9kZSwgdmFseXJpYW5BcHApO1xuICAgIG9sZFZub2RlID0gbnVsbDtcblxuICAgIGlmIChpc05vZGVKcykge1xuICAgICAgcmV0dXJuIHZhbHlyaWFuQXBwLm1haW5Wbm9kZS5kb20uaW5uZXJIVE1MO1xuICAgIH1cblxuICAgICh2YWx5cmlhbkFwcCBhcyBhbnkpID0gbnVsbDtcbiAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGNvbXBvbmVudCwgVmFseXJpYW5TeW1ib2wpO1xuICB9XG59XG5cbmxldCBlbXB0eVZub2RlID0gbmV3IFZub2RlKFwiX19lbXB0eV9fXCIsIHt9LCBbXSk7XG5cbmZ1bmN0aW9uIG9ucmVtb3ZlKHZub2RlOiBJVm5vZGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZub2RlLmNoaWxkcmVuW2ldLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZSh2bm9kZS5jaGlsZHJlbltpXSk7XG4gIH1cblxuICB2bm9kZS5wcm9wcy5vbnJlbW92ZSAmJiB2bm9kZS5wcm9wcy5vbnJlbW92ZSh2bm9kZSk7XG59XG5cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB8IGJvb2xlYW4ge1xuICAvLyBJdCBpcyBhIHJlc2VydmVkIHByb3BcbiAgaWYgKHJlc2VydmVkUHJvcHNbcHJvcF0pIHtcbiAgICAvLyBJZiBpdCBpcyBhIGRpcmVjdGl2ZSBuYW1lIGNhbGwgdGhlIGRpcmVjdGl2ZVxuICAgIGlmIChkaXJlY3RpdmVzW3Byb3BdKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aXZlc1twcm9wXSh2bm9kZS5wcm9wc1twcm9wXSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJdCBpcyBub3QgYSByZXNlcnZlZCBwcm9wIHNvIHdlIGFkZCBpdCB0byB0aGUgZG9tXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCB2YWx5cmlhbkFwcCA9IGN1cnJlbnQuYXBwIGFzIE1vdW50ZWRWYWx5cmlhbkFwcDtcbiAgICBpZiAocHJvcCBpbiB2YWx5cmlhbkFwcC5ldmVudExpc3RlbmVyTmFtZXMgPT09IGZhbHNlKSB7XG4gICAgICB2YWx5cmlhbkFwcC5ldmVudExpc3RlbmVyTmFtZXNbcHJvcF0gPSB0cnVlO1xuICAgICAgdmFseXJpYW5BcHAuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIocHJvcC5zbGljZSgyKSwgdmFseXJpYW5BcHAuZXZlbnRMaXN0ZW5lcik7XG4gICAgfVxuICAgIHZub2RlLmRvbVtgdi0ke3Byb3B9YF0gPSB2YWx1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcCBpbiB2bm9kZS5kb20gJiYgdm5vZGUuaXNTVkcgPT09IGZhbHNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgIGlmICh2bm9kZS5kb21bcHJvcF0gIT0gdmFsdWUpIHtcbiAgICAgIHZub2RlLmRvbVtwcm9wXSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBVc2Ugc2V0IGF0dHJpYnV0ZVxuICBpZiAoIW9sZFZub2RlIHx8IG9sZFZub2RlLnByb3BzW3Byb3BdICE9PSB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHZub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlLmRvbS5zZXRBdHRyaWJ1dGUocHJvcCwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSkge1xuICB2bm9kZS5wcm9wc1tuYW1lXSA9IHZhbHVlO1xuXG4gIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgdm5vZGUsIG9sZFZub2RlKTtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlcyh2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSkge1xuICBmb3IgKGxldCBwcm9wIGluIHZub2RlLnByb3BzKSB7XG4gICAgaWYgKHNoYXJlZFNldEF0dHJpYnV0ZShwcm9wLCB2bm9kZS5wcm9wc1twcm9wXSwgdm5vZGUsIG9sZFZub2RlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAob2xkVm5vZGUpIHtcbiAgICBmb3IgKGxldCBwcm9wIGluIG9sZFZub2RlLnByb3BzKSB7XG4gICAgICBpZiAocHJvcCBpbiB2bm9kZS5wcm9wcyA9PT0gZmFsc2UgJiYgdHlwZW9mIG9sZFZub2RlLnByb3BzW3Byb3BdICE9PSBcImZ1bmN0aW9uXCIgJiYgcHJvcCBpbiByZXNlcnZlZFByb3BzID09PSBmYWxzZSkge1xuICAgICAgICBpZiAocHJvcCBpbiBvbGRWbm9kZS5kb20gJiYgdm5vZGUuaXNTVkcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgb2xkVm5vZGUuZG9tW3Byb3BdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbGRWbm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBwYXRjaChuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZTogVm5vZGVXaXRoRG9tIHwgSVZub2RlID0gZW1wdHlWbm9kZSwgdmFseXJpYW5BcHA6IE1vdW50ZWRWYWx5cmlhbkFwcCkge1xuICBjdXJyZW50LnZub2RlID0gbmV3Vm5vZGU7XG4gIGN1cnJlbnQub2xkVm5vZGUgPSBvbGRWbm9kZSA9PT0gZW1wdHlWbm9kZSA/IFVuZCA6IChvbGRWbm9kZSBhcyBWbm9kZVdpdGhEb20pO1xuICBsZXQgbmV3VHJlZSA9IG5ld1Zub2RlLmNoaWxkcmVuO1xuICBsZXQgb2xkVHJlZSA9IG9sZFZub2RlLmNoaWxkcmVuO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZS5sZW5ndGg7IGkrKykge1xuICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcbiAgICBpZiAoY2hpbGRWbm9kZSBpbnN0YW5jZW9mIFZub2RlKSB7XG4gICAgICBpZiAoY2hpbGRWbm9kZS50YWcgIT09IFRleHRTdHJpbmcpIHtcbiAgICAgICAgaWYgKGNoaWxkVm5vZGUudGFnID09PSBDb21wb25lbnRTdHJpbmcpIHtcbiAgICAgICAgICBsZXQgY29tcG9uZW50ID0gY2hpbGRWbm9kZS5jb21wb25lbnQgYXMgVmFseXJpYW5Db21wb25lbnQ7XG4gICAgICAgICAgY3VycmVudC5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IChcInZpZXdcIiBpbiBjb21wb25lbnQgPyBjb21wb25lbnQudmlldyA6IGNvbXBvbmVudCkuY2FsbChjb21wb25lbnQsIGNoaWxkVm5vZGUucHJvcHMsIC4uLmNoaWxkVm5vZGUuY2hpbGRyZW4pO1xuXG4gICAgICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxLCByZXN1bHQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkVm5vZGUuaXNTVkcgPSBuZXdWbm9kZS5pc1NWRyB8fCBjaGlsZFZub2RlLnRhZyA9PT0gXCJzdmdcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRWbm9kZSkpIHtcbiAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSwgLi4uY2hpbGRWbm9kZSk7XG4gICAgfSBlbHNlIGlmIChjaGlsZFZub2RlID09PSBudWxsIHx8IGNoaWxkVm5vZGUgPT09IFVuZCkge1xuICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VHJlZVtpXSA9IG5ldyBWbm9kZShUZXh0U3RyaW5nLCB7fSwgW10pO1xuICAgICAgbmV3VHJlZVtpXS5ub2RlVmFsdWUgPSBjaGlsZFZub2RlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBvbGRUcmVlTGVuZ3RoID0gb2xkVHJlZS5sZW5ndGg7XG4gIGxldCBuZXdUcmVlTGVuZ3RoID0gbmV3VHJlZS5sZW5ndGg7XG5cbiAgLy8gSWYgbmV3IHRyZWUgaXMgZW1wdHksIHJlbW92ZSBhbGwgb2xkIG5vZGVzXG4gIGlmIChuZXdUcmVlTGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG9sZFRyZWVbaV0udGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgIH1cblxuICAgIG5ld1Zub2RlLmRvbS50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMga2V5ZWQgbGlzdCBhbmQgaXMgbm90IGZpcnN0IHJlbmRlciBhbmQgb2xkIHRyZWUgaXMga2V5ZWQgbGlzdCB0b29cbiAgaWYgKG9sZFRyZWVMZW5ndGggJiYgXCJrZXlcIiBpbiBuZXdUcmVlWzBdLnByb3BzICYmIFwia2V5XCIgaW4gb2xkVHJlZVswXS5wcm9wcykge1xuICAgIGxldCBvbGRLZXllZExpc3Q6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgb2xkS2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSA9IGk7XG4gICAgfVxuXG4gICAgbGV0IG5ld0tleWVkTGlzdDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdLZXllZExpc3RbbmV3VHJlZVtpXS5wcm9wcy5rZXldID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuICAgICAgbGV0IG9sZENoaWxkVm5vZGUgPSBvbGRUcmVlW29sZEtleWVkTGlzdFtjaGlsZFZub2RlLnByb3BzLmtleV1dO1xuICAgICAgbGV0IHNob3VsZFBhdGNoID0gdHJ1ZTtcblxuICAgICAgaWYgKG9sZENoaWxkVm5vZGUpIHtcbiAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBvbGRDaGlsZFZub2RlLmRvbTtcbiAgICAgICAgaWYgKFwidi1vbmNlXCIgaW4gY2hpbGRWbm9kZS5wcm9wcyB8fCAoY2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgIC8vIHNraXAgdGhpcyBwYXRjaFxuICAgICAgICAgIGNoaWxkVm5vZGUuY2hpbGRyZW4gPSBvbGRDaGlsZFZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIHNob3VsZFBhdGNoID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0QXR0cmlidXRlcyhjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICBpZiAodmFseXJpYW5BcHAuaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChjaGlsZFZub2RlLnRhZywgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgIHNldEF0dHJpYnV0ZXMoY2hpbGRWbm9kZSk7XG4gICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzW2ldID09PSBVbmQpIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGNoaWxkVm5vZGUuZG9tKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gIT09IGNoaWxkVm5vZGUuZG9tKSB7XG4gICAgICAgIG9sZFRyZWVbaV0gJiYgbmV3S2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSA9PT0gVW5kICYmIG9ucmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGNoaWxkVm5vZGUuZG9tLCBuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHNob3VsZFBhdGNoICYmIHBhdGNoKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUsIHZhbHlyaWFuQXBwKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGNoaWxkcmVuLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW1cbiAgICBmb3IgKGxldCBpID0gbmV3VHJlZUxlbmd0aDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5ld0tleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPT09IFVuZCkge1xuICAgICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbaV07XG4gICAgICAgIG9ucmVtb3ZlKG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlICYmIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkQ2hpbGRWbm9kZS5kb20pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIG5ldyB0cmVlIGFuZCBvbGQgdHJlZSBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQsIHdlIHNob3VsZCB1cGRhdGUgdGhlIGRvbVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgIGxldCBuZXdDaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcblxuICAgIC8vIE9sZCBjaGlsZCBleGlzdHNcbiAgICBpZiAoaSA8IG9sZFRyZWVMZW5ndGgpIHtcbiAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICAgIC8vIE5ldyBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgICAgaWYgKG5ld0NoaWxkVm5vZGUudGFnID09PSBUZXh0U3RyaW5nKSB7XG4gICAgICAgIC8vIE9sZCBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgICAgICBpZiAob2xkQ2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgICBpZiAobmV3Q2hpbGRWbm9kZS5kb20ubm9kZVZhbHVlICE9IG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICBuZXdDaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgPSBuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2xkIGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmcpIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgICAgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTmV3IGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICAgIC8vIE9sZCBjaGlsZCBpcyB0aGUgc2FtZSB0eXBlIGFzIG5ldyBjaGlsZFxuICAgICAgaWYgKG9sZENoaWxkVm5vZGUudGFnID09PSBuZXdDaGlsZFZub2RlLnRhZykge1xuICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdi1vbmNlIGRpcmVjdGl2ZSBvciBhIHNob3VsZHVwZGF0ZSBtZXRob2QgdGhhdCByZXR1cm5zIGZhbHNlLCB3ZSBza2lwIHRoZSB1cGRhdGVcbiAgICAgICAgaWYgKG5ld0NoaWxkVm5vZGUucHJvcHNbXCJ2LW9uY2VcIl0gfHwgKG5ld0NoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpID09PSBmYWxzZSkpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIHVwZGF0ZSB0aGUgZG9tIGVsZW1lbnRcbiAgICAgICAgc2V0QXR0cmlidXRlcyhuZXdDaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgaWYgKHZhbHlyaWFuQXBwLmlzTW91bnRlZCkge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub251cGRhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZShuZXdDaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUobmV3Q2hpbGRWbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXRjaChuZXdDaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlLCB2YWx5cmlhbkFwcCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBPbGQgY2hpbGQgaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIG5ldyBjaGlsZFxuICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBjcmVhdGVEb21FbGVtZW50KG5ld0NoaWxkVm5vZGUudGFnLCBuZXdDaGlsZFZub2RlLmlzU1ZHKTtcbiAgICAgIHNldEF0dHJpYnV0ZXMobmV3Q2hpbGRWbm9kZSk7XG4gICAgICBvbGRDaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tKTtcbiAgICAgIHBhdGNoKG5ld0NoaWxkVm5vZGUsIGVtcHR5Vm5vZGUsIHZhbHlyaWFuQXBwKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIE9sZCBjaGlsZCBkb2VzIG5vdCBleGlzdHNcbiAgICAvLyBOZXcgY2hpbGQgaXMgYSB0ZXh0IG5vZGVcbiAgICBpZiAobmV3Q2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3Q2hpbGRWbm9kZS5ub2RlVmFsdWUgYXMgc3RyaW5nKSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnQ7XG4gICAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTmV3IGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICBuZXdDaGlsZFZub2RlLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQobmV3Q2hpbGRWbm9kZS50YWcsIG5ld0NoaWxkVm5vZGUuaXNTVkcpO1xuICAgIHNldEF0dHJpYnV0ZXMobmV3Q2hpbGRWbm9kZSk7XG4gICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKG5ld0NoaWxkVm5vZGUuZG9tKTtcbiAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUobmV3Q2hpbGRWbm9kZSk7XG4gICAgcGF0Y2gobmV3Q2hpbGRWbm9kZSwgZW1wdHlWbm9kZSwgdmFseXJpYW5BcHApO1xuICB9XG5cbiAgLy8gRm9yIHRoZSByZXN0IG9mIHRoZSBjaGlsZHJlbiwgd2Ugc2hvdWxkIHJlbW92ZSB0aGVtXG4gIGZvciAobGV0IGkgPSBuZXdUcmVlTGVuZ3RoOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG9sZENoaWxkVm5vZGUgPSBvbGRUcmVlW2ldO1xuICAgIG9sZENoaWxkVm5vZGUudGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKG9sZENoaWxkVm5vZGUpO1xuICAgIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUgJiYgb2xkQ2hpbGRWbm9kZS5kb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRDaGlsZFZub2RlLmRvbSk7XG4gIH1cbn1cblxuLyoqKiBEaXJlY3RpdmVzICoqKi9cblxuZnVuY3Rpb24gZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlOiBEaXJlY3RpdmUpIHtcbiAgbGV0IGZ1bGxOYW1lID0gYHYtJHtuYW1lfWA7XG4gIGRpcmVjdGl2ZXNbZnVsbE5hbWVdID0gZGlyZWN0aXZlO1xuICByZXNlcnZlZFByb3BzW2Z1bGxOYW1lXSA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGhpZGVEaXJlY3RpdmUodGVzdDogYm9vbGVhbik6IERpcmVjdGl2ZSB7XG4gIHJldHVybiAoYm9vbDogYm9vbGVhbiwgdm5vZGU6IElWbm9kZSwgb2xkVm5vZGU/OiBJVm5vZGUpID0+IHtcbiAgICBsZXQgdmFsdWUgPSB0ZXN0ID8gYm9vbCA6ICFib29sO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgbGV0IG5ld2RvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xuICAgICAgaWYgKG9sZFZub2RlICYmIG9sZFZub2RlLmRvbSAmJiBvbGRWbm9kZS5kb20ucGFyZW50Tm9kZSkge1xuICAgICAgICBvbGRWbm9kZS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkVm5vZGUpO1xuICAgICAgICBvbGRWbm9kZS5kb20ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3ZG9tLCBvbGRWbm9kZS5kb20pO1xuICAgICAgfVxuICAgICAgdm5vZGUudGFnID0gVGV4dFN0cmluZztcbiAgICAgIHZub2RlLmNoaWxkcmVuID0gW107XG4gICAgICB2bm9kZS5wcm9wcyA9IHt9O1xuICAgICAgdm5vZGUuZG9tID0gbmV3ZG9tIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IGRpcmVjdGl2ZXM6IERpcmVjdGl2ZXMgPSB7XG4gIFwidi1pZlwiOiBoaWRlRGlyZWN0aXZlKGZhbHNlKSxcbiAgXCJ2LXVubGVzc1wiOiBoaWRlRGlyZWN0aXZlKHRydWUpLFxuICBcInYtZm9yXCI6IChzZXQ6IHVua25vd25bXSwgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gc2V0Lm1hcCh2bm9kZS5jaGlsZHJlblswXSk7XG4gIH0sXG4gIFwidi1zaG93XCI6IChib29sOiBib29sZWFuLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgKHZub2RlLmRvbSBhcyB1bmtub3duIGFzIHsgc3R5bGU6IHsgZGlzcGxheTogc3RyaW5nIH0gfSkuc3R5bGUuZGlzcGxheSA9IGJvb2wgPyBcIlwiIDogXCJub25lXCI7XG4gIH0sXG4gIFwidi1jbGFzc1wiOiAoY2xhc3NlczogeyBbeDogc3RyaW5nXTogYm9vbGVhbiB9LCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBjbGFzc2VzKSB7XG4gICAgICAodm5vZGUuZG9tIGFzIERvbUVsZW1lbnQpLmNsYXNzTGlzdC50b2dnbGUobmFtZSwgY2xhc3Nlc1tuYW1lXSk7XG4gICAgfVxuICB9LFxuICBcInYtaHRtbFwiOiAoaHRtbDogc3RyaW5nLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSBbdHJ1c3QoaHRtbCldO1xuICB9LFxuICBcInYtbW9kZWxcIjogKFttb2RlbCwgcHJvcGVydHksIGV2ZW50XTogYW55W10sIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGxldCBoYW5kbGVyO1xuICAgIGlmICh2bm9kZS5uYW1lID09PSBcImlucHV0XCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmlucHV0XCI7XG4gICAgICBzd2l0Y2ggKHZub2RlLnByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoZWNrYm94XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgICAgICBsZXQgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlciA9ICgpID0+IChtb2RlbFtwcm9wZXJ0eV0gPSAhbW9kZWxbcHJvcGVydHldKTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLmRvbS52YWx1ZSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS5uYW1lID09PSBcInNlbGVjdFwiKSB7XG4gICAgICBldmVudCA9IGV2ZW50IHx8IFwib25jbGlja1wiO1xuICAgICAgaWYgKHZub2RlLnByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgIGhhbmRsZXIgPSAoZTogRXZlbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICAgICAgbGV0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKDAsIG1vZGVsW3Byb3BlcnR5XS5sZW5ndGgpO1xuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBJVm5vZGUpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogSVZub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gXCJvcHRpb25cIikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gXCJ2YWx1ZVwiIGluIGNoaWxkLnByb3BzID8gY2hpbGQucHJvcHMudmFsdWUgOiBjaGlsZC5jaGlsZHJlbi5qb2luKFwiXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnNlbGVjdGVkID0gdmFsdWUgPT09IG1vZGVsW3Byb3BlcnR5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodm5vZGUubmFtZSA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgICBldmVudCA9IGV2ZW50IHx8IFwib25pbnB1dFwiO1xuICAgICAgdm5vZGUuY2hpbGRyZW4gPSBbbW9kZWxbcHJvcGVydHldXTtcbiAgICB9XG5cbiAgICBpZiAoIXZub2RlLnByb3BzW2V2ZW50XSkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIgPSAoZTogRXZlbnQpID0+IChtb2RlbFtwcm9wZXJ0eV0gPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHNldEF0dHJpYnV0ZShldmVudCwgaGFuZGxlciwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKiogUGx1Z2lucyAqKiovXG5jb25zdCBwbHVnaW5zID0gbmV3IE1hcDxQbHVnaW4sIGFueT4oKTtcblxuZnVuY3Rpb24gdXNlKHBsdWdpbjogUGx1Z2luLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgYW55Pik6IHZvaWQgfCBhbnkge1xuICBpZiAocGx1Z2lucy5oYXMocGx1Z2luKSkge1xuICAgIHJldHVybiBwbHVnaW5zLmdldChwbHVnaW4pO1xuICB9XG5cbiAgbGV0IHJlc3VsdCA9IHBsdWdpbih2LCBvcHRpb25zKTtcbiAgcGx1Z2lucy5zZXQocGx1Z2luLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKioqIEh5cGVyc2NyaXB0ICoqKi9cblxuZXhwb3J0IGNvbnN0IHY6IFZhbHlyaWFuID0gZnVuY3Rpb24gdih0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgVmFseXJpYW5Db21wb25lbnQsIHByb3BzOiBQcm9wcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKTogSVZub2RlIHwgVm5vZGVDb21wb25lbnQge1xuICBpZiAodHlwZW9mIHRhZ09yQ29tcG9uZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIG5ldyBWbm9kZSh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgfVxuXG4gIGNvbnN0IHZub2RlID0gbmV3IFZub2RlKFwiX19jb21wb25lbnRfX1wiLCBwcm9wcyB8fCB7fSwgY2hpbGRyZW4pO1xuICB2bm9kZS5jb21wb25lbnQgPSB0YWdPckNvbXBvbmVudDtcbiAgcmV0dXJuIHZub2RlIGFzIFZub2RlQ29tcG9uZW50O1xufTtcblxudi5mcmFnbWVudCA9IChwcm9wczogUHJvcHMsIC4uLmNoaWxkcmVuOiBDaGlsZHJlbik6IENoaWxkcmVuID0+IHtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufTtcblxuLyoqKiBWIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgKioqL1xuLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBtYWtlIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGF2YWlsYWJsZSBmb3IgcGx1Z2luc1xudi5jdXJyZW50ID0gY3VycmVudDtcblxudi5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcblxudi5yZXNlcnZlZFByb3BzID0gcmVzZXJ2ZWRQcm9wcztcblxudi5pc1Zub2RlID0gaXNWbm9kZTtcbnYuaXNDb21wb25lbnQgPSBpc0NvbXBvbmVudDtcbnYuaXNWbm9kZUNvbXBvbmVudCA9IGlzVm5vZGVDb21wb25lbnQ7XG5cbnYuaXNOb2RlSnMgPSBpc05vZGVKcztcbnYudHJ1c3QgPSB0cnVzdDtcblxudi5vbkNsZWFudXAgPSBvbkNsZWFudXA7XG52Lm9uVW5tb3VudCA9IG9uVW5tb3VudDtcbnYub25Nb3VudCA9IG9uTW91bnQ7XG52Lm9uVXBkYXRlID0gb25VcGRhdGU7XG5cbnYubW91bnQgPSBtb3VudDtcbnYudW5tb3VudCA9IHVubW91bnQ7XG52LnVwZGF0ZSA9IHVwZGF0ZTtcblxudi5zZXRBdHRyaWJ1dGUgPSBzZXRBdHRyaWJ1dGU7XG52LmRpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbnYudXNlID0gdXNlO1xuIl19
|
|
1
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJDb21wb25lbnRTdHJpbmciLCJUZXh0U3RyaW5nIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsIlZhbHlyaWFuU3ltYm9sIiwiU3ltYm9sIiwiVW5kIiwiVm5vZGUiLCJ0YWciLCJwcm9wcyIsImNoaWxkcmVuIiwidGhpcyIsImlzQ29tcG9uZW50IiwiY29tcG9uZW50IiwiaXNWbm9kZUNvbXBvbmVudCIsInZub2RlIiwiY3JlYXRlRG9tRWxlbWVudCIsImlzU1ZHIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVFbGVtZW50IiwiZG9tVG9Wbm9kZSIsImRvbSIsIm5vZGVUeXBlIiwidiIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsIkFycmF5IiwiZnJvbSIsImNoaWxkTm9kZXMiLCJmaWx0ZXIiLCJjaGlsZCIsIm1hcCIsInRleHQiLCJub2RlVmFsdWUiLCJTdHJpbmciLCJmb3JFYWNoIiwiY2FsbCIsImF0dHJpYnV0ZXMiLCJwcm9wIiwibm9kZU5hbWUiLCJ0cnVzdCIsImh0bWxTdHJpbmciLCJkaXYiLCJpbm5lckhUTUwiLCJ0cmltIiwiaXRlbSIsInJlc2VydmVkUHJvcHMiLCJrZXkiLCJzdGF0ZSIsIm9uY3JlYXRlIiwib251cGRhdGUiLCJvbnJlbW92ZSIsInNob3VsZHVwZGF0ZSIsImN1cnJlbnQiLCJjYWxsQ2xlYW51cCIsInZhbHlyaWFuQXBwIiwiaSIsIm9uQ2xlYW51cCIsImxlbmd0aCIsInVwZGF0ZSIsImFwcCIsIm9sZFZub2RlIiwibWFpblZub2RlIiwicGF0Y2giLCJpc01vdW50ZWQiLCJvbk1vdW50IiwiY2FsbE1vdW50Iiwib25VcGRhdGUiLCJjYWxsVXBkYXRlIiwidW5tb3VudCIsIm9uVW5tb3VudCIsImNhbGxVbm1vdW50IiwiUmVmbGVjdCIsImRlbGV0ZVByb3BlcnR5IiwiZW1wdHlWbm9kZSIsInNoYXJlZFNldEF0dHJpYnV0ZSIsInZhbHVlIiwiZGlyZWN0aXZlcyIsImV2ZW50TGlzdGVuZXJOYW1lcyIsImNvbnRhaW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzbGljZSIsImV2ZW50TGlzdGVuZXIiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJuYW1lIiwic2V0QXR0cmlidXRlcyIsIm5ld1Zub2RlIiwibmV3VHJlZSIsIm9sZFRyZWUiLCJjaGlsZFZub2RlIiwicmVzdWx0IiwidmlldyIsInNwbGljZSIsImlzQXJyYXkiLCJvbGRUcmVlTGVuZ3RoIiwibmV3VHJlZUxlbmd0aCIsIm9sZEtleWVkTGlzdCIsIm5ld0tleWVkTGlzdCIsIm9sZENoaWxkVm5vZGUiLCJzaG91bGRQYXRjaCIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwibmV3Q2hpbGRWbm9kZSIsImNyZWF0ZVRleHROb2RlIiwidGV4dENvbnRlbnQiLCJoaWRlRGlyZWN0aXZlIiwidGVzdCIsImJvb2wiLCJuZXdkb20iLCJzZXQiLCJzdHlsZSIsImRpc3BsYXkiLCJjbGFzc2VzIiwiY2xhc3NMaXN0IiwidG9nZ2xlIiwiaHRtbCIsIm1vZGVsIiwicHJvcGVydHkiLCJldmVudCIsImhhbmRsZXIiLCJ0eXBlIiwiZSIsInZhbCIsInRhcmdldCIsImlkeCIsImluZGV4T2YiLCJwdXNoIiwibXVsdGlwbGUiLCJjdHJsS2V5IiwidmFsdWUyIiwiam9pbiIsInNlbGVjdGVkIiwicGx1Z2lucyIsIk1hcCIsInRhZ09yQ29tcG9uZW50IiwiZnJhZ21lbnQiLCJpc1Zub2RlIiwib2JqZWN0IiwiY2FsbGJhY2siLCJtb3VudCIsInZub2RlQ29tcG9uZW50IiwiYXBwQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsIkVycm9yIiwiZGVmYXVsdFByZXZlbnRlZCIsImRpcmVjdGl2ZSIsImRpcmVjdGl2ZTIiLCJmdWxsTmFtZSIsInVzZSIsInBsdWdpbiIsIm9wdGlvbnMiLCJoYXMiLCJn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SUFLaEMsR0FBSUEsRUFBVVQsR0FDWmtFLEVBQVF6RCxPQUNILENBU0wsSUFBU3NFLEVBQVQsU0FBdUIwQyxHQUNyQixJQUFJdkcsRUFBTXVHLEVBQUVFLE9BQ1J6QyxFQUFPLE9BQU91QyxFQUFFRCxPQUNwQixLQUFPdEcsR0FBSyxDQUNWLEdBQUlBLEVBQUlnRSxHQUtOLE9BSkFoRSxFQUFJZ0UsR0FBTXVDLEVBQUd2RyxRQUNSdUcsRUFBRXVCLGtCQUNMeEYsRUFBTy9DLElBSVhTLEVBQU1BLEVBQUlrRixhQW5CZDNGLEVBQVVULEdBQWtCLENBQzFCNkQsV0FBVyxFQUNYYyxtQkFBb0IsR0FDcEJyQixVQUFXLEdBQ1hRLFFBQVMsR0FDVEUsU0FBVSxHQUNWRyxVQUFXLElBZ0JiMUQsRUFBVVQsR0FBZ0IrRSxjQUFnQkEsRUFRNUMsT0FMQXRFLEVBQVVULEdBQWdCUyxVQUFZbUksRUFDdENuSSxFQUFVVCxHQUFnQjRFLFVBQVlpRSxFQUN0Q3BJLEVBQVVULEdBQWdCMkQsVUFBWTFDLEVBQVc0SCxHQUcxQ3JGLEVBQU8vQyxJQTBnQmhCVyxFQUFFOEMsUUFBVUEsRUFDWjlDLEVBQUVvQyxPQUFTQSxFQUVYcEMsRUFBRTZELGFBQWVBLEVBQ2pCN0QsRUFBRTZILFVBdExGLFNBQW1CL0QsRUFBY2dFLEdBQy9CLElBQUlDLEVBQVcsS0FBS2pFLElBQ3BCUixFQUFXeUUsR0FBWUQsRUFDdkJ2RyxFQUFjd0csSUFBWSxHQW9MNUIvSCxFQUFFZ0ksSUFwREYsU0FBYUMsRUFBZ0JDLEdBQzNCLEdBQUlsQixFQUFRbUIsSUFBSUYsR0FDZCxPQUFPakIsRUFBUW9CLElBQUlILEdBR3JCLElBQUk3RCxFQUFTNkQsRUFBT2pJLEVBQUdrSSxHQUV2QixPQURBbEIsRUFBUXZCLElBQUl3QyxFQUFRN0QsR0FDYkEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eSAqL1xuLyoqKiBWbm9kZSAqKiovXG5cbmltcG9ydCB7XG4gIENoaWxkcmVuLFxuICBDdXJyZW50LFxuICBEaXJlY3RpdmUsXG4gIERpcmVjdGl2ZXMsXG4gIERvbUVsZW1lbnQsXG4gIElWbm9kZSxcbiAgTW91bnRlZFZhbHlyaWFuQXBwLFxuICBQbHVnaW4sXG4gIFByb3BzLFxuICBSZXNlcnZlZFByb3BzLFxuICBWYWx5cmlhbixcbiAgVmFseXJpYW5BcHAsXG4gIFZhbHlyaWFuQ29tcG9uZW50LFxuICBWbm9kZUNvbXBvbmVudCxcbiAgVm5vZGVXaXRoRG9tXG59IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcblxuLyoqKiBDb25zdGFudHMgKioqL1xuY29uc3QgQ29tcG9uZW50U3RyaW5nID0gXCJfX2NvbXBvbmVudF9fXCI7XG5jb25zdCBUZXh0U3RyaW5nID0gXCIjdGV4dFwiO1xuY29uc3QgaXNOb2RlSnMgPSBCb29sZWFuKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKTtcbmNvbnN0IFZhbHlyaWFuU3ltYm9sID0gU3ltYm9sKFwiVmFseXJpYW5cIik7XG5jb25zdCBVbmQgPSB1bmRlZmluZWQ7XG5cbi8qKiogVm5vZGUgKioqL1xuXG5jb25zdCBWbm9kZSA9IGZ1bmN0aW9uIFZub2RlKHRoaXM6IElWbm9kZSwgdGFnOiBzdHJpbmcsIHByb3BzOiBQcm9wcywgY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRhZyA9IHRhZztcbn0gYXMgdW5rbm93biBhcyBJVm5vZGU7XG5cbmZ1bmN0aW9uIGlzVm5vZGUob2JqZWN0PzogdW5rbm93biB8IElWbm9kZSk6IG9iamVjdCBpcyBJVm5vZGUge1xuICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgVm5vZGU7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KGNvbXBvbmVudD86IHVua25vd24gfCBWYWx5cmlhbkNvbXBvbmVudCk6IGNvbXBvbmVudCBpcyBWYWx5cmlhbkNvbXBvbmVudCB7XG4gIHJldHVybiB0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgfHwgKHR5cGVvZiBjb21wb25lbnQgPT09IFwib2JqZWN0XCIgJiYgY29tcG9uZW50ICE9PSBudWxsICYmIFwidmlld1wiIGluIGNvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzVm5vZGVDb21wb25lbnQodm5vZGU/OiB1bmtub3duIHwgVm5vZGVDb21wb25lbnQpOiB2bm9kZSBpcyBWbm9kZUNvbXBvbmVudCB7XG4gIHJldHVybiB2bm9kZSBpbnN0YW5jZW9mIFZub2RlICYmIHZub2RlLnRhZyA9PT0gQ29tcG9uZW50U3RyaW5nO1xufVxuXG4vKioqIFV0aWwgKioqL1xuXG5mdW5jdGlvbiBjcmVhdGVEb21FbGVtZW50KHRhZzogc3RyaW5nLCBpc1NWRzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBpc1NWRyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHRhZykgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG59XG5cbmZ1bmN0aW9uIGRvbVRvVm5vZGUoZG9tOiBEb21FbGVtZW50KTogdm9pZCB8IFZub2RlV2l0aERvbSB7XG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDEgfHwgZG9tLm5vZGVUeXBlID09PSAzKSB7XG4gICAgbGV0IHZub2RlID0gdihcbiAgICAgIGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICB7fSxcbiAgICAgIC4uLkFycmF5LmZyb20oZG9tLmNoaWxkTm9kZXMpXG4gICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5ub2RlVHlwZSA9PT0gMSB8fCBjaGlsZC5ub2RlVHlwZSA9PT0gMylcbiAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBkb21Ub1Zub2RlKGNoaWxkIGFzIERvbUVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdGV4dCA9IG5ldyBWbm9kZShUZXh0U3RyaW5nLCB7fSwgW10pO1xuICAgICAgICAgIHRleHQubm9kZVZhbHVlID0gU3RyaW5nKGNoaWxkLm5vZGVWYWx1ZSk7XG4gICAgICAgICAgdGV4dC5kb20gPSBjaGlsZCBhcyBEb21FbGVtZW50O1xuICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9KVxuICAgICk7XG4gICAgaWYgKGRvbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgW10uZm9yRWFjaC5jYWxsKGRvbS5hdHRyaWJ1dGVzLCAocHJvcDogQXR0cikgPT4gKHZub2RlLnByb3BzW3Byb3Aubm9kZU5hbWVdID0gcHJvcC5ub2RlVmFsdWUpKTtcbiAgICB9XG4gICAgdm5vZGUuZG9tID0gZG9tO1xuICAgIHJldHVybiB2bm9kZSBhcyBWbm9kZVdpdGhEb207XG4gIH1cbn1cblxuY29uc3QgdHJ1c3QgPSAoaHRtbFN0cmluZzogc3RyaW5nKTogQ2hpbGRyZW4gPT4ge1xuICBsZXQgZGl2ID0gY3JlYXRlRG9tRWxlbWVudChcImRpdlwiKTtcbiAgZGl2LmlubmVySFRNTCA9IGh0bWxTdHJpbmcudHJpbSgpO1xuXG4gIHJldHVybiBbXS5tYXAuY2FsbChkaXYuY2hpbGROb2RlcywgKGl0ZW0pID0+IGRvbVRvVm5vZGUoaXRlbSkpIGFzIENoaWxkcmVuO1xufTtcblxuY29uc3QgcmVzZXJ2ZWRQcm9wczogUmVzZXJ2ZWRQcm9wcyA9IHtcbiAga2V5OiB0cnVlLFxuICBzdGF0ZTogdHJ1ZSxcbiAgb25jcmVhdGU6IHRydWUsXG4gIG9udXBkYXRlOiB0cnVlLFxuICBvbnJlbW92ZTogdHJ1ZSxcbiAgc2hvdWxkdXBkYXRlOiB0cnVlLFxuICBcInYtb25jZVwiOiB0cnVlLFxuXG4gIC8vIEJ1aWx0IGluIGRpcmVjdGl2ZXNcbiAgXCJ2LWlmXCI6IHRydWUsXG4gIFwidi11bmxlc3NcIjogdHJ1ZSxcbiAgXCJ2LWZvclwiOiB0cnVlLFxuICBcInYtc2hvd1wiOiB0cnVlLFxuICBcInYtY2xhc3NcIjogdHJ1ZSxcbiAgXCJ2LWh0bWxcIjogdHJ1ZVxufTtcblxuLyoqKiBNb3VudCAqKiovXG5cbmNvbnN0IGN1cnJlbnQ6IEN1cnJlbnQgPSB7fTtcblxuZnVuY3Rpb24gb25DbGVhbnVwKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICBpZiAoY3VycmVudC5hcHA/Lm9uQ2xlYW51cC5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICBjdXJyZW50LmFwcD8ub25DbGVhbnVwLnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uVW5tb3VudChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgaWYgKGN1cnJlbnQuYXBwPy5vblVubW91bnQuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgY3VycmVudC5hcHA/Lm9uVW5tb3VudC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbk1vdW50KGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICBpZiAoY3VycmVudC5hcHA/Lm9uTW91bnQuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgY3VycmVudC5hcHA/Lm9uTW91bnQucHVzaChjYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25VcGRhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gIGlmIChjdXJyZW50LmFwcD8ub25VcGRhdGUuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgY3VycmVudC5hcHA/Lm9uVXBkYXRlLnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5cbi8qXG4gICogTW91bnRzIGEgY29tcG9uZW50IHRvIHRoZSBET01cbiAgbW91bnQoJyNhcHAnLCAoKSA9PiA8ZGl2PkhlbGxvIHdvcmxkPC9kaXY+KTsgLy8gQXBwIGlzIGEgRnVuY3Rpb25hbCBDb21wb25lbnRcbiAgbW91bnQoJyNhcHAnLCB7IHZpZXc6ICgpID0+IDxkaXY+SGVsbG8gd29ybGQ8L2Rpdj4gfSk7IC8vIEFwcCBpcyBhIFBPSk8gY29tcG9uZW50IHdpdGggYSB2aWV3IG1ldGhvZFxuICBtb3VudCgnI2FwcCcsIGNsYXNzSW5zdGFuY2UpOyAvLyBBcHAgaXMgYSBjbGFzcyBpbnN0YW5jZSB3aXRoIGEgdmlldyBtZXRob2RcbiAgbW91bnQoJyNhcHAnLCA8QXBwPjxkaXY+SGVsbG8gd29ybGQ8L2Rpdj48L0FwcD4pOyAvLyBBcHAgaXMgYSBWbm9kZSBjb21wb25lbnQgKFZub2RlIHdpdGggdGFnIF9fY29tcG9uZW50X18pXG4qL1xuXG5mdW5jdGlvbiBtb3VudChjb250YWluZXI6IERvbUVsZW1lbnQgfCBzdHJpbmcsIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQgfCBJVm5vZGUpOiB2b2lkIHwgc3RyaW5nIHtcbiAgbGV0IGFwcENvbnRhaW5lciA9IG51bGw7XG5cbiAgaWYgKGlzTm9kZUpzKSB7XG4gICAgYXBwQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGNyZWF0ZURvbUVsZW1lbnQoY29udGFpbmVyID09PSBcInN2Z1wiID8gXCJzdmdcIiA6IFwiZGl2XCIsIGNvbnRhaW5lciA9PT0gXCJzdmdcIikgOiBjb250YWluZXI7XG4gIH0gZWxzZSB7XG4gICAgYXBwQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY29udGFpbmVyKVswXSA6IGNvbnRhaW5lcjtcbiAgfVxuXG4gIGlmICghYXBwQ29udGFpbmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udGFpbmVyIG5vdCBmb3VuZFwiKTtcbiAgfVxuXG4gIGxldCB2bm9kZUNvbXBvbmVudDogVm5vZGVDb21wb25lbnQgfCBJVm5vZGU7XG5cbiAgaWYgKGlzVm5vZGVDb21wb25lbnQoY29tcG9uZW50KSkge1xuICAgIHZub2RlQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9IGVsc2UgaWYgKGlzQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICB2bm9kZUNvbXBvbmVudCA9IHYoY29tcG9uZW50LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tcG9uZW50IG11c3QgYmUgYSBWYWx5cmlhbiBDb21wb25lbnQgb3IgYSBWbm9kZSBjb21wb25lbnRcIik7XG4gIH1cblxuICBpZiAoY29tcG9uZW50W1ZhbHlyaWFuU3ltYm9sXSkge1xuICAgIHVubW91bnQoY29tcG9uZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnRbVmFseXJpYW5TeW1ib2xdID0ge1xuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIGV2ZW50TGlzdGVuZXJOYW1lczoge30sXG4gICAgICBvbkNsZWFudXA6IFtdLFxuICAgICAgb25Nb3VudDogW10sXG4gICAgICBvblVwZGF0ZTogW10sXG4gICAgICBvblVubW91bnQ6IFtdXG4gICAgfTtcbiAgICBmdW5jdGlvbiBldmVudExpc3RlbmVyKGU6IEV2ZW50KSB7XG4gICAgICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICBsZXQgbmFtZSA9IGB2LW9uJHtlLnR5cGV9YDtcbiAgICAgIHdoaWxlIChkb20pIHtcbiAgICAgICAgaWYgKGRvbVtuYW1lXSkge1xuICAgICAgICAgIGRvbVtuYW1lXShlLCBkb20pO1xuICAgICAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICB1cGRhdGUoY29tcG9uZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRvbSA9IGRvbS5wYXJlbnROb2RlIGFzIERvbUVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbXBvbmVudFtWYWx5cmlhblN5bWJvbF0uZXZlbnRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7XG4gIH1cblxuICBjb21wb25lbnRbVmFseXJpYW5TeW1ib2xdLmNvbXBvbmVudCA9IHZub2RlQ29tcG9uZW50O1xuICBjb21wb25lbnRbVmFseXJpYW5TeW1ib2xdLmNvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcbiAgY29tcG9uZW50W1ZhbHlyaWFuU3ltYm9sXS5tYWluVm5vZGUgPSBkb21Ub1Zub2RlKGFwcENvbnRhaW5lcik7XG5cbiAgLy8gdXBkYXRlXG4gIHJldHVybiB1cGRhdGUoY29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gY2FsbENsZWFudXAodmFseXJpYW5BcHA6IFZhbHlyaWFuQXBwKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFseXJpYW5BcHAub25DbGVhbnVwLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFseXJpYW5BcHAub25DbGVhbnVwW2ldKCk7XG4gIH1cbiAgdmFseXJpYW5BcHAub25DbGVhbnVwID0gW107XG59XG5cbmZ1bmN0aW9uIGNhbGxVbm1vdW50KHZhbHlyaWFuQXBwOiBWYWx5cmlhbkFwcCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHlyaWFuQXBwLm9uVW5tb3VudC5sZW5ndGg7IGkrKykge1xuICAgIHZhbHlyaWFuQXBwLm9uVW5tb3VudFtpXSgpO1xuICB9XG4gIHZhbHlyaWFuQXBwLm9uVW5tb3VudCA9IFtdO1xufVxuXG5mdW5jdGlvbiBjYWxsTW91bnQodmFseXJpYW5BcHA6IFZhbHlyaWFuQXBwKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFseXJpYW5BcHAub25Nb3VudC5sZW5ndGg7IGkrKykge1xuICAgIHZhbHlyaWFuQXBwLm9uTW91bnRbaV0oKTtcbiAgfVxuICB2YWx5cmlhbkFwcC5vbk1vdW50ID0gW107XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGUodmFseXJpYW5BcHA6IFZhbHlyaWFuQXBwKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFseXJpYW5BcHAub25VcGRhdGUubGVuZ3RoOyBpKyspIHtcbiAgICB2YWx5cmlhbkFwcC5vblVwZGF0ZVtpXSgpO1xuICB9XG4gIHZhbHlyaWFuQXBwLm9uVXBkYXRlID0gW107XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZShjb21wb25lbnQ/OiBWYWx5cmlhbkNvbXBvbmVudCB8IElWbm9kZSk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudFtWYWx5cmlhblN5bWJvbF0pIHtcbiAgICBsZXQgdmFseXJpYW5BcHAgPSBjb21wb25lbnRbVmFseXJpYW5TeW1ib2xdO1xuICAgIGN1cnJlbnQuYXBwID0gdmFseXJpYW5BcHA7XG4gICAgdmFseXJpYW5BcHAub25DbGVhbnVwLmxlbmd0aCAmJiBjYWxsQ2xlYW51cCh2YWx5cmlhbkFwcCk7XG4gICAgbGV0IG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsID0gdmFseXJpYW5BcHAubWFpblZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgICB2YWx5cmlhbkFwcC5tYWluVm5vZGUgPSBuZXcgVm5vZGUodmFseXJpYW5BcHAubWFpblZub2RlLnRhZywgdmFseXJpYW5BcHAubWFpblZub2RlLnByb3BzLCBbdmFseXJpYW5BcHAuY29tcG9uZW50XSkgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHZhbHlyaWFuQXBwLm1haW5Wbm9kZS5kb20gPSBvbGRWbm9kZS5kb207XG4gICAgcGF0Y2godmFseXJpYW5BcHAubWFpblZub2RlLCBvbGRWbm9kZSwgdmFseXJpYW5BcHApO1xuICAgIG9sZFZub2RlID0gbnVsbDtcbiAgICBpZiAodmFseXJpYW5BcHAuaXNNb3VudGVkID09PSBmYWxzZSkge1xuICAgICAgdmFseXJpYW5BcHAub25Nb3VudC5sZW5ndGggJiYgY2FsbE1vdW50KHZhbHlyaWFuQXBwKTtcbiAgICAgIHZhbHlyaWFuQXBwLmlzTW91bnRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHlyaWFuQXBwLm9uVXBkYXRlLmxlbmd0aCAmJiBjYWxsVXBkYXRlKHZhbHlyaWFuQXBwKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb2RlSnMpIHtcbiAgICAgIHJldHVybiB2YWx5cmlhbkFwcC5tYWluVm5vZGUuZG9tLmlubmVySFRNTDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudChjb21wb25lbnQ/OiBWYWx5cmlhbkNvbXBvbmVudCB8IElWbm9kZSk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAoIWNvbXBvbmVudCB8fCAhY29tcG9uZW50W1ZhbHlyaWFuU3ltYm9sXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCB2YWx5cmlhbkFwcCA9IGNvbXBvbmVudFtWYWx5cmlhblN5bWJvbF0gYXMgTW91bnRlZFZhbHlyaWFuQXBwO1xuXG4gIGlmICh2YWx5cmlhbkFwcC5pc01vdW50ZWQpIHtcbiAgICB2YWx5cmlhbkFwcC5vbkNsZWFudXAubGVuZ3RoICYmIGNhbGxDbGVhbnVwKHZhbHlyaWFuQXBwKTtcbiAgICB2YWx5cmlhbkFwcC5vblVubW91bnQubGVuZ3RoICYmIGNhbGxVbm1vdW50KHZhbHlyaWFuQXBwKTtcbiAgICBsZXQgb2xkVm5vZGU6IFZub2RlV2l0aERvbSB8IG51bGwgPSB2YWx5cmlhbkFwcC5tYWluVm5vZGUgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHZhbHlyaWFuQXBwLm1haW5Wbm9kZSA9IG5ldyBWbm9kZSh2YWx5cmlhbkFwcC5tYWluVm5vZGUudGFnLCB2YWx5cmlhbkFwcC5tYWluVm5vZGUucHJvcHMsIFtdKSBhcyBWbm9kZVdpdGhEb207XG4gICAgdmFseXJpYW5BcHAubWFpblZub2RlLmRvbSA9IG9sZFZub2RlLmRvbTtcbiAgICB2YWx5cmlhbkFwcC5tYWluVm5vZGUuaXNTVkcgPSBvbGRWbm9kZS5pc1NWRztcbiAgICBwYXRjaCh2YWx5cmlhbkFwcC5tYWluVm5vZGUsIG9sZFZub2RlLCB2YWx5cmlhbkFwcCk7XG4gICAgb2xkVm5vZGUgPSBudWxsO1xuXG4gICAgaWYgKGlzTm9kZUpzKSB7XG4gICAgICByZXR1cm4gdmFseXJpYW5BcHAubWFpblZub2RlLmRvbS5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgKHZhbHlyaWFuQXBwIGFzIGFueSkgPSBudWxsO1xuICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoY29tcG9uZW50LCBWYWx5cmlhblN5bWJvbCk7XG4gIH1cbn1cblxubGV0IGVtcHR5Vm5vZGUgPSBuZXcgVm5vZGUoXCJfX2VtcHR5X19cIiwge30sIFtdKTtcblxuZnVuY3Rpb24gb25yZW1vdmUodm5vZGU6IElWbm9kZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdm5vZGUuY2hpbGRyZW5baV0udGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKHZub2RlLmNoaWxkcmVuW2ldKTtcbiAgfVxuXG4gIHZub2RlLnByb3BzLm9ucmVtb3ZlICYmIHZub2RlLnByb3BzLm9ucmVtb3ZlKHZub2RlKTtcbn1cblxuZnVuY3Rpb24gc2hhcmVkU2V0QXR0cmlidXRlKHByb3A6IHN0cmluZywgdmFsdWU6IGFueSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pOiB2b2lkIHwgYm9vbGVhbiB7XG4gIC8vIEl0IGlzIGEgcmVzZXJ2ZWQgcHJvcFxuICBpZiAocmVzZXJ2ZWRQcm9wc1twcm9wXSkge1xuICAgIC8vIElmIGl0IGlzIGEgZGlyZWN0aXZlIG5hbWUgY2FsbCB0aGUgZGlyZWN0aXZlXG4gICAgaWYgKGRpcmVjdGl2ZXNbcHJvcF0pIHtcbiAgICAgIHJldHVybiBkaXJlY3RpdmVzW3Byb3BdKHZub2RlLnByb3BzW3Byb3BdLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEl0IGlzIG5vdCBhIHJlc2VydmVkIHByb3Agc28gd2UgYWRkIGl0IHRvIHRoZSBkb21cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbGV0IHZhbHlyaWFuQXBwID0gY3VycmVudC5hcHAgYXMgTW91bnRlZFZhbHlyaWFuQXBwO1xuICAgIGlmIChwcm9wIGluIHZhbHlyaWFuQXBwLmV2ZW50TGlzdGVuZXJOYW1lcyA9PT0gZmFsc2UpIHtcbiAgICAgIHZhbHlyaWFuQXBwLmV2ZW50TGlzdGVuZXJOYW1lc1twcm9wXSA9IHRydWU7XG4gICAgICB2YWx5cmlhbkFwcC5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihwcm9wLnNsaWNlKDIpLCB2YWx5cmlhbkFwcC5ldmVudExpc3RlbmVyKTtcbiAgICB9XG4gICAgdm5vZGUuZG9tW2B2LSR7cHJvcH1gXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wIGluIHZub2RlLmRvbSAmJiB2bm9kZS5pc1NWRyA9PT0gZmFsc2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgaWYgKHZub2RlLmRvbVtwcm9wXSAhPSB2YWx1ZSkge1xuICAgICAgdm5vZGUuZG9tW3Byb3BdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFVzZSBzZXQgYXR0cmlidXRlXG4gIGlmICghb2xkVm5vZGUgfHwgb2xkVm5vZGUucHJvcHNbcHJvcF0gIT09IHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgdm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm5vZGUuZG9tLnNldEF0dHJpYnV0ZShwcm9wLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKSB7XG4gIHZub2RlLnByb3BzW25hbWVdID0gdmFsdWU7XG5cbiAgc2hhcmVkU2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKSB7XG4gIGZvciAobGV0IHByb3AgaW4gdm5vZGUucHJvcHMpIHtcbiAgICBpZiAoc2hhcmVkU2V0QXR0cmlidXRlKHByb3AsIHZub2RlLnByb3BzW3Byb3BdLCB2bm9kZSwgb2xkVm5vZGUpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbGRWbm9kZSkge1xuICAgIGZvciAobGV0IHByb3AgaW4gb2xkVm5vZGUucHJvcHMpIHtcbiAgICAgIGlmIChwcm9wIGluIHZub2RlLnByb3BzID09PSBmYWxzZSAmJiB0eXBlb2Ygb2xkVm5vZGUucHJvcHNbcHJvcF0gIT09IFwiZnVuY3Rpb25cIiAmJiBwcm9wIGluIHJlc2VydmVkUHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChwcm9wIGluIG9sZFZub2RlLmRvbSAmJiB2bm9kZS5pc1NWRyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBvbGRWbm9kZS5kb21bcHJvcF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9sZFZub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHBhdGNoKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBJVm5vZGUgPSBlbXB0eVZub2RlLCB2YWx5cmlhbkFwcDogTW91bnRlZFZhbHlyaWFuQXBwKSB7XG4gIGN1cnJlbnQudm5vZGUgPSBuZXdWbm9kZTtcbiAgY3VycmVudC5vbGRWbm9kZSA9IG9sZFZub2RlID09PSBlbXB0eVZub2RlID8gVW5kIDogKG9sZFZub2RlIGFzIFZub2RlV2l0aERvbSk7XG4gIGxldCBuZXdUcmVlID0gbmV3Vm5vZGUuY2hpbGRyZW47XG4gIGxldCBvbGRUcmVlID0gb2xkVm5vZGUuY2hpbGRyZW47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIGlmIChjaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZykge1xuICAgICAgICBpZiAoY2hpbGRWbm9kZS50YWcgPT09IENvbXBvbmVudFN0cmluZykge1xuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBjaGlsZFZub2RlLmNvbXBvbmVudCBhcyBWYWx5cmlhbkNvbXBvbmVudDtcbiAgICAgICAgICBjdXJyZW50LmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gKFwidmlld1wiIGluIGNvbXBvbmVudCA/IGNvbXBvbmVudC52aWV3IDogY29tcG9uZW50KS5jYWxsKGNvbXBvbmVudCwgY2hpbGRWbm9kZS5wcm9wcywgLi4uY2hpbGRWbm9kZS5jaGlsZHJlbik7XG5cbiAgICAgICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIHJlc3VsdCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRWbm9kZS5pc1NWRyA9IG5ld1Zub2RlLmlzU1ZHIHx8IGNoaWxkVm5vZGUudGFnID09PSBcInN2Z1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZFZub2RlKSkge1xuICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxLCAuLi5jaGlsZFZub2RlKTtcbiAgICB9IGVsc2UgaWYgKGNoaWxkVm5vZGUgPT09IG51bGwgfHwgY2hpbGRWbm9kZSA9PT0gVW5kKSB7XG4gICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdUcmVlW2ldID0gbmV3IFZub2RlKFRleHRTdHJpbmcsIHt9LCBbXSk7XG4gICAgICBuZXdUcmVlW2ldLm5vZGVWYWx1ZSA9IGNoaWxkVm5vZGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IG9sZFRyZWVMZW5ndGggPSBvbGRUcmVlLmxlbmd0aDtcbiAgbGV0IG5ld1RyZWVMZW5ndGggPSBuZXdUcmVlLmxlbmd0aDtcblxuICAvLyBJZiBuZXcgdHJlZSBpcyBlbXB0eSwgcmVtb3ZlIGFsbCBvbGQgbm9kZXNcbiAgaWYgKG5ld1RyZWVMZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgb2xkVHJlZVtpXS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgfVxuXG4gICAgbmV3Vm5vZGUuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiB0aGUgdHJlZSBpcyBrZXllZCBsaXN0IGFuZCBpcyBub3QgZmlyc3QgcmVuZGVyIGFuZCBvbGQgdHJlZSBpcyBrZXllZCBsaXN0IHRvb1xuICBpZiAob2xkVHJlZUxlbmd0aCAmJiBcImtleVwiIGluIG5ld1RyZWVbMF0ucHJvcHMgJiYgXCJrZXlcIiBpbiBvbGRUcmVlWzBdLnByb3BzKSB7XG4gICAgbGV0IG9sZEtleWVkTGlzdDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRLZXllZExpc3Rbb2xkVHJlZVtpXS5wcm9wcy5rZXldID0gaTtcbiAgICB9XG5cbiAgICBsZXQgbmV3S2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0tleWVkTGlzdFtuZXdUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG4gICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbb2xkS2V5ZWRMaXN0W2NoaWxkVm5vZGUucHJvcHMua2V5XV07XG4gICAgICBsZXQgc2hvdWxkUGF0Y2ggPSB0cnVlO1xuXG4gICAgICBpZiAob2xkQ2hpbGRWbm9kZSkge1xuICAgICAgICBjaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICBpZiAoXCJ2LW9uY2VcIiBpbiBjaGlsZFZub2RlLnByb3BzIHx8IChjaGlsZFZub2RlLnByb3BzLnNob3VsZHVwZGF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLnNob3VsZHVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGlzIHBhdGNoXG4gICAgICAgICAgY2hpbGRWbm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgc2hvdWxkUGF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRBdHRyaWJ1dGVzKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgIGlmICh2YWx5cmlhbkFwcC5pc01vdW50ZWQpIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBjcmVhdGVEb21FbGVtZW50KGNoaWxkVm5vZGUudGFnLCBjaGlsZFZub2RlLmlzU1ZHKTtcbiAgICAgICAgc2V0QXR0cmlidXRlcyhjaGlsZFZub2RlKTtcbiAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gPT09IFVuZCkge1xuICAgICAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQoY2hpbGRWbm9kZS5kb20pO1xuICAgICAgfSBlbHNlIGlmIChuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSAhPT0gY2hpbGRWbm9kZS5kb20pIHtcbiAgICAgICAgb2xkVHJlZVtpXSAmJiBuZXdLZXllZExpc3Rbb2xkVHJlZVtpXS5wcm9wcy5rZXldID09PSBVbmQgJiYgb25yZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQoY2hpbGRWbm9kZS5kb20sIG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgc2hvdWxkUGF0Y2ggJiYgcGF0Y2goY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSwgdmFseXJpYW5BcHApO1xuICAgIH1cblxuICAgIC8vIEZvciB0aGUgcmVzdCBvZiB0aGUgY2hpbGRyZW4sIHdlIHNob3VsZCByZW1vdmUgdGhlbVxuICAgIGZvciAobGV0IGkgPSBuZXdUcmVlTGVuZ3RoOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmV3S2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSA9PT0gVW5kKSB7XG4gICAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICAgICAgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUgJiYgb2xkQ2hpbGRWbm9kZS5kb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRDaGlsZFZub2RlLmRvbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgbmV3IHRyZWUgYW5kIG9sZCB0cmVlIGhhdmUgbW9yZSB0aGFuIG9uZSBjaGlsZCwgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgZG9tXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5ld0NoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuXG4gICAgLy8gT2xkIGNoaWxkIGV4aXN0c1xuICAgIGlmIChpIDwgb2xkVHJlZUxlbmd0aCkge1xuICAgICAgbGV0IG9sZENoaWxkVm5vZGUgPSBvbGRUcmVlW2ldO1xuICAgICAgLy8gTmV3IGNoaWxkIGlzIGEgdGV4dCBub2RlXG4gICAgICBpZiAobmV3Q2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgICAgLy8gT2xkIGNoaWxkIGlzIGEgdGV4dCBub2RlXG4gICAgICAgIGlmIChvbGRDaGlsZFZub2RlLnRhZyA9PT0gVGV4dFN0cmluZykge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICAgIGlmIChuZXdDaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgIT0gbmV3Q2hpbGRWbm9kZS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tLm5vZGVWYWx1ZSA9IG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbGQgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlIGFzIHN0cmluZykgYXMgdW5rbm93biBhcyBEb21FbGVtZW50O1xuICAgICAgICBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChuZXdDaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20pO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBOZXcgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgICAgLy8gT2xkIGNoaWxkIGlzIHRoZSBzYW1lIHR5cGUgYXMgbmV3IGNoaWxkXG4gICAgICBpZiAob2xkQ2hpbGRWbm9kZS50YWcgPT09IG5ld0NoaWxkVm5vZGUudGFnKSB7XG4gICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSB2LW9uY2UgZGlyZWN0aXZlIG9yIGEgc2hvdWxkdXBkYXRlIG1ldGhvZCB0aGF0IHJldHVybnMgZmFsc2UsIHdlIHNraXAgdGhlIHVwZGF0ZVxuICAgICAgICBpZiAobmV3Q2hpbGRWbm9kZS5wcm9wc1tcInYtb25jZVwiXSB8fCAobmV3Q2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUobmV3Q2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUuY2hpbGRyZW4gPSBvbGRDaGlsZFZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgdXBkYXRlIHRoZSBkb20gZWxlbWVudFxuICAgICAgICBzZXRBdHRyaWJ1dGVzKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBpZiAodmFseXJpYW5BcHAuaXNNb3VudGVkKSB7XG4gICAgICAgICAgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZSAmJiBuZXdDaGlsZFZub2RlLnByb3BzLm9udXBkYXRlKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhdGNoKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUsIHZhbHlyaWFuQXBwKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE9sZCBjaGlsZCBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gbmV3IGNoaWxkXG4gICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQobmV3Q2hpbGRWbm9kZS50YWcsIG5ld0NoaWxkVm5vZGUuaXNTVkcpO1xuICAgICAgc2V0QXR0cmlidXRlcyhuZXdDaGlsZFZub2RlKTtcbiAgICAgIG9sZENoaWxkVm5vZGUudGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKG9sZENoaWxkVm5vZGUpO1xuICAgICAgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKG5ld0NoaWxkVm5vZGUpO1xuICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChuZXdDaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20pO1xuICAgICAgcGF0Y2gobmV3Q2hpbGRWbm9kZSwgZW1wdHlWbm9kZSwgdmFseXJpYW5BcHApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gT2xkIGNoaWxkIGRvZXMgbm90IGV4aXN0c1xuICAgIC8vIE5ldyBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgIGlmIChuZXdDaGlsZFZub2RlLnRhZyA9PT0gVGV4dFN0cmluZykge1xuICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmcpIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChuZXdDaGlsZFZub2RlLmRvbSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBOZXcgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChuZXdDaGlsZFZub2RlLnRhZywgbmV3Q2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgc2V0QXR0cmlidXRlcyhuZXdDaGlsZFZub2RlKTtcbiAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20pO1xuICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICBwYXRjaChuZXdDaGlsZFZub2RlLCBlbXB0eVZub2RlLCB2YWx5cmlhbkFwcCk7XG4gIH1cblxuICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGNoaWxkcmVuLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW1cbiAgZm9yIChsZXQgaSA9IG5ld1RyZWVMZW5ndGg7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbaV07XG4gICAgb2xkQ2hpbGRWbm9kZS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgb2xkQ2hpbGRWbm9kZS5kb20ucGFyZW50Tm9kZSAmJiBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG9sZENoaWxkVm5vZGUuZG9tKTtcbiAgfVxufVxuXG4vKioqIERpcmVjdGl2ZXMgKioqL1xuXG5mdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBsZXQgZnVsbE5hbWUgPSBgdi0ke25hbWV9YDtcbiAgZGlyZWN0aXZlc1tmdWxsTmFtZV0gPSBkaXJlY3RpdmU7XG4gIHJlc2VydmVkUHJvcHNbZnVsbE5hbWVdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGlkZURpcmVjdGl2ZSh0ZXN0OiBib29sZWFuKTogRGlyZWN0aXZlIHtcbiAgcmV0dXJuIChib29sOiBib29sZWFuLCB2bm9kZTogSVZub2RlLCBvbGRWbm9kZT86IElWbm9kZSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IHRlc3QgPyBib29sIDogIWJvb2w7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsZXQgbmV3ZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICBpZiAob2xkVm5vZGUgJiYgb2xkVm5vZGUuZG9tICYmIG9sZFZub2RlLmRvbS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG9sZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRWbm9kZSk7XG4gICAgICAgIG9sZFZub2RlLmRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdkb20sIG9sZFZub2RlLmRvbSk7XG4gICAgICB9XG4gICAgICB2bm9kZS50YWcgPSBUZXh0U3RyaW5nO1xuICAgICAgdm5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHZub2RlLnByb3BzID0ge307XG4gICAgICB2bm9kZS5kb20gPSBuZXdkb20gYXMgdW5rbm93biBhcyBEb21FbGVtZW50O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgZGlyZWN0aXZlczogRGlyZWN0aXZlcyA9IHtcbiAgXCJ2LWlmXCI6IGhpZGVEaXJlY3RpdmUoZmFsc2UpLFxuICBcInYtdW5sZXNzXCI6IGhpZGVEaXJlY3RpdmUodHJ1ZSksXG4gIFwidi1mb3JcIjogKHNldDogdW5rbm93bltdLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSBzZXQubWFwKHZub2RlLmNoaWxkcmVuWzBdKTtcbiAgfSxcbiAgXCJ2LXNob3dcIjogKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAodm5vZGUuZG9tIGFzIHVua25vd24gYXMgeyBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfSB9KS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSxcbiAgXCJ2LWNsYXNzXCI6IChjbGFzc2VzOiB7IFt4OiBzdHJpbmddOiBib29sZWFuIH0sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBmb3IgKGxldCBuYW1lIGluIGNsYXNzZXMpIHtcbiAgICAgICh2bm9kZS5kb20gYXMgRG9tRWxlbWVudCkuY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCBjbGFzc2VzW25hbWVdKTtcbiAgICB9XG4gIH0sXG4gIFwidi1odG1sXCI6IChodG1sOiBzdHJpbmcsIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IFt0cnVzdChodG1sKV07XG4gIH0sXG4gIFwidi1tb2RlbFwiOiAoW21vZGVsLCBwcm9wZXJ0eSwgZXZlbnRdOiBhbnlbXSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBsZXQgdmFsdWU7XG4gICAgbGV0IGhhbmRsZXI7XG4gICAgaWYgKHZub2RlLm5hbWUgPT09IFwiaW5wdXRcIikge1xuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uaW5wdXRcIjtcbiAgICAgIHN3aXRjaCAodm5vZGUucHJvcHMudHlwZSkge1xuICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjoge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgICAgIGxldCBpZHggPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWwpO1xuICAgICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2bm9kZS5kb20udmFsdWUpICE9PSAtMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiB2bm9kZS5wcm9wcykge1xuICAgICAgICAgICAgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUucHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XSA9IHZub2RlLnByb3BzLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgdmFsdWUsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJhZGlvXCI6IHtcbiAgICAgICAgICBzZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUuZG9tLnZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBzZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBtb2RlbFtwcm9wZXJ0eV0sIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLm5hbWUgPT09IFwic2VsZWN0XCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmNsaWNrXCI7XG4gICAgICBpZiAodm5vZGUucHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBsZXQgdmFsID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZTtcbiAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICBsZXQgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoMCwgbW9kZWxbcHJvcGVydHldLmxlbmd0aCk7XG4gICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IElWbm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBJVm5vZGUpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSB2YWx1ZSA9PT0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS5uYW1lID09PSBcInRleHRhcmVhXCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmlucHV0XCI7XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFttb2RlbFtwcm9wZXJ0eV1dO1xuICAgIH1cblxuICAgIGlmICghdm5vZGUucHJvcHNbZXZlbnRdKSB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWUpO1xuICAgICAgfVxuICAgICAgc2V0QXR0cmlidXRlKGV2ZW50LCBoYW5kbGVyLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqKiBQbHVnaW5zICoqKi9cbmNvbnN0IHBsdWdpbnMgPSBuZXcgTWFwPFBsdWdpbiwgYW55PigpO1xuXG5mdW5jdGlvbiB1c2UocGx1Z2luOiBQbHVnaW4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhbnk+KTogdm9pZCB8IGFueSB7XG4gIGlmIChwbHVnaW5zLmhhcyhwbHVnaW4pKSB7XG4gICAgcmV0dXJuIHBsdWdpbnMuZ2V0KHBsdWdpbik7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gcGx1Z2luKHYsIG9wdGlvbnMpO1xuICBwbHVnaW5zLnNldChwbHVnaW4sIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiogSHlwZXJzY3JpcHQgKioqL1xuXG5leHBvcnQgY29uc3QgdjogVmFseXJpYW4gPSBmdW5jdGlvbiB2KHRhZ09yQ29tcG9uZW50OiBzdHJpbmcgfCBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM6IFByb3BzLCAuLi5jaGlsZHJlbjogQ2hpbGRyZW4pOiBJVm5vZGUgfCBWbm9kZUNvbXBvbmVudCB7XG4gIGlmICh0eXBlb2YgdGFnT3JDb21wb25lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gbmV3IFZub2RlKHRhZ09yQ29tcG9uZW50LCBwcm9wcyB8fCB7fSwgY2hpbGRyZW4pO1xuICB9XG5cbiAgY29uc3Qgdm5vZGUgPSBuZXcgVm5vZGUoXCJfX2NvbXBvbmVudF9fXCIsIHByb3BzIHx8IHt9LCBjaGlsZHJlbik7XG4gIHZub2RlLmNvbXBvbmVudCA9IHRhZ09yQ29tcG9uZW50O1xuICByZXR1cm4gdm5vZGUgYXMgVm5vZGVDb21wb25lbnQ7XG59O1xuXG52LmZyYWdtZW50ID0gKHByb3BzOiBQcm9wcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKTogQ2hpbGRyZW4gPT4ge1xuICByZXR1cm4gY2hpbGRyZW47XG59O1xuXG4vKioqIFYgcHJvcGVydGllcyBhbmQgbWV0aG9kcyAqKiovXG4vLyBUaGlzIGlzIGludGVuZGVkIHRvIG1ha2UgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgYXZhaWxhYmxlIGZvciBwbHVnaW5zXG52LmN1cnJlbnQgPSBjdXJyZW50O1xuXG52LmRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzO1xuXG52LnJlc2VydmVkUHJvcHMgPSByZXNlcnZlZFByb3BzO1xuXG52LmlzVm5vZGUgPSBpc1Zub2RlO1xudi5pc0NvbXBvbmVudCA9IGlzQ29tcG9uZW50O1xudi5pc1Zub2RlQ29tcG9uZW50ID0gaXNWbm9kZUNvbXBvbmVudDtcblxudi5pc05vZGVKcyA9IGlzTm9kZUpzO1xudi50cnVzdCA9IHRydXN0O1xuXG52Lm9uQ2xlYW51cCA9IG9uQ2xlYW51cDtcbnYub25Vbm1vdW50ID0gb25Vbm1vdW50O1xudi5vbk1vdW50ID0gb25Nb3VudDtcbnYub25VcGRhdGUgPSBvblVwZGF0ZTtcblxudi5tb3VudCA9IG1vdW50O1xudi51bm1vdW50ID0gdW5tb3VudDtcbnYudXBkYXRlID0gdXBkYXRlO1xuXG52LnNldEF0dHJpYnV0ZSA9IHNldEF0dHJpYnV0ZTtcbnYuZGlyZWN0aXZlID0gZGlyZWN0aXZlO1xudi51c2UgPSB1c2U7XG4iXX0=
|
package/lib/index.ts
CHANGED
|
@@ -53,26 +53,29 @@ function createDomElement(tag: string, isSVG: boolean = false) {
|
|
|
53
53
|
return isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tag) : document.createElement(tag);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
function domToVnode(dom: DomElement): VnodeWithDom {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
56
|
+
function domToVnode(dom: DomElement): void | VnodeWithDom {
|
|
57
|
+
if (dom.nodeType === 1 || dom.nodeType === 3) {
|
|
58
|
+
let vnode = v(
|
|
59
|
+
dom.tagName.toLowerCase(),
|
|
60
|
+
{},
|
|
61
|
+
...Array.from(dom.childNodes)
|
|
62
|
+
.filter((child) => child.nodeType === 1 || child.nodeType === 3)
|
|
63
|
+
.map((child) => {
|
|
64
|
+
if (child.nodeType === 1) {
|
|
65
|
+
return domToVnode(child as DomElement);
|
|
66
|
+
}
|
|
67
|
+
let text = new Vnode(TextString, {}, []);
|
|
68
|
+
text.nodeValue = String(child.nodeValue);
|
|
69
|
+
text.dom = child as DomElement;
|
|
70
|
+
return text;
|
|
71
|
+
})
|
|
72
|
+
);
|
|
73
|
+
if (dom.nodeType === 1) {
|
|
74
|
+
[].forEach.call(dom.attributes, (prop: Attr) => (vnode.props[prop.nodeName] = prop.nodeValue));
|
|
75
|
+
}
|
|
76
|
+
vnode.dom = dom;
|
|
77
|
+
return vnode as VnodeWithDom;
|
|
78
|
+
}
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
const trust = (htmlString: string): Children => {
|
package/package.json
CHANGED
package/plugins/router.js
CHANGED
|
@@ -218,22 +218,24 @@ function plugin(v) {
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
v.directive("route", (url, vnode, oldnode) => {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
221
|
+
v.setAttribute("href", url, vnode, oldnode);
|
|
222
|
+
v.setAttribute(
|
|
223
|
+
"onclick",
|
|
224
|
+
(e) => {
|
|
225
|
+
if (typeof url === "string" && url.length > 0) {
|
|
226
|
+
if (url.charAt(0) !== "/") {
|
|
227
|
+
let current = routerOrComponent.current.split("?", 2).shift().split("/");
|
|
228
|
+
current.pop();
|
|
229
|
+
url = `${current.join("/")}/${url}`;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
routerOrComponent.go(url);
|
|
228
233
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
v.setAttribute("href", vnode, oldnode);
|
|
236
|
-
v.setAttribute("onclick", vnode, oldnode);
|
|
234
|
+
e.preventDefault();
|
|
235
|
+
},
|
|
236
|
+
vnode,
|
|
237
|
+
oldnode
|
|
238
|
+
);
|
|
237
239
|
});
|
|
238
240
|
};
|
|
239
241
|
}
|