@datagrok/eda 1.1.18 → 1.1.20
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/CHANGELOG.md +9 -0
- package/dist/902.js +1 -1
- package/dist/{191bd97af33c713bf78e.wasm → f5343e2c2e15952ce916.wasm} +0 -0
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +5 -3
- package/scripts/func.json +1 -1
- package/src/eda-tools.ts +1 -1
- package/src/package.ts +62 -66
- package/src/pls/pls-constants.ts +129 -0
- package/src/pls/pls-tools.ts +376 -0
- package/src/utils.ts +10 -2
- package/wasm/EDA.js +8 -1
- package/wasm/EDA.wasm +0 -0
- package/wasm/PLS/PLS.h +2 -1
- package/wasm/PLS/pls.cpp +3 -2
- package/wasm/plsExport.cpp +21 -16
- package/webpack.config.js +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# EDA changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.20 (2024-04-16)
|
|
4
|
+
|
|
5
|
+
Improve dimensionality reduction dialog.
|
|
6
|
+
|
|
7
|
+
## 1.1.19 (2024-04-15)
|
|
8
|
+
|
|
9
|
+
* PLS components computation
|
|
10
|
+
* Update UI for `Multivariate Analysis` - main feature & demo app
|
|
11
|
+
|
|
3
12
|
## 1.1.18 (2024-04-15)
|
|
4
13
|
|
|
5
14
|
Fixed webGPU numeric distance with 0 range
|
package/dist/902.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[902],{6845:(t,n,e)=>{e.d(n,{P:()=>a}),t=e.hmd(t);var r,a=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t){var n,a,o=void 0!==(t=t||{})?t:{};o.ready=new Promise((function(t,e){n=t,a=e}));var s,i=Object.assign({},o),u=[],c="object"==typeof window,f="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(c||f)&&(f?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",f&&(s=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var p,m,h=o.printErr||console.warn.bind(console);Object.assign(o,i),i=null,o.arguments&&(u=o.arguments),o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(p=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&F("no native wasm support detected");var d,y,_,w,b,A=!1,C="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function E(t,n){return t?function(t,n,e){for(var r=n+e,a=n;t[a]&&!(a>=r);)++a;if(a-n>16&&t.buffer&&C)return C.decode(t.subarray(n,a));for(var o="";n<a;){var s=t[n++];if(128&s){var i=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|i<<6|u:(7&s)<<18|i<<12|u<<6|63&t[n++])<65536)o+=String.fromCharCode(s);else{var c=s-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&s)<<6|i)}else o+=String.fromCharCode(s)}return o}(_,t,n):""}function v(t){d=t,o.HEAP8=y=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=w=new Int32Array(t),o.HEAPU8=_=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=b=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}o.INITIAL_MEMORY;var g=[],R=[],S=[],k=0,I=null,P=null;function F(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),A=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw a(n),n}var x,L;function M(t){return t.startsWith("data:application/octet-stream;base64,")}function O(t){try{if(t==x&&p)return new Uint8Array(p);if(s)return s(t);throw"both async and sync fetching of the wasm failed"}catch(t){F(t)}}function T(t){for(;t.length>0;)t.shift()(o)}function H(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){b[this.ptr+4>>2]=t},this.get_type=function(){return b[this.ptr+4>>2]},this.set_destructor=function(t){b[this.ptr+8>>2]=t},this.get_destructor=function(){return b[this.ptr+8>>2]},this.set_refcount=function(t){w[this.ptr>>2]=t},this.set_caught=function(t){t=t?1:0,y[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=y[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,y[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=y[this.ptr+13>>0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var t=w[this.ptr>>2];w[this.ptr>>2]=t+1},this.release_ref=function(){var t=w[this.ptr>>2];return w[this.ptr>>2]=t-1,1===t},this.set_adjusted_ptr=function(t){b[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return b[this.ptr+16>>2]},this.get_exception_ptr=function(){if(V(this.get_type()))return b[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function j(t){try{return m.grow(t-d.byteLength+65535>>>16),v(m.buffer),1}catch(t){}}function B(t){return o["_"+t]}function D(t,n,e,r,a){var o={string:t=>{var n=0;if(null!=t&&0!==t){var e=1+(t.length<<2);!function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var a=e+r-1,o=0;o<t.length;++o){var s=t.charCodeAt(o);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++o)),s<=127){if(e>=a)break;n[e++]=s}else if(s<=2047){if(e+1>=a)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=a)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=a)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,_,n,e)}(t,n=q(e),e)}return n},array:t=>{var n=q(t.length);return function(t,n){y.set(t,n)}(t,n),n}},s=B(t),i=[],u=0;if(r)for(var c=0;c<r.length;c++){var f=o[e[c]];f?(0===u&&(u=z()),i[c]=f(r[c])):i[c]=r[c]}var l=s.apply(null,i);return function(t){return 0!==u&&N(u),function(t){return"string"===n?E(t):"boolean"===n?Boolean(t):t}(t)}(l)}M(x="EDA.wasm")||(L=x,x=o.locateFile?o.locateFile(L,l):l+L);var U,W={a:function(t,n,e,r){F("Assertion failed: "+E(t)+", at: "+[n?E(n):"unknown filename",e,r?E(r):"unknown function"])},b:function(t,n,e){throw new H(t).init(n,e),t},d:function(t,n,e){_.copyWithin(t,n,n+e)},c:function(t){var n,e=_.length,r=2147483648;if((t>>>=0)>r)return!1;for(var a=1;a<=4;a*=2){var o=e*(1+.2/a);if(o=Math.min(o,t+100663296),j(Math.min(r,(n=Math.max(t,o))+(65536-n%65536)%65536)))return!0}return!1}},z=(function(){var t={a:W};function n(t,n){var e,r=t.exports;o.asm=r,v((m=o.asm.e).buffer),o.asm.i,e=o.asm.f,R.unshift(e),function(t){if(k--,o.monitorRunDependencies&&o.monitorRunDependencies(k),0==k&&(null!==I&&(clearInterval(I),I=null),P)){var n=P;P=null,n()}}()}function r(t){n(t.instance)}function s(n){return(p||!c&&!f||"function"!=typeof fetch?Promise.resolve().then((function(){return O(x)})):fetch(new URL(e(1328),e.b)).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+x+"'";return t.arrayBuffer()})).catch((function(){return O(x)}))).then((function(n){return WebAssembly.instantiate(n,t)})).then((function(t){return t})).then(n,(function(t){h("failed to asynchronously prepare wasm: "+t),F(t)}))}if(k++,o.monitorRunDependencies&&o.monitorRunDependencies(k),o.instantiateWasm)try{return o.instantiateWasm(t,n)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),a(t)}(p||"function"!=typeof WebAssembly.instantiateStreaming||M(x)||"function"!=typeof fetch?s(r):fetch(new URL(e(1328),e.b)).then((function(n){return WebAssembly.instantiateStreaming(n,t).then(r,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),s(r)}))}))).catch(a)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.f).apply(null,arguments)},o._principalComponentAnalysis=function(){return(o._principalComponentAnalysis=o.asm.g).apply(null,arguments)},o._error=function(){return(o._error=o.asm.h).apply(null,arguments)},o._free=function(){return(o._free=o.asm.j).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.k).apply(null,arguments)},o._partialLeastSquareRegression=function(){return(o._partialLeastSquareRegression=o.asm.l).apply(null,arguments)},o._generateDataset=function(){return(o._generateDataset=o.asm.m).apply(null,arguments)},o._normalizeDataset=function(){return(o._normalizeDataset=o.asm.n).apply(null,arguments)},o._trainLSSVM=function(){return(o._trainLSSVM=o.asm.o).apply(null,arguments)},o._predictByLSSVM=function(){return(o._predictByLSSVM=o.asm.p).apply(null,arguments)},o._trainAndAnalyzeLSSVM=function(){return(o._trainAndAnalyzeLSSVM=o.asm.q).apply(null,arguments)},o.stackSave=function(){return(z=o.stackSave=o.asm.r).apply(null,arguments)}),N=o.stackRestore=function(){return(N=o.stackRestore=o.asm.s).apply(null,arguments)},q=o.stackAlloc=function(){return(q=o.stackAlloc=o.asm.t).apply(null,arguments)},V=o.___cxa_is_pointer_type=function(){return(V=o.___cxa_is_pointer_type=o.asm.u).apply(null,arguments)};function Y(t){function e(){U||(U=!0,o.calledRun=!0,A||(T(R),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),S.unshift(t);var t;T(S)}()))}t=t||u,k>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),g.unshift(t);var t;T(g)}(),k>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),e()}),1)):e()))}if(o.ccall=D,o.cwrap=function(t,n,e,r){var a=(e=e||[]).every((t=>"number"===t||"boolean"===t));return"string"!==n&&a&&!r?B(t):function(){return D(t,n,e,arguments)}},P=function t(){U||Y(),U||(P=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return Y(),t.ready});"object"==typeof exports?t.exports=a:"function"==typeof define&&e.amdO?define([],(function(){return a})):"object"==typeof exports&&(exports.exportEDA=a)},2086:(t,n,e)=>{e.d(n,{Gz:()=>w});const r="num",a="floatColumn",o="intColumn",s="floatColumns",i="newFloatColumns",u="intColumns",c="newIntColumns",f="newFloatColumn",l="newIntColumn",p="int",m="double",h="number",d={intColumn:"HEAP32",floatColumn:"HEAPF32",floatColumns:"HEAPF32",newFloatColumns:"HEAPF32",intColumns:"HEAP32",newIntColumns:"HEAP32",newFloatColumn:"HEAPF32",newIntColumn:"HEAP32"},y={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array},_={intColumn:2,floatColumn:2,floatColumns:2,newFloatColumns:2,intColumns:2,newIntColumns:2,newFloatColumn:2,newIntColumn:2};function w(t,n,e,w){!function(t,n){for(const e of n){const n=e.type;switch(n){case r:case p:case m:break;case o:case a:case f:case l:e.data.buf=t._malloc(e.data.numOfRows*y[n].BYTES_PER_ELEMENT);break;case u:case c:case s:case i:e.data.buf=t._malloc(e.data.numOfRows*e.data.numOfColumns*y[n].BYTES_PER_ELEMENT)}}}(t,n),function(t,n){let e,i;for(const c of n){const n=c.type;switch(n){case r:case p:case m:break;case o:case a:e=_[n],i=t[d[n]],i.set(c.data.array,c.data.buf>>e);break;case u:case s:e=_[n],i=t[d[n]];let f=y[n].BYTES_PER_ELEMENT,l=c.data.buf,h=c.data.numOfColumns,w=c.data.numOfRows,b=c.data.arrays;for(let t=0;t<h;t++)i.set(b[t],l+t*w*f>>e)}}}(t,n);let b=function(t){let n=[];for(const e of t)switch(e.type){case r:case p:case m:n.push(e.data);break;case o:case a:case f:case l:n.push(e.data.buf),n.push(e.data.numOfRows);break;case u:case c:case s:case i:n.push(e.data.buf),n.push(e.data.numOfRows),n.push(e.data.numOfColumns)}return n}(n),A=function(t){let n=[];for(const e of t)switch(e.type){case r:case p:case m:n.push(h);break;case o:case a:case f:case l:n.push(h),n.push(h);break;case u:case c:case s:case i:n.push(h),n.push(h),n.push(h)}return n}(n),C=t.ccall(e,w,A,b);return function(t,n){let e,h,_,w,b;for(const A of n){const n=A.type;switch(n){case r:case p:case m:case o:case a:case s:case u:break;case f:case l:e=t[d[n]],h=A.data.numOfRows,w=y[n].BYTES_PER_ELEMENT,b=A.data.buf;let C=new y[n](h);for(let t=0;t<h;t++)C[t]=e[b/w+t];A.array=C;break;case c:case i:e=t[d[n]],h=A.data.numOfRows,_=A.data.numOfColumns,w=y[n].BYTES_PER_ELEMENT,b=A.data.buf;let E=[];for(let t=0;t<_;t++){let r=new y[n](h);for(let n=0;n<h;n++)r[n]=e[b/w+n+t*h];E.push(r)}A.arrays=E}}}(t,n),function(t,n){for(const e of n)switch(e.type){case r:case p:case m:break;case o:case a:case u:case c:case s:case i:case f:case l:t._free(e.data.buf)}}(t,n),C}},1328:(t,n,e)=>{t.exports=e.p+"191bd97af33c713bf78e.wasm"}}]);
|
|
1
|
+
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[902],{6845:(t,n,e)=>{e.d(n,{P:()=>a}),t=e.hmd(t);var r,a=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t){var n,a,o=void 0!==(t=t||{})?t:{};o.ready=new Promise((function(t,e){n=t,a=e}));var s,i=Object.assign({},o),u=[],c="object"==typeof window,f="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(c||f)&&(f?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",f&&(s=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var p,m,h=o.printErr||console.warn.bind(console);Object.assign(o,i),i=null,o.arguments&&(u=o.arguments),o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(p=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&F("no native wasm support detected");var d,y,_,w,b,A=!1,C="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function E(t,n){return t?function(t,n,e){for(var r=n+e,a=n;t[a]&&!(a>=r);)++a;if(a-n>16&&t.buffer&&C)return C.decode(t.subarray(n,a));for(var o="";n<a;){var s=t[n++];if(128&s){var i=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|i<<6|u:(7&s)<<18|i<<12|u<<6|63&t[n++])<65536)o+=String.fromCharCode(s);else{var c=s-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&s)<<6|i)}else o+=String.fromCharCode(s)}return o}(_,t,n):""}function v(t){d=t,o.HEAP8=y=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=w=new Int32Array(t),o.HEAPU8=_=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=b=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}o.INITIAL_MEMORY;var g=[],R=[],S=[],k=0,I=null,P=null;function F(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),A=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw a(n),n}var x,L;function M(t){return t.startsWith("data:application/octet-stream;base64,")}function O(t){try{if(t==x&&p)return new Uint8Array(p);if(s)return s(t);throw"both async and sync fetching of the wasm failed"}catch(t){F(t)}}function T(t){for(;t.length>0;)t.shift()(o)}function H(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){b[this.ptr+4>>2]=t},this.get_type=function(){return b[this.ptr+4>>2]},this.set_destructor=function(t){b[this.ptr+8>>2]=t},this.get_destructor=function(){return b[this.ptr+8>>2]},this.set_refcount=function(t){w[this.ptr>>2]=t},this.set_caught=function(t){t=t?1:0,y[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=y[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,y[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=y[this.ptr+13>>0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var t=w[this.ptr>>2];w[this.ptr>>2]=t+1},this.release_ref=function(){var t=w[this.ptr>>2];return w[this.ptr>>2]=t-1,1===t},this.set_adjusted_ptr=function(t){b[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return b[this.ptr+16>>2]},this.get_exception_ptr=function(){if(V(this.get_type()))return b[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function j(t){try{return m.grow(t-d.byteLength+65535>>>16),v(m.buffer),1}catch(t){}}function B(t){return o["_"+t]}function D(t,n,e,r,a){var o={string:t=>{var n=0;if(null!=t&&0!==t){var e=1+(t.length<<2);!function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var a=e+r-1,o=0;o<t.length;++o){var s=t.charCodeAt(o);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++o)),s<=127){if(e>=a)break;n[e++]=s}else if(s<=2047){if(e+1>=a)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=a)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=a)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,_,n,e)}(t,n=q(e),e)}return n},array:t=>{var n=q(t.length);return function(t,n){y.set(t,n)}(t,n),n}},s=B(t),i=[],u=0;if(r)for(var c=0;c<r.length;c++){var f=o[e[c]];f?(0===u&&(u=z()),i[c]=f(r[c])):i[c]=r[c]}var l=s.apply(null,i);return function(t){return 0!==u&&N(u),function(t){return"string"===n?E(t):"boolean"===n?Boolean(t):t}(t)}(l)}M(x="EDA.wasm")||(L=x,x=o.locateFile?o.locateFile(L,l):l+L);var U,W={a:function(t,n,e,r){F("Assertion failed: "+E(t)+", at: "+[n?E(n):"unknown filename",e,r?E(r):"unknown function"])},b:function(t,n,e){throw new H(t).init(n,e),t},d:function(t,n,e){_.copyWithin(t,n,n+e)},c:function(t){var n,e=_.length,r=2147483648;if((t>>>=0)>r)return!1;for(var a=1;a<=4;a*=2){var o=e*(1+.2/a);if(o=Math.min(o,t+100663296),j(Math.min(r,(n=Math.max(t,o))+(65536-n%65536)%65536)))return!0}return!1}},z=(function(){var t={a:W};function n(t,n){var e,r=t.exports;o.asm=r,v((m=o.asm.e).buffer),o.asm.i,e=o.asm.f,R.unshift(e),function(t){if(k--,o.monitorRunDependencies&&o.monitorRunDependencies(k),0==k&&(null!==I&&(clearInterval(I),I=null),P)){var n=P;P=null,n()}}()}function r(t){n(t.instance)}function s(n){return(p||!c&&!f||"function"!=typeof fetch?Promise.resolve().then((function(){return O(x)})):fetch(new URL(e(1328),e.b)).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+x+"'";return t.arrayBuffer()})).catch((function(){return O(x)}))).then((function(n){return WebAssembly.instantiate(n,t)})).then((function(t){return t})).then(n,(function(t){h("failed to asynchronously prepare wasm: "+t),F(t)}))}if(k++,o.monitorRunDependencies&&o.monitorRunDependencies(k),o.instantiateWasm)try{return o.instantiateWasm(t,n)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),a(t)}(p||"function"!=typeof WebAssembly.instantiateStreaming||M(x)||"function"!=typeof fetch?s(r):fetch(new URL(e(1328),e.b)).then((function(n){return WebAssembly.instantiateStreaming(n,t).then(r,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),s(r)}))}))).catch(a)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.f).apply(null,arguments)},o._principalComponentAnalysis=function(){return(o._principalComponentAnalysis=o.asm.g).apply(null,arguments)},o._error=function(){return(o._error=o.asm.h).apply(null,arguments)},o._free=function(){return(o._free=o.asm.j).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.k).apply(null,arguments)},o._partialLeastSquareRegression=function(){return(o._partialLeastSquareRegression=o.asm.l).apply(null,arguments)},o._generateDataset=function(){return(o._generateDataset=o.asm.m).apply(null,arguments)},o._normalizeDataset=function(){return(o._normalizeDataset=o.asm.n).apply(null,arguments)},o._trainLSSVM=function(){return(o._trainLSSVM=o.asm.o).apply(null,arguments)},o._predictByLSSVM=function(){return(o._predictByLSSVM=o.asm.p).apply(null,arguments)},o._trainAndAnalyzeLSSVM=function(){return(o._trainAndAnalyzeLSSVM=o.asm.q).apply(null,arguments)},o.stackSave=function(){return(z=o.stackSave=o.asm.r).apply(null,arguments)}),N=o.stackRestore=function(){return(N=o.stackRestore=o.asm.s).apply(null,arguments)},q=o.stackAlloc=function(){return(q=o.stackAlloc=o.asm.t).apply(null,arguments)},V=o.___cxa_is_pointer_type=function(){return(V=o.___cxa_is_pointer_type=o.asm.u).apply(null,arguments)};function Y(t){function e(){U||(U=!0,o.calledRun=!0,A||(T(R),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),S.unshift(t);var t;T(S)}()))}t=t||u,k>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),g.unshift(t);var t;T(g)}(),k>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),e()}),1)):e()))}if(o.ccall=D,o.cwrap=function(t,n,e,r){var a=(e=e||[]).every((t=>"number"===t||"boolean"===t));return"string"!==n&&a&&!r?B(t):function(){return D(t,n,e,arguments)}},P=function t(){U||Y(),U||(P=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return Y(),t.ready});"object"==typeof exports?t.exports=a:"function"==typeof define&&e.amdO?define([],(function(){return a})):"object"==typeof exports&&(exports.exportEDA=a)},2086:(t,n,e)=>{e.d(n,{Gz:()=>w});const r="num",a="floatColumn",o="intColumn",s="floatColumns",i="newFloatColumns",u="intColumns",c="newIntColumns",f="newFloatColumn",l="newIntColumn",p="int",m="double",h="number",d={intColumn:"HEAP32",floatColumn:"HEAPF32",floatColumns:"HEAPF32",newFloatColumns:"HEAPF32",intColumns:"HEAP32",newIntColumns:"HEAP32",newFloatColumn:"HEAPF32",newIntColumn:"HEAP32"},y={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array},_={intColumn:2,floatColumn:2,floatColumns:2,newFloatColumns:2,intColumns:2,newIntColumns:2,newFloatColumn:2,newIntColumn:2};function w(t,n,e,w){!function(t,n){for(const e of n){const n=e.type;switch(n){case r:case p:case m:break;case o:case a:case f:case l:e.data.buf=t._malloc(e.data.numOfRows*y[n].BYTES_PER_ELEMENT);break;case u:case c:case s:case i:e.data.buf=t._malloc(e.data.numOfRows*e.data.numOfColumns*y[n].BYTES_PER_ELEMENT)}}}(t,n),function(t,n){let e,i;for(const c of n){const n=c.type;switch(n){case r:case p:case m:break;case o:case a:e=_[n],i=t[d[n]],i.set(c.data.array,c.data.buf>>e);break;case u:case s:e=_[n],i=t[d[n]];let f=y[n].BYTES_PER_ELEMENT,l=c.data.buf,h=c.data.numOfColumns,w=c.data.numOfRows,b=c.data.arrays;for(let t=0;t<h;t++)i.set(b[t],l+t*w*f>>e)}}}(t,n);let b=function(t){let n=[];for(const e of t)switch(e.type){case r:case p:case m:n.push(e.data);break;case o:case a:case f:case l:n.push(e.data.buf),n.push(e.data.numOfRows);break;case u:case c:case s:case i:n.push(e.data.buf),n.push(e.data.numOfRows),n.push(e.data.numOfColumns)}return n}(n),A=function(t){let n=[];for(const e of t)switch(e.type){case r:case p:case m:n.push(h);break;case o:case a:case f:case l:n.push(h),n.push(h);break;case u:case c:case s:case i:n.push(h),n.push(h),n.push(h)}return n}(n),C=t.ccall(e,w,A,b);return function(t,n){let e,h,_,w,b;for(const A of n){const n=A.type;switch(n){case r:case p:case m:case o:case a:case s:case u:break;case f:case l:e=t[d[n]],h=A.data.numOfRows,w=y[n].BYTES_PER_ELEMENT,b=A.data.buf;let C=new y[n](h);for(let t=0;t<h;t++)C[t]=e[b/w+t];A.array=C;break;case c:case i:e=t[d[n]],h=A.data.numOfRows,_=A.data.numOfColumns,w=y[n].BYTES_PER_ELEMENT,b=A.data.buf;let E=[];for(let t=0;t<_;t++){let r=new y[n](h);for(let n=0;n<h;n++)r[n]=e[b/w+n+t*h];E.push(r)}A.arrays=E}}}(t,n),function(t,n){for(const e of n)switch(e.type){case r:case p:case m:break;case o:case a:case u:case c:case s:case i:case f:case l:t._free(e.data.buf)}}(t,n),C}},1328:(t,n,e)=>{t.exports=e.p+"f5343e2c2e15952ce916.wasm"}}]);
|
|
2
2
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFLSSxhQUNyQkUsRUFBYVosRUFBUS9ILEdBQU13SSxrQkFDM0J4SyxFQUFNb0ssRUFBSUMsS0FBS3JLLElBQ2YsSUFBSTRLLEVBQVMsR0FFYixJQUFJLElBQUlsRyxFQUFJLEVBQUdBLEVBQUl5RyxFQUFXekcsSUFBSyxDQUNoQyxJQUFJTSxFQUFNLElBQUkrRSxFQUFRL0gsR0FBTXVJLEdBRTVCLElBQUksSUFBSWEsRUFBSSxFQUFHQSxFQUFJYixFQUFXYSxJQUMzQnBHLEVBQUlvRyxHQUFLNUcsRUFBS3hFLEVBQU0ySyxFQUFhUyxFQUFJMUcsRUFBSTZGLEdBRTVDSyxFQUFPRyxLQUFLL0YsRUFDZixDQUVBb0YsRUFBSVEsT0FBU0EsRUFRekIsQ0FDSixDQWdOSVMsQ0FBa0JwRSxFQUFRaEQsR0E3TTlCLFNBQThCZ0QsRUFBUWtELEdBQ2xDLElBQUksTUFBTUMsS0FBT0QsRUFDYixPQUFPQyxFQUFJcEksTUFHUCxLQUFLa0gsRUFDTCxLQUFLUyxFQUNMLEtBQUtDLEVBQ0QsTUFHSixLQUFLUixFQUNMLEtBQUtELEVBQ0wsS0FBS0ksRUFDTCxLQUFLQyxFQUNMLEtBQUtILEVBQ0wsS0FBS0MsRUFDTCxLQUFLRyxFQUNMLEtBQUtDLEVBQ0R6QyxFQUFPcUUsTUFBTWxCLEVBQUlDLEtBQUtySyxLQU90QyxDQXNMSXVMLENBQXFCdEUsRUFBUWhELEdBSXRCeUQsQ0FDWCxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9FREFGb3JXZWJXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9jYWxsV2FzbUZvcldlYldvcmtlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCB2YXIgZXhwb3J0RURBID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHVuZGVmaW5lZDtcbiAgXG4gIHJldHVybiAoXG5mdW5jdGlvbihleHBvcnRFREEpIHtcbiAgZXhwb3J0RURBID0gZXhwb3J0RURBIHx8IHt9O1xuXG52YXIgTW9kdWxlPXR5cGVvZiBleHBvcnRFREEhPVwidW5kZWZpbmVkXCI/ZXhwb3J0RURBOnt9O3ZhciByZWFkeVByb21pc2VSZXNvbHZlLHJlYWR5UHJvbWlzZVJlamVjdDtNb2R1bGVbXCJyZWFkeVwiXT1uZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7cmVhZHlQcm9taXNlUmVzb2x2ZT1yZXNvbHZlO3JlYWR5UHJvbWlzZVJlamVjdD1yZWplY3R9KTt2YXIgbW9kdWxlT3ZlcnJpZGVzPU9iamVjdC5hc3NpZ24oe30sTW9kdWxlKTt2YXIgYXJndW1lbnRzXz1bXTt2YXIgdGhpc1Byb2dyYW09XCIuL3RoaXMucHJvZ3JhbVwiO3ZhciBxdWl0Xz0oc3RhdHVzLHRvVGhyb3cpPT57dGhyb3cgdG9UaHJvd307dmFyIEVOVklST05NRU5UX0lTX1dFQj10eXBlb2Ygd2luZG93PT1cIm9iamVjdFwiO3ZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVI9dHlwZW9mIGltcG9ydFNjcmlwdHM9PVwiZnVuY3Rpb25cIjt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT10eXBlb2YgcHJvY2Vzcz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PVwib2JqZWN0XCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PVwic3RyaW5nXCI7dmFyIHNjcmlwdERpcmVjdG9yeT1cIlwiO2Z1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCl7aWYoTW9kdWxlW1wibG9jYXRlRmlsZVwiXSl7cmV0dXJuIE1vZHVsZVtcImxvY2F0ZUZpbGVcIl0ocGF0aCxzY3JpcHREaXJlY3RvcnkpfXJldHVybiBzY3JpcHREaXJlY3RvcnkrcGF0aH12YXIgcmVhZF8scmVhZEFzeW5jLHJlYWRCaW5hcnksc2V0V2luZG93VGl0bGU7aWYoRU5WSVJPTk1FTlRfSVNfV0VCfHxFTlZJUk9OTUVOVF9JU19XT1JLRVIpe2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7c2NyaXB0RGlyZWN0b3J5PXNlbGYubG9jYXRpb24uaHJlZn1lbHNlIGlmKHR5cGVvZiBkb2N1bWVudCE9XCJ1bmRlZmluZWRcIiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCl7c2NyaXB0RGlyZWN0b3J5PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjfWlmKF9zY3JpcHREaXIpe3NjcmlwdERpcmVjdG9yeT1fc2NyaXB0RGlyfWlmKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKFwiYmxvYjpcIikhPT0wKXtzY3JpcHREaXJlY3Rvcnk9c2NyaXB0RGlyZWN0b3J5LnN1YnN0cigwLHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKX1lbHNle3NjcmlwdERpcmVjdG9yeT1cIlwifXtyZWFkXz11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbihcIkdFVFwiLHVybCxmYWxzZSk7eGhyLnNlbmQobnVsbCk7cmV0dXJuIHhoci5yZXNwb25zZVRleHR9O2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7cmVhZEJpbmFyeT11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbihcIkdFVFwiLHVybCxmYWxzZSk7eGhyLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCI7eGhyLnNlbmQobnVsbCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KHhoci5yZXNwb25zZSl9fXJlYWRBc3luYz0odXJsLG9ubG9hZCxvbmVycm9yKT0+e3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5vcGVuKFwiR0VUXCIsdXJsLHRydWUpO3hoci5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO3hoci5vbmxvYWQ9KCk9PntpZih4aHIuc3RhdHVzPT0yMDB8fHhoci5zdGF0dXM9PTAmJnhoci5yZXNwb25zZSl7b25sb2FkKHhoci5yZXNwb25zZSk7cmV0dXJufW9uZXJyb3IoKX07eGhyLm9uZXJyb3I9b25lcnJvcjt4aHIuc2VuZChudWxsKX19c2V0V2luZG93VGl0bGU9dGl0bGU9PmRvY3VtZW50LnRpdGxlPXRpdGxlfWVsc2V7fXZhciBvdXQ9TW9kdWxlW1wicHJpbnRcIl18fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7dmFyIGVycj1Nb2R1bGVbXCJwcmludEVyclwiXXx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihNb2R1bGUsbW9kdWxlT3ZlcnJpZGVzKTttb2R1bGVPdmVycmlkZXM9bnVsbDtpZihNb2R1bGVbXCJhcmd1bWVudHNcIl0pYXJndW1lbnRzXz1Nb2R1bGVbXCJhcmd1bWVudHNcIl07aWYoTW9kdWxlW1widGhpc1Byb2dyYW1cIl0pdGhpc1Byb2dyYW09TW9kdWxlW1widGhpc1Byb2dyYW1cIl07aWYoTW9kdWxlW1wicXVpdFwiXSlxdWl0Xz1Nb2R1bGVbXCJxdWl0XCJdO3ZhciB3YXNtQmluYXJ5O2lmKE1vZHVsZVtcIndhc21CaW5hcnlcIl0pd2FzbUJpbmFyeT1Nb2R1bGVbXCJ3YXNtQmluYXJ5XCJdO3ZhciBub0V4aXRSdW50aW1lPU1vZHVsZVtcIm5vRXhpdFJ1bnRpbWVcIl18fHRydWU7aWYodHlwZW9mIFdlYkFzc2VtYmx5IT1cIm9iamVjdFwiKXthYm9ydChcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIil9dmFyIHdhc21NZW1vcnk7dmFyIEFCT1JUPWZhbHNlO3ZhciBFWElUU1RBVFVTO3ZhciBVVEY4RGVjb2Rlcj10eXBlb2YgVGV4dERlY29kZXIhPVwidW5kZWZpbmVkXCI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp1bmRlZmluZWQ7ZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksaWR4LG1heEJ5dGVzVG9SZWFkKXt2YXIgZW5kSWR4PWlkeCttYXhCeXRlc1RvUmVhZDt2YXIgZW5kUHRyPWlkeDt3aGlsZShoZWFwT3JBcnJheVtlbmRQdHJdJiYhKGVuZFB0cj49ZW5kSWR4KSkrK2VuZFB0cjtpZihlbmRQdHItaWR4PjE2JiZoZWFwT3JBcnJheS5idWZmZXImJlVURjhEZWNvZGVyKXtyZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCxlbmRQdHIpKX12YXIgc3RyPVwiXCI7d2hpbGUoaWR4PGVuZFB0cil7dmFyIHUwPWhlYXBPckFycmF5W2lkeCsrXTtpZighKHUwJjEyOCkpe3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7Y29udGludWV9dmFyIHUxPWhlYXBPckFycmF5W2lkeCsrXSY2MztpZigodTAmMjI0KT09MTkyKXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHUwJjMxKTw8Nnx1MSk7Y29udGludWV9dmFyIHUyPWhlYXBPckFycmF5W2lkeCsrXSY2MztpZigodTAmMjQwKT09MjI0KXt1MD0odTAmMTUpPDwxMnx1MTw8Nnx1Mn1lbHNle3UwPSh1MCY3KTw8MTh8dTE8PDEyfHUyPDw2fGhlYXBPckFycmF5W2lkeCsrXSY2M31pZih1MDw2NTUzNil7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHUwKX1lbHNle3ZhciBjaD11MC02NTUzNjtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Y2g+PjEwLDU2MzIwfGNoJjEwMjMpfX1yZXR1cm4gc3RyfWZ1bmN0aW9uIFVURjhUb1N0cmluZyhwdHIsbWF4Qnl0ZXNUb1JlYWQpe3JldHVybiBwdHI/VVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LHB0cixtYXhCeXRlc1RvUmVhZCk6XCJcIn1mdW5jdGlvbiBzdHJpbmdUb1VURjhBcnJheShzdHIsaGVhcCxvdXRJZHgsbWF4Qnl0ZXNUb1dyaXRlKXtpZighKG1heEJ5dGVzVG9Xcml0ZT4wKSlyZXR1cm4gMDt2YXIgc3RhcnRJZHg9b3V0SWR4O3ZhciBlbmRJZHg9b3V0SWR4K21heEJ5dGVzVG9Xcml0ZS0xO2Zvcih2YXIgaT0wO2k8c3RyLmxlbmd0aDsrK2kpe3ZhciB1PXN0ci5jaGFyQ29kZUF0KGkpO2lmKHU+PTU1Mjk2JiZ1PD01NzM0Myl7dmFyIHUxPXN0ci5jaGFyQ29kZUF0KCsraSk7dT02NTUzNisoKHUmMTAyMyk8PDEwKXx1MSYxMDIzfWlmKHU8PTEyNyl7aWYob3V0SWR4Pj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109dX1lbHNlIGlmKHU8PTIwNDcpe2lmKG91dElkeCsxPj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109MTkyfHU+PjY7aGVhcFtvdXRJZHgrK109MTI4fHUmNjN9ZWxzZSBpZih1PD02NTUzNSl7aWYob3V0SWR4KzI+PWVuZElkeClicmVhaztoZWFwW291dElkeCsrXT0yMjR8dT4+MTI7aGVhcFtvdXRJZHgrK109MTI4fHU+PjYmNjM7aGVhcFtvdXRJZHgrK109MTI4fHUmNjN9ZWxzZXtpZihvdXRJZHgrMz49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPTI0MHx1Pj4xODtoZWFwW291dElkeCsrXT0xMjh8dT4+MTImNjM7aGVhcFtvdXRJZHgrK109MTI4fHU+PjYmNjM7aGVhcFtvdXRJZHgrK109MTI4fHUmNjN9fWhlYXBbb3V0SWR4XT0wO3JldHVybiBvdXRJZHgtc3RhcnRJZHh9ZnVuY3Rpb24gc3RyaW5nVG9VVEY4KHN0cixvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKXtyZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLEhFQVBVOCxvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKX12YXIgYnVmZmVyLEhFQVA4LEhFQVBVOCxIRUFQMTYsSEVBUFUxNixIRUFQMzIsSEVBUFUzMixIRUFQRjMyLEhFQVBGNjQ7ZnVuY3Rpb24gdXBkYXRlR2xvYmFsQnVmZmVyQW5kVmlld3MoYnVmKXtidWZmZXI9YnVmO01vZHVsZVtcIkhFQVA4XCJdPUhFQVA4PW5ldyBJbnQ4QXJyYXkoYnVmKTtNb2R1bGVbXCJIRUFQMTZcIl09SEVBUDE2PW5ldyBJbnQxNkFycmF5KGJ1Zik7TW9kdWxlW1wiSEVBUDMyXCJdPUhFQVAzMj1uZXcgSW50MzJBcnJheShidWYpO01vZHVsZVtcIkhFQVBVOFwiXT1IRUFQVTg9bmV3IFVpbnQ4QXJyYXkoYnVmKTtNb2R1bGVbXCJIRUFQVTE2XCJdPUhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGJ1Zik7TW9kdWxlW1wiSEVBUFUzMlwiXT1IRUFQVTMyPW5ldyBVaW50MzJBcnJheShidWYpO01vZHVsZVtcIkhFQVBGMzJcIl09SEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGJ1Zik7TW9kdWxlW1wiSEVBUEY2NFwiXT1IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoYnVmKX12YXIgSU5JVElBTF9NRU1PUlk9TW9kdWxlW1wiSU5JVElBTF9NRU1PUllcIl18fDI2ODQzNTQ1Njt2YXIgd2FzbVRhYmxlO3ZhciBfX0FUUFJFUlVOX189W107dmFyIF9fQVRJTklUX189W107dmFyIF9fQVRQT1NUUlVOX189W107dmFyIHJ1bnRpbWVJbml0aWFsaXplZD1mYWxzZTtmdW5jdGlvbiBwcmVSdW4oKXtpZihNb2R1bGVbXCJwcmVSdW5cIl0pe2lmKHR5cGVvZiBNb2R1bGVbXCJwcmVSdW5cIl09PVwiZnVuY3Rpb25cIilNb2R1bGVbXCJwcmVSdW5cIl09W01vZHVsZVtcInByZVJ1blwiXV07d2hpbGUoTW9kdWxlW1wicHJlUnVuXCJdLmxlbmd0aCl7YWRkT25QcmVSdW4oTW9kdWxlW1wicHJlUnVuXCJdLnNoaWZ0KCkpfX1jYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pfWZ1bmN0aW9uIGluaXRSdW50aW1lKCl7cnVudGltZUluaXRpYWxpemVkPXRydWU7Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyl9ZnVuY3Rpb24gcG9zdFJ1bigpe2lmKE1vZHVsZVtcInBvc3RSdW5cIl0pe2lmKHR5cGVvZiBNb2R1bGVbXCJwb3N0UnVuXCJdPT1cImZ1bmN0aW9uXCIpTW9kdWxlW1wicG9zdFJ1blwiXT1bTW9kdWxlW1wicG9zdFJ1blwiXV07d2hpbGUoTW9kdWxlW1wicG9zdFJ1blwiXS5sZW5ndGgpe2FkZE9uUG9zdFJ1bihNb2R1bGVbXCJwb3N0UnVuXCJdLnNoaWZ0KCkpfX1jYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKX1mdW5jdGlvbiBhZGRPblByZVJ1bihjYil7X19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpfWZ1bmN0aW9uIGFkZE9uSW5pdChjYil7X19BVElOSVRfXy51bnNoaWZ0KGNiKX1mdW5jdGlvbiBhZGRPblBvc3RSdW4oY2Ipe19fQVRQT1NUUlVOX18udW5zaGlmdChjYil9dmFyIHJ1bkRlcGVuZGVuY2llcz0wO3ZhciBydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsO3ZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtmdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5KGlkKXtydW5EZXBlbmRlbmNpZXMrKztpZihNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKXtNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKHJ1bkRlcGVuZGVuY2llcyl9fWZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpe3J1bkRlcGVuZGVuY2llcy0tO2lmKE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0pe01vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0ocnVuRGVwZW5kZW5jaWVzKX1pZihydW5EZXBlbmRlbmNpZXM9PTApe2lmKHJ1bkRlcGVuZGVuY3lXYXRjaGVyIT09bnVsbCl7Y2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7cnVuRGVwZW5kZW5jeVdhdGNoZXI9bnVsbH1pZihkZXBlbmRlbmNpZXNGdWxmaWxsZWQpe3ZhciBjYWxsYmFjaz1kZXBlbmRlbmNpZXNGdWxmaWxsZWQ7ZGVwZW5kZW5jaWVzRnVsZmlsbGVkPW51bGw7Y2FsbGJhY2soKX19fWZ1bmN0aW9uIGFib3J0KHdoYXQpe2lmKE1vZHVsZVtcIm9uQWJvcnRcIl0pe01vZHVsZVtcIm9uQWJvcnRcIl0od2hhdCl9d2hhdD1cIkFib3J0ZWQoXCIrd2hhdCtcIilcIjtlcnIod2hhdCk7QUJPUlQ9dHJ1ZTtFWElUU1RBVFVTPTE7d2hhdCs9XCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCI7dmFyIGU9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtyZWFkeVByb21pc2VSZWplY3QoZSk7dGhyb3cgZX12YXIgZGF0YVVSSVByZWZpeD1cImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIjtmdW5jdGlvbiBpc0RhdGFVUkkoZmlsZW5hbWUpe3JldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKGRhdGFVUklQcmVmaXgpfXZhciB3YXNtQmluYXJ5RmlsZTt3YXNtQmluYXJ5RmlsZT1cIkVEQS53YXNtXCI7aWYoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpe3dhc21CaW5hcnlGaWxlPWxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpfWZ1bmN0aW9uIGdldEJpbmFyeShmaWxlKXt0cnl7aWYoZmlsZT09d2FzbUJpbmFyeUZpbGUmJndhc21CaW5hcnkpe3JldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KX1pZihyZWFkQmluYXJ5KXtyZXR1cm4gcmVhZEJpbmFyeShmaWxlKX10aHJvd1wiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIn1jYXRjaChlcnIpe2Fib3J0KGVycil9fWZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoKXtpZighd2FzbUJpbmFyeSYmKEVOVklST05NRU5UX0lTX1dFQnx8RU5WSVJPTk1FTlRfSVNfV09SS0VSKSl7aWYodHlwZW9mIGZldGNoPT1cImZ1bmN0aW9uXCIpe3JldHVybiBmZXRjaChuZXcgVVJMKCcuLi93YXNtL0VEQS53YXNtJywgaW1wb3J0Lm1ldGEudXJsKSkudGhlbihmdW5jdGlvbihyZXNwb25zZSl7aWYoIXJlc3BvbnNlW1wib2tcIl0pe3Rocm93XCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIit3YXNtQmluYXJ5RmlsZStcIidcIn1yZXR1cm4gcmVzcG9uc2VbXCJhcnJheUJ1ZmZlclwiXSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZ2V0QmluYXJ5KHdhc21CaW5hcnlGaWxlKX0pfX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBnZXRCaW5hcnkod2FzbUJpbmFyeUZpbGUpfSl9ZnVuY3Rpb24gY3JlYXRlV2FzbSgpe3ZhciBpbmZvPXtcImFcIjphc21MaWJyYXJ5QXJnfTtmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UsbW9kdWxlKXt2YXIgZXhwb3J0cz1pbnN0YW5jZS5leHBvcnRzO01vZHVsZVtcImFzbVwiXT1leHBvcnRzO3dhc21NZW1vcnk9TW9kdWxlW1wiYXNtXCJdW1wiZVwiXTt1cGRhdGVHbG9iYWxCdWZmZXJBbmRWaWV3cyh3YXNtTWVtb3J5LmJ1ZmZlcik7d2FzbVRhYmxlPU1vZHVsZVtcImFzbVwiXVtcImlcIl07YWRkT25Jbml0KE1vZHVsZVtcImFzbVwiXVtcImZcIl0pO3JlbW92ZVJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpfWFkZFJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO2Z1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCl7cmVjZWl2ZUluc3RhbmNlKHJlc3VsdFtcImluc3RhbmNlXCJdKX1mdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKHJlY2VpdmVyKXtyZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZSgpLnRoZW4oZnVuY3Rpb24oYmluYXJ5KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LGluZm8pfSkudGhlbihmdW5jdGlvbihpbnN0YW5jZSl7cmV0dXJuIGluc3RhbmNlfSkudGhlbihyZWNlaXZlcixmdW5jdGlvbihyZWFzb24pe2VycihcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiK3JlYXNvbik7YWJvcnQocmVhc29uKX0pfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoKXtpZighd2FzbUJpbmFyeSYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT1cImZ1bmN0aW9uXCImJiFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpJiZ0eXBlb2YgZmV0Y2g9PVwiZnVuY3Rpb25cIil7cmV0dXJuIGZldGNoKG5ldyBVUkwoJy4uL3dhc20vRURBLndhc20nLCBpbXBvcnQubWV0YS51cmwpKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXt2YXIgcmVzdWx0PVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3BvbnNlLGluZm8pO3JldHVybiByZXN1bHQudGhlbihyZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCxmdW5jdGlvbihyZWFzb24pe2VycihcIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiBcIityZWFzb24pO2VycihcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO3JldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KX0pfSl9ZWxzZXtyZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihyZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCl9fWlmKE1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXSl7dHJ5e3ZhciBleHBvcnRzPU1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXShpbmZvLHJlY2VpdmVJbnN0YW5jZSk7cmV0dXJuIGV4cG9ydHN9Y2F0Y2goZSl7ZXJyKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIrZSk7cmVhZHlQcm9taXNlUmVqZWN0KGUpfX1pbnN0YW50aWF0ZUFzeW5jKCkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtyZXR1cm57fX1mdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3Mpe3doaWxlKGNhbGxiYWNrcy5sZW5ndGg+MCl7Y2FsbGJhY2tzLnNoaWZ0KCkoTW9kdWxlKX19ZnVuY3Rpb24gX19fYXNzZXJ0X2ZhaWwoY29uZGl0aW9uLGZpbGVuYW1lLGxpbmUsZnVuYyl7YWJvcnQoXCJBc3NlcnRpb24gZmFpbGVkOiBcIitVVEY4VG9TdHJpbmcoY29uZGl0aW9uKStcIiwgYXQ6IFwiK1tmaWxlbmFtZT9VVEY4VG9TdHJpbmcoZmlsZW5hbWUpOlwidW5rbm93biBmaWxlbmFtZVwiLGxpbmUsZnVuYz9VVEY4VG9TdHJpbmcoZnVuYyk6XCJ1bmtub3duIGZ1bmN0aW9uXCJdKX1mdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cil7dGhpcy5leGNQdHI9ZXhjUHRyO3RoaXMucHRyPWV4Y1B0ci0yNDt0aGlzLnNldF90eXBlPWZ1bmN0aW9uKHR5cGUpe0hFQVBVMzJbdGhpcy5wdHIrND4+Ml09dHlwZX07dGhpcy5nZXRfdHlwZT1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzQ+PjJdfTt0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKGRlc3RydWN0b3Ipe0hFQVBVMzJbdGhpcy5wdHIrOD4+Ml09ZGVzdHJ1Y3Rvcn07dGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzg+PjJdfTt0aGlzLnNldF9yZWZjb3VudD1mdW5jdGlvbihyZWZjb3VudCl7SEVBUDMyW3RoaXMucHRyPj4yXT1yZWZjb3VudH07dGhpcy5zZXRfY2F1Z2h0PWZ1bmN0aW9uKGNhdWdodCl7Y2F1Z2h0PWNhdWdodD8xOjA7SEVBUDhbdGhpcy5wdHIrMTI+PjBdPWNhdWdodH07dGhpcy5nZXRfY2F1Z2h0PWZ1bmN0aW9uKCl7cmV0dXJuIEhFQVA4W3RoaXMucHRyKzEyPj4wXSE9MH07dGhpcy5zZXRfcmV0aHJvd249ZnVuY3Rpb24ocmV0aHJvd24pe3JldGhyb3duPXJldGhyb3duPzE6MDtIRUFQOFt0aGlzLnB0cisxMz4+MF09cmV0aHJvd259O3RoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIEhFQVA4W3RoaXMucHRyKzEzPj4wXSE9MH07dGhpcy5pbml0PWZ1bmN0aW9uKHR5cGUsZGVzdHJ1Y3Rvcil7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApO3RoaXMuc2V0X3R5cGUodHlwZSk7dGhpcy5zZXRfZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKTt0aGlzLnNldF9yZWZjb3VudCgwKTt0aGlzLnNldF9jYXVnaHQoZmFsc2UpO3RoaXMuc2V0X3JldGhyb3duKGZhbHNlKX07dGhpcy5hZGRfcmVmPWZ1bmN0aW9uKCl7dmFyIHZhbHVlPUhFQVAzMlt0aGlzLnB0cj4+Ml07SEVBUDMyW3RoaXMucHRyPj4yXT12YWx1ZSsxfTt0aGlzLnJlbGVhc2VfcmVmPWZ1bmN0aW9uKCl7dmFyIHByZXY9SEVBUDMyW3RoaXMucHRyPj4yXTtIRUFQMzJbdGhpcy5wdHI+PjJdPXByZXYtMTtyZXR1cm4gcHJldj09PTF9O3RoaXMuc2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbihhZGp1c3RlZFB0cil7SEVBUFUzMlt0aGlzLnB0cisxNj4+Ml09YWRqdXN0ZWRQdHJ9O3RoaXMuZ2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzE2Pj4yXX07dGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe3ZhciBpc1BvaW50ZXI9X19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO2lmKGlzUG9pbnRlcil7cmV0dXJuIEhFQVBVMzJbdGhpcy5leGNQdHI+PjJdfXZhciBhZGp1c3RlZD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtpZihhZGp1c3RlZCE9PTApcmV0dXJuIGFkanVzdGVkO3JldHVybiB0aGlzLmV4Y1B0cn19dmFyIGV4Y2VwdGlvbkxhc3Q9MDt2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudD0wO2Z1bmN0aW9uIF9fX2N4YV90aHJvdyhwdHIsdHlwZSxkZXN0cnVjdG9yKXt2YXIgaW5mbz1uZXcgRXhjZXB0aW9uSW5mbyhwdHIpO2luZm8uaW5pdCh0eXBlLGRlc3RydWN0b3IpO2V4Y2VwdGlvbkxhc3Q9cHRyO3VuY2F1Z2h0RXhjZXB0aW9uQ291bnQrKzt0aHJvdyBwdHJ9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LHNyYyxudW0pe0hFQVBVOC5jb3B5V2l0aGluKGRlc3Qsc3JjLHNyYytudW0pfWZ1bmN0aW9uIGdldEhlYXBNYXgoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpe3RyeXt3YXNtTWVtb3J5Lmdyb3coc2l6ZS1idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KTt1cGRhdGVHbG9iYWxCdWZmZXJBbmRWaWV3cyh3YXNtTWVtb3J5LmJ1ZmZlcik7cmV0dXJuIDF9Y2F0Y2goZSl7fX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKXt2YXIgb2xkU2l6ZT1IRUFQVTgubGVuZ3RoO3JlcXVlc3RlZFNpemU9cmVxdWVzdGVkU2l6ZT4+PjA7dmFyIG1heEhlYXBTaXplPWdldEhlYXBNYXgoKTtpZihyZXF1ZXN0ZWRTaXplPm1heEhlYXBTaXplKXtyZXR1cm4gZmFsc2V9bGV0IGFsaWduVXA9KHgsbXVsdGlwbGUpPT54KyhtdWx0aXBsZS14JW11bHRpcGxlKSVtdWx0aXBsZTtmb3IodmFyIGN1dERvd249MTtjdXREb3duPD00O2N1dERvd24qPTIpe3ZhciBvdmVyR3Jvd25IZWFwU2l6ZT1vbGRTaXplKigxKy4yL2N1dERvd24pO292ZXJHcm93bkhlYXBTaXplPU1hdGgubWluKG92ZXJHcm93bkhlYXBTaXplLHJlcXVlc3RlZFNpemUrMTAwNjYzMjk2KTt2YXIgbmV3U2l6ZT1NYXRoLm1pbihtYXhIZWFwU2l6ZSxhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsb3Zlckdyb3duSGVhcFNpemUpLDY1NTM2KSk7dmFyIHJlcGxhY2VtZW50PWVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIobmV3U2l6ZSk7aWYocmVwbGFjZW1lbnQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpe3ZhciBmdW5jPU1vZHVsZVtcIl9cIitpZGVudF07cmV0dXJuIGZ1bmN9ZnVuY3Rpb24gd3JpdGVBcnJheVRvTWVtb3J5KGFycmF5LGJ1ZmZlcil7SEVBUDguc2V0KGFycmF5LGJ1ZmZlcil9ZnVuY3Rpb24gY2NhbGwoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxhcmdzLG9wdHMpe3ZhciB0b0M9e1wic3RyaW5nXCI6c3RyPT57dmFyIHJldD0wO2lmKHN0ciE9PW51bGwmJnN0ciE9PXVuZGVmaW5lZCYmc3RyIT09MCl7dmFyIGxlbj0oc3RyLmxlbmd0aDw8MikrMTtyZXQ9c3RhY2tBbGxvYyhsZW4pO3N0cmluZ1RvVVRGOChzdHIscmV0LGxlbil9cmV0dXJuIHJldH0sXCJhcnJheVwiOmFycj0+e3ZhciByZXQ9c3RhY2tBbGxvYyhhcnIubGVuZ3RoKTt3cml0ZUFycmF5VG9NZW1vcnkoYXJyLHJldCk7cmV0dXJuIHJldH19O2Z1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpe2lmKHJldHVyblR5cGU9PT1cInN0cmluZ1wiKXtyZXR1cm4gVVRGOFRvU3RyaW5nKHJldCl9aWYocmV0dXJuVHlwZT09PVwiYm9vbGVhblwiKXJldHVybiBCb29sZWFuKHJldCk7cmV0dXJuIHJldH12YXIgZnVuYz1nZXRDRnVuYyhpZGVudCk7dmFyIGNBcmdzPVtdO3ZhciBzdGFjaz0wO2lmKGFyZ3Mpe2Zvcih2YXIgaT0wO2k8YXJncy5sZW5ndGg7aSsrKXt2YXIgY29udmVydGVyPXRvQ1thcmdUeXBlc1tpXV07aWYoY29udmVydGVyKXtpZihzdGFjaz09PTApc3RhY2s9c3RhY2tTYXZlKCk7Y0FyZ3NbaV09Y29udmVydGVyKGFyZ3NbaV0pfWVsc2V7Y0FyZ3NbaV09YXJnc1tpXX19fXZhciByZXQ9ZnVuYy5hcHBseShudWxsLGNBcmdzKTtmdW5jdGlvbiBvbkRvbmUocmV0KXtpZihzdGFjayE9PTApc3RhY2tSZXN0b3JlKHN0YWNrKTtyZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCl9cmV0PW9uRG9uZShyZXQpO3JldHVybiByZXR9ZnVuY3Rpb24gY3dyYXAoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxvcHRzKXthcmdUeXBlcz1hcmdUeXBlc3x8W107dmFyIG51bWVyaWNBcmdzPWFyZ1R5cGVzLmV2ZXJ5KHR5cGU9PnR5cGU9PT1cIm51bWJlclwifHx0eXBlPT09XCJib29sZWFuXCIpO3ZhciBudW1lcmljUmV0PXJldHVyblR5cGUhPT1cInN0cmluZ1wiO2lmKG51bWVyaWNSZXQmJm51bWVyaWNBcmdzJiYhb3B0cyl7cmV0dXJuIGdldENGdW5jKGlkZW50KX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY2NhbGwoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxhcmd1bWVudHMsb3B0cyl9fXZhciBhc21MaWJyYXJ5QXJnPXtcImFcIjpfX19hc3NlcnRfZmFpbCxcImJcIjpfX19jeGFfdGhyb3csXCJkXCI6X2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcImNcIjpfZW1zY3JpcHRlbl9yZXNpemVfaGVhcH07dmFyIGFzbT1jcmVhdGVXYXNtKCk7dmFyIF9fX3dhc21fY2FsbF9jdG9ycz1Nb2R1bGVbXCJfX193YXNtX2NhbGxfY3RvcnNcIl09ZnVuY3Rpb24oKXtyZXR1cm4oX19fd2FzbV9jYWxsX2N0b3JzPU1vZHVsZVtcIl9fX3dhc21fY2FsbF9jdG9yc1wiXT1Nb2R1bGVbXCJhc21cIl1bXCJmXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXM9TW9kdWxlW1wiX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpcz1Nb2R1bGVbXCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNcIl09TW9kdWxlW1wiYXNtXCJdW1wiZ1wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX2Vycm9yPU1vZHVsZVtcIl9lcnJvclwiXT1mdW5jdGlvbigpe3JldHVybihfZXJyb3I9TW9kdWxlW1wiX2Vycm9yXCJdPU1vZHVsZVtcImFzbVwiXVtcImhcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9mcmVlPU1vZHVsZVtcIl9mcmVlXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9mcmVlPU1vZHVsZVtcIl9mcmVlXCJdPU1vZHVsZVtcImFzbVwiXVtcImpcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9tYWxsb2M9TW9kdWxlW1wiX21hbGxvY1wiXT1mdW5jdGlvbigpe3JldHVybihfbWFsbG9jPU1vZHVsZVtcIl9tYWxsb2NcIl09TW9kdWxlW1wiYXNtXCJdW1wia1wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb249TW9kdWxlW1wiX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25cIl09ZnVuY3Rpb24oKXtyZXR1cm4oX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb249TW9kdWxlW1wiX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25cIl09TW9kdWxlW1wiYXNtXCJdW1wibFwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX2dlbmVyYXRlRGF0YXNldD1Nb2R1bGVbXCJfZ2VuZXJhdGVEYXRhc2V0XCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9nZW5lcmF0ZURhdGFzZXQ9TW9kdWxlW1wiX2dlbmVyYXRlRGF0YXNldFwiXT1Nb2R1bGVbXCJhc21cIl1bXCJtXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfbm9ybWFsaXplRGF0YXNldD1Nb2R1bGVbXCJfbm9ybWFsaXplRGF0YXNldFwiXT1mdW5jdGlvbigpe3JldHVybihfbm9ybWFsaXplRGF0YXNldD1Nb2R1bGVbXCJfbm9ybWFsaXplRGF0YXNldFwiXT1Nb2R1bGVbXCJhc21cIl1bXCJuXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfdHJhaW5MU1NWTT1Nb2R1bGVbXCJfdHJhaW5MU1NWTVwiXT1mdW5jdGlvbigpe3JldHVybihfdHJhaW5MU1NWTT1Nb2R1bGVbXCJfdHJhaW5MU1NWTVwiXT1Nb2R1bGVbXCJhc21cIl1bXCJvXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfcHJlZGljdEJ5TFNTVk09TW9kdWxlW1wiX3ByZWRpY3RCeUxTU1ZNXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9wcmVkaWN0QnlMU1NWTT1Nb2R1bGVbXCJfcHJlZGljdEJ5TFNTVk1cIl09TW9kdWxlW1wiYXNtXCJdW1wicFwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX3RyYWluQW5kQW5hbHl6ZUxTU1ZNPU1vZHVsZVtcIl90cmFpbkFuZEFuYWx5emVMU1NWTVwiXT1mdW5jdGlvbigpe3JldHVybihfdHJhaW5BbmRBbmFseXplTFNTVk09TW9kdWxlW1wiX3RyYWluQW5kQW5hbHl6ZUxTU1ZNXCJdPU1vZHVsZVtcImFzbVwiXVtcInFcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIHN0YWNrU2F2ZT1Nb2R1bGVbXCJzdGFja1NhdmVcIl09ZnVuY3Rpb24oKXtyZXR1cm4oc3RhY2tTYXZlPU1vZHVsZVtcInN0YWNrU2F2ZVwiXT1Nb2R1bGVbXCJhc21cIl1bXCJyXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBzdGFja1Jlc3RvcmU9TW9kdWxlW1wic3RhY2tSZXN0b3JlXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKHN0YWNrUmVzdG9yZT1Nb2R1bGVbXCJzdGFja1Jlc3RvcmVcIl09TW9kdWxlW1wiYXNtXCJdW1wic1wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgc3RhY2tBbGxvYz1Nb2R1bGVbXCJzdGFja0FsbG9jXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKHN0YWNrQWxsb2M9TW9kdWxlW1wic3RhY2tBbGxvY1wiXT1Nb2R1bGVbXCJhc21cIl1bXCJ0XCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfX19jeGFfaXNfcG9pbnRlcl90eXBlPU1vZHVsZVtcIl9fX2N4YV9pc19wb2ludGVyX3R5cGVcIl09ZnVuY3Rpb24oKXtyZXR1cm4oX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1Nb2R1bGVbXCJfX19jeGFfaXNfcG9pbnRlcl90eXBlXCJdPU1vZHVsZVtcImFzbVwiXVtcInVcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07TW9kdWxlW1wiY2NhbGxcIl09Y2NhbGw7TW9kdWxlW1wiY3dyYXBcIl09Y3dyYXA7dmFyIGNhbGxlZFJ1bjtkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9ZnVuY3Rpb24gcnVuQ2FsbGVyKCl7aWYoIWNhbGxlZFJ1bilydW4oKTtpZighY2FsbGVkUnVuKWRlcGVuZGVuY2llc0Z1bGZpbGxlZD1ydW5DYWxsZXJ9O2Z1bmN0aW9uIHJ1bihhcmdzKXthcmdzPWFyZ3N8fGFyZ3VtZW50c187aWYocnVuRGVwZW5kZW5jaWVzPjApe3JldHVybn1wcmVSdW4oKTtpZihydW5EZXBlbmRlbmNpZXM+MCl7cmV0dXJufWZ1bmN0aW9uIGRvUnVuKCl7aWYoY2FsbGVkUnVuKXJldHVybjtjYWxsZWRSdW49dHJ1ZTtNb2R1bGVbXCJjYWxsZWRSdW5cIl09dHJ1ZTtpZihBQk9SVClyZXR1cm47aW5pdFJ1bnRpbWUoKTtyZWFkeVByb21pc2VSZXNvbHZlKE1vZHVsZSk7aWYoTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0pTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0oKTtwb3N0UnVuKCl9aWYoTW9kdWxlW1wic2V0U3RhdHVzXCJdKXtNb2R1bGVbXCJzZXRTdGF0dXNcIl0oXCJSdW5uaW5nLi4uXCIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiXCIpfSwxKTtkb1J1bigpfSwxKX1lbHNle2RvUnVuKCl9fWlmKE1vZHVsZVtcInByZUluaXRcIl0pe2lmKHR5cGVvZiBNb2R1bGVbXCJwcmVJbml0XCJdPT1cImZ1bmN0aW9uXCIpTW9kdWxlW1wicHJlSW5pdFwiXT1bTW9kdWxlW1wicHJlSW5pdFwiXV07d2hpbGUoTW9kdWxlW1wicHJlSW5pdFwiXS5sZW5ndGg+MCl7TW9kdWxlW1wicHJlSW5pdFwiXS5wb3AoKSgpfX1ydW4oKTtcblxuXG4gIHJldHVybiBleHBvcnRFREEucmVhZHlcbn1cbik7XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRFREE7XG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXG4gIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBleHBvcnRFREE7IH0pO1xuZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuICBleHBvcnRzW1wiZXhwb3J0RURBXCJdID0gZXhwb3J0RURBO1xuIiwiLy8gVXRpbGl0aWVzIGZvciBjYWxsaW5nIHdhc20tZnVuY3Rpb25zIHZpYSB3ZWJ3b3JrZXIuXG5cbi8vIFdlIHVzZSBhbiBhcHByb2FjaCB0aGF0IGlzIHdlbGwgZGVzY3JpYmVkIGhlcmU6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG4vLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBmb3IgdXNhZ2UgaW4gREFUQUdST0suXG5cbi8vIENvbnN0YW50cyBmb3Igd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VycyBydW50aW1lIHN5c3RlbVxuY29uc3QgVFlQRSA9ICd0eXBlJztcbmNvbnN0IE5VTV9UWVBFID0gJ251bSc7XG5jb25zdCBGTE9BVF9DT0xVTU5fVFlQRSA9ICdmbG9hdENvbHVtbic7XG5jb25zdCBJTlRfQ09MVU1OX1RZUEUgPSAnaW50Q29sdW1uJztcbmNvbnN0IEZMT0FUX0NPTFVNTlNfVFlQRSA9ICdmbG9hdENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSA9ICduZXdGbG9hdENvbHVtbnMnO1xuY29uc3QgSU5UX0NPTFVNTlNfVFlQRSA9ICdpbnRDb2x1bW5zJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OU19UWVBFID0gJ25ld0ludENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFID0gJ25ld0Zsb2F0Q29sdW1uJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OX1RZUEUgPSAnbmV3SW50Q29sdW1uJztcbmNvbnN0IENPTFVNTiA9ICdjb2x1bW4nO1xuY29uc3QgQ0FMTF9SRVNVTFQgPSAnX2NhbGxSZXN1bHQnO1xuY29uc3QgTlVNX09GX1JPV1MgPSAnbnVtT2ZSb3dzJztcbmNvbnN0IE5VTV9PRl9DT0xVTU5TID0gJ251bU9mQ29sdW1ucyc7XG5jb25zdCBSRUYgPSAncmVmJztcbmNvbnN0IFZBTFVFID0gJ3ZhbHVlJztcbmNvbnN0IFRBQkxFX09GX0NPTFVNTlMgPSAndGFibGVGcm9tQ29sdW1ucyc7XG5jb25zdCBPQkpFQ1RTID0gJ29iamVjdHMnO1xuY29uc3QgSU5UX1RZUEUgPSAnaW50JztcbmNvbnN0IERPVUJMRV9UWVBFID0gJ2RvdWJsZSc7XG5jb25zdCBOVU1CRVIgPSAnbnVtYmVyJztcblxuLy8gVHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlLlxuLy8gSXQgaXMgcmVxdWlyZWQgZm9yIEpTLW1vZHVsZSBnZW5lcmF0ZWQgYnkgRW1zY3JpcHRlbixcbi8vIGFuZCBpdCBpcyB1c2VkLCB3aGVuIHBhc3NpbmcgYXJyYXkgZGF0YSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG5jb25zdCBoZWFwTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBcIkhFQVAzMlwiXG4gICAgICAgICAgICAgICAgfTtcblxuLy8gVHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBtYW5pcHVsYXRpbmcgY29sdW1uKHMpLlxuY29uc3QgdHlwZU1hcCA9IHtcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbic6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiBJbnQzMkFycmF5LCAgXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogSW50MzJBcnJheVxuICAgICAgICAgICAgICAgIH07IFxuXG4vLyBUeXBlLXRvLXNoaWZ0IG1hcC5cbi8vIEl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3IFxuY29uc3Qgc2hpZnRNYXAgPSB7J2ludENvbHVtbic6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogMiwgIFxuICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAyLFxuICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IDJcbiAgICAgICAgICAgICAgICAgfTsgICAgICAgICBcblxuLy8gR2V0IGlucHV0IGZvciBDKystZnVuY3Rpb24uXG4vLyBUaGlzIGZ1bmN0aW9uIHRha2VzIHNwZWNpZmljYXRpb24gb2YgYXJndW1lbnRzIChhcmdzU3BlY2lmaWNhdGlvbikgJiBpbnB1dCBkYXRhIChpbnB1dFZhbHMpXG4vLyBhbmQgcmV0dXJucyBpbnB1dCB0aGF0IHdpbGwgYmUgZnVydGhlciB1c2VkIGluIGNwcC93YXNtLWZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENwcElucHV0KGFyZ3NTcGVjaWZpY2F0aW9uLCBpbnB1dFZhbHMpIHtcbiAgICBsZXQgY3BwRnVuY0lucHV0ID0gW107XG4gICAgbGV0IHJlZjtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGNvbnN0IGtleSBpbiBhcmdzU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcmcgPSBhcmdzU3BlY2lmaWNhdGlvbltrZXldOyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PT0gQ0FMTF9SRVNVTFQpICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gaGVyZSwgd2UgY29uc2lkZXIgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgICAgIHN3aXRjaCh0eXBlKSB7ICAgICAgICAgICBcbiBcbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBpbnB1dFZhbHNbaV07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW4gYW5kIHRhcmdldCB0eXBlIGNvaW5zaWRlXG4gICAgICAgICAgICAgICAgLy9hcnJheSA9IGlucHV0VmFsc1tpXS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29sID0gaW5wdXRWYWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSwgd2UgY2hlY2sgdHlwZXMgYW5kIHBlcmZvcm0gYW4gYXBwcm9wcmlhdGUgdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgaWYoICggKGNvbC50eXBlID09PSBJTlRfVFlQRSkgJiYgKHR5cGUgPT09IElOVF9DT0xVTU5fVFlQRSkgKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8qaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSBGTE9BVF9DT0xVTU5fVFlQRSkpKVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpOyovXG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXknOiBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bU9mUm93cyc6IGFycmF5Lmxlbmd0aH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbiBcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAwOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfUk9XU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyBvciBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIE9LIGlmIHR5cGUgb2YgY29sdW1ucyBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2ZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAvLyAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLypmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09IElOVF9DT0xVTU5fVFlQRSkpIFxuICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7Ki9cblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXlzJzogYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IGFycmF5cy5sZW5ndGh9O1xuXG4gICAgICAgICAgICAgICAgaSsrOyAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zIG9yIG5ldyBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgdmFsMSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDIgPSAwO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwxID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfUk9XU11bVkFMVUVdXTtcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfQ09MVU1OU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1JlZjonKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlZik7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwyID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfQ09MVU1OU11bVkFMVUVdXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsMSxcbiAgICAgICAgICAgICAgICAgICdudW1PZkNvbHVtbnMnOiB2YWwyfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUT0RPOiBzcGVjaWZ5IGJlaGF2aW91ciAgICAgICAgICAgXG4gICAgICAgICAgICB9IC8vIHN3aXRjaCAgICAgICAgXG5cbiAgICAgICAgY3BwRnVuY0lucHV0LnB1c2goYXJnKTtcbiAgICB9IC8vIGZvciBrZXlcblxuICAgIC8vY29uc29sZS5sb2coJ2NwcEZ1bmNJbnB1dDonKTtcbiAgICAvL2NvbnNvbGUubG9nKGNwcEZ1bmNJbnB1dCk7XG5cbiAgICByZXR1cm4gY3BwRnVuY0lucHV0O1xufSAvLyBnZXRDcHBJbnB1dFxuXG4vLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlcnMgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHsgXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2godHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YS5idWYgPSBtb2R1bGUuX21hbGxvYyhhcmcuZGF0YS5udW1PZlJvd3MgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogLy8gYWxsb2NhdGlvbiBtZW1vcnkgZm9yIGNvbHVtbnMgdGhhdCBhcmUgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIGFyZy5kYXRhLm51bU9mQ29sdW1ucyBcbiAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IFxuICAgICAgICB9ICBcbiAgICB9XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygnaW5wdXRzIGFmdGVyIG1lbW9yeSBhbGxvY2F0aW9uOicpO1xuICAgIC8vY29uc29sZS5sb2coaW5wdXRzKTtcbn0gLy8gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXJcblxuLy8gR2V0IGFycmF5IG9mIHZhbHVlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVBhcmFtcyhpbnB1dHMpIHtcbiAgICBsZXQgcGFyYW1zID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZkNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn0gLy8gZ2V0QXJyT2ZXYXNtUGFyYW1zXG5cbi8vIEdldCBhcnJheSBvZiB0eXBlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVR5cGVzKGlucHV0cykge1xuICAgIGxldCB0eXBlcyA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSAvLyBnZXRBcnJPZldhc21UeXBlc1xuXG4vLyBQdXQgYXJyYXkgZGF0YSB0byBidWZmZXJcbmZ1bmN0aW9uIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGxldCBzaGlmdDtcbiAgICBsZXQgaGVhcDsgICAgXG4gICAgXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgIFxuICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFyZy5kYXRhLmFycmF5LCBhcmcuZGF0YS5idWYgPj4gc2hpZnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgIGxldCBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQ29sdW1ucyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBhcmcuZGF0YS5hcnJheXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2x1bW5zOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5c1tpXSwgKGJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn0gLy8gcHV0RGF0YVRvQnVmZmVyXG5cbi8vIEdldCBhcnJheSBkYXRhIGZyb20gYnVmZmVyLlxuZnVuY3Rpb24gZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcblxuICAgIGxldCBoZWFwO1xuICAgIGxldCBudW1PZlJvd3M7XG4gICAgbGV0IG51bU9mQ29scztcbiAgICBsZXQgbnVtT2ZCeXRlczsgICAgXG4gICAgbGV0IGJ1ZjtcblxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UOyAgICBcbiAgICAgICAgICAgICAgICBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqXTtcblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheSA9IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiBcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBudW1PZkNvbHMgPSBhcmcuZGF0YS5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goYXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhcmcuYXJyYXlzID0gYXJyYXlzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSAgICAgICAgICAgIFxufSAvLyBnZXREYXRhRnJvbUJ1ZmZlclxuXG4vLyBDbGVhciBtZW1vcnkgYWxsb2NhdGVkIGZvciBhcnJheSBkYXRhXG5mdW5jdGlvbiBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSBcbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKSB7IC8vIHByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBlYWNoIG5vbi1udW1iZXIgY2FzZVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIG1vZHVsZS5fZnJlZShhcmcuZGF0YS5idWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gICAgXG59IC8vIGNsZWFyTWVtb3J5Rm9yQnVmZmVyXG5cbi8vIEV4dHJhY3QgbmV3bHkgY3JlYXRlZCBkYXRhOiBuZXcgY29sdW1uKHMpIGFyZSBjcmVhdGVkXG5mdW5jdGlvbiBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MsIGFyZ3NBZnRlcldhc21DYWxsKSB7XG4gICAgLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbiAgICBjb25zdCB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5fTtcblxuICAgIGxldCBpID0gMDtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSBcbiAgICB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaChhcmcudHlwZSl7IC8vIFByb2Nlc3MgZWFjaCB0eXBlXG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgbmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gKDApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBcbiAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBhcmcubmFtZTtcblxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBrID0gMTsgayA8PSBsZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goKGspLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGVsc2UgbmFtZXMgPSBhcmcubmFtZXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5c1tqXSkpO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICB9XG59IC8vIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhXG5cbi8vIEdldCBvdXRwdXQgZGF0YTogb3ZlcmFsbCBvdXRwdXQgaXMgY3JlYXRlZFxuZnVuY3Rpb24gZ2V0T3V0cHV0KGZ1bmNTcGVjaWZpY2F0aW9uKSB7ICBcbiAgICBsZXQgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuICAgIFxuICAgIGNvbnN0IHR5cGVUb0RhdGFGaWVsZE1hcCA9IHsnbmV3RmxvYXRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiAnY29sdW1uJ307XG5cbiAgICBzd2l0Y2gob3V0cHV0LnR5cGUpIHtcblxuICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ09MVU1OOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW47XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRBQkxFX09GX0NPTFVNTlM6XG4gICAgICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW5zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT0JKRUNUUzpcbiAgICAgICAgICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgICAgICAgICBmb3IobGV0IG5hbWUgb2Ygb3V0cHV0LnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbbmFtZV07XG4gICAgICAgICAgICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ1t0eXBlVG9EYXRhRmllbGRNYXBbYXJnLnR5cGVdXSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlUb1JldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbn0gLy8gZ2V0T3V0cHV0XG5cbi8vIENsZWFyIG5ld2x5IGNyZWF0ZWQgZGF0YSBmaWVsZHMgKG5ldyBjb2x1bW4ocykpXG5mdW5jdGlvbiBjbGVhck5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7IFxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1uID0gbnVsbDsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBjbGVhck5ld2x5Q3JlYXRlZERhdGFcblxuLy8gVEhFIE1BSU4gRlVOQ1RJT046IGEgd3JhcHBlciBmb3IgQysrLWZ1bmN0aW9uIGNhbGxcbmV4cG9ydCBmdW5jdGlvbiBjcHBXcmFwcGVyKG1vZHVsZSwgYXJncywgY3BwRnVuY05hbWUsIHJldHVyblR5cGUpIHtcbiAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFycmF5cyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIHB1dCBkYXRhIChqdXN0IGNvbHVtbihzKSkgdG8gYWxsb2NhdGVkIGJ1ZmZlcnNcbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgcGFyYW1zID0gZ2V0QXJyT2ZXYXNtUGFyYW1zKGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygncGFyYW1zOicpO1xuICAgIC8vY29uc29sZS5sb2cocGFyYW1zKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzJyB0eXBlcyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgbGV0IHR5cGVzID0gZ2V0QXJyT2ZXYXNtVHlwZXMoYXJncyk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygndHlwZXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyh0eXBlcyk7XG5cbiAgICAvLyBjYWxsIHdhc20tZnVuY3Rpb25cbiAgICBsZXQgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNwcEZ1bmNOYW1lLCByZXR1cm5UeXBlLCB0eXBlcywgcGFyYW1zKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAvLyBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgKGp1c3QgY29sdW1uKHMpKVxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSwgYXJncyk7ICAgICAgICBcblxuICAgIC8vIGNsZWFyIG1lbW9yeSB0aGF0IHdhcyBwcmV2aW91c2VseSBhbGxvY2F0ZWRcbiAgICBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnZG9uZScpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0IHRoZSByZXF1aXJlZCBvdXRwdXQuXG4vLyBJdCB0YWtlcyBhIHNwZWNpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBjb21wdXRlZFxuLy8gYW5kIGV4dHJhY3RzIHRoZSByZXF1aXJlZCByZXN1bHRzLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdChmdW5jU3BlY2lmaWNhdGlvbiwgZGF0YUZyb21XZWJXb3JrZXIpIHtcbiAgICBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMuX2NhbGxSZXN1bHQgPSBkYXRhRnJvbVdlYldvcmtlci5jYWxsUmVzdWx0OyAgXG5cbiAgICBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMsIGRhdGFGcm9tV2ViV29ya2VyLmFyZ3MpOyAgICBcblxuICAgIGxldCBvdXRQdXQgPSBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pO1xuXG4gICAgLy8gQmVsb3csIHdlIHJlbW92ZSBuZXdseSBjcmVhdGVkIGNvbHVtbihzKSwgd2hpY2ggYXJlIGNyZWF0ZWQgYXQgdGhlIGV4dHJhY3Rpb24tc3RlcC5cbiAgICAvLyBJdCBpcyBlc3BlY2lhbGx5IHJlcXVpcmVkLCB3aGVuIG11bHRpcGxlIGNhbGwgb2Ygd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VyLlxuICAgIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG91dFB1dDtcbn0iXSwibmFtZXMiOlsiX3NjcmlwdERpciIsImV4cG9ydEVEQSIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInVuZGVmaW5lZCIsInJlYWR5UHJvbWlzZVJlc29sdmUiLCJyZWFkeVByb21pc2VSZWplY3QiLCJNb2R1bGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRCaW5hcnkiLCJtb2R1bGVPdmVycmlkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJhcmd1bWVudHNfIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiYmluZCIsIndhc21CaW5hcnkiLCJ3YXNtTWVtb3J5IiwiZXJyIiwid2FybiIsIldlYkFzc2VtYmx5IiwiYWJvcnQiLCJidWZmZXIiLCJIRUFQOCIsIkhFQVBVOCIsIkhFQVAzMiIsIkhFQVBVMzIiLCJBQk9SVCIsIlVURjhEZWNvZGVyIiwiVGV4dERlY29kZXIiLCJVVEY4VG9TdHJpbmciLCJwdHIiLCJtYXhCeXRlc1RvUmVhZCIsImhlYXBPckFycmF5IiwiaWR4IiwiZW5kSWR4IiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJzdHIiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwidXBkYXRlR2xvYmFsQnVmZmVyQW5kVmlld3MiLCJidWYiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiY2FsbFJ1bnRpbWVDYWxsYmFja3MiLCJjYWxsYmFja3MiLCJsZW5ndGgiLCJzaGlmdCIsIkV4Y2VwdGlvbkluZm8iLCJleGNQdHIiLCJ0aGlzIiwic2V0X3R5cGUiLCJ0eXBlIiwiZ2V0X3R5cGUiLCJzZXRfZGVzdHJ1Y3RvciIsImRlc3RydWN0b3IiLCJnZXRfZGVzdHJ1Y3RvciIsInNldF9yZWZjb3VudCIsInJlZmNvdW50Iiwic2V0X2NhdWdodCIsImNhdWdodCIsImdldF9jYXVnaHQiLCJzZXRfcmV0aHJvd24iLCJyZXRocm93biIsImdldF9yZXRocm93biIsImluaXQiLCJzZXRfYWRqdXN0ZWRfcHRyIiwiYWRkX3JlZiIsInZhbHVlIiwicmVsZWFzZV9yZWYiLCJwcmV2IiwiYWRqdXN0ZWRQdHIiLCJnZXRfYWRqdXN0ZWRfcHRyIiwiZ2V0X2V4Y2VwdGlvbl9wdHIiLCJfX19jeGFfaXNfcG9pbnRlcl90eXBlIiwiYWRqdXN0ZWQiLCJlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyIiwic2l6ZSIsImdyb3ciLCJieXRlTGVuZ3RoIiwiZ2V0Q0Z1bmMiLCJpZGVudCIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJyZXQiLCJsZW4iLCJvdXRQdHIiLCJtYXhCeXRlc1RvV3JpdGUiLCJoZWFwIiwib3V0SWR4IiwiaSIsInUiLCJjaGFyQ29kZUF0Iiwic3RyaW5nVG9VVEY4QXJyYXkiLCJzdHJpbmdUb1VURjgiLCJzdGFja0FsbG9jIiwiYXJyIiwiYXJyYXkiLCJzZXQiLCJ3cml0ZUFycmF5VG9NZW1vcnkiLCJmdW5jIiwiY0FyZ3MiLCJzdGFjayIsImNvbnZlcnRlciIsInN0YWNrU2F2ZSIsImFwcGx5Iiwic3RhY2tSZXN0b3JlIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsImFzbUxpYnJhcnlBcmciLCJjb25kaXRpb24iLCJsaW5lIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJpbmZvIiwicmVjZWl2ZUluc3RhbmNlIiwiaW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwiY2FsbGJhY2siLCJyZW1vdmVSdW5EZXBlbmRlbmN5IiwicmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQiLCJyZXN1bHQiLCJpbnN0YW50aWF0ZUFycmF5QnVmZmVyIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJVUkwiLCJjYXRjaCIsImJpbmFyeSIsImluc3RhbnRpYXRlIiwicmVhc29uIiwiaW5zdGFudGlhdGVTdHJlYW1pbmciLCJjcmVhdGVXYXNtIiwiYXJndW1lbnRzIiwicnVuIiwiZG9SdW4iLCJwb3N0UnVuIiwicHJlUnVuIiwic2V0VGltZW91dCIsIm51bWVyaWNBcmdzIiwiZXZlcnkiLCJydW5DYWxsZXIiLCJwb3AiLCJyZWFkeSIsImRlZmluZSIsIk5VTV9UWVBFIiwiRkxPQVRfQ09MVU1OX1RZUEUiLCJJTlRfQ09MVU1OX1RZUEUiLCJGTE9BVF9DT0xVTU5TX1RZUEUiLCJORVdfRkxPQVRfQ09MVU1OU19UWVBFIiwiSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19JTlRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTl9UWVBFIiwiTkVXX0lOVF9DT0xVTU5fVFlQRSIsIklOVF9UWVBFIiwiRE9VQkxFX1RZUEUiLCJOVU1CRVIiLCJoZWFwTWFwIiwidHlwZU1hcCIsInNoaWZ0TWFwIiwiY3BwV3JhcHBlciIsImNwcEZ1bmNOYW1lIiwiaW5wdXRzIiwiYXJnIiwiZGF0YSIsIl9tYWxsb2MiLCJudW1PZlJvd3MiLCJCWVRFU19QRVJfRUxFTUVOVCIsIm51bU9mQ29sdW1ucyIsImFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyIiwibnVtT2ZCeXRlcyIsImFycmF5cyIsInB1dERhdGFUb0J1ZmZlciIsInBhcmFtcyIsInB1c2giLCJnZXRBcnJPZldhc21QYXJhbXMiLCJ0eXBlcyIsImdldEFyck9mV2FzbVR5cGVzIiwibnVtT2ZDb2xzIiwiaiIsImdldERhdGFGcm9tQnVmZmVyIiwiX2ZyZWUiLCJjbGVhck1lbW9yeUZvckJ1ZmZlciJdLCJzb3VyY2VSb290IjoiIn0=
|
|
Binary file
|